Çekme komutu kullanarak işbirliği yapma
Yeni işinizin dışındaki kapalı kalma sürenizde kedilerin fotoğraflarını barındıran bir web sitesinde çalışıyordunuz. Sürüm denetimi için Git'i kullanıyordunuz ve projeye ortak çalışanları davet etme zamanı geldi. Evinizdeki bir pizza partisi sırasında, arkadaşınız ve kedi dostunuz Alice vizyonunuzu meyveye dönüştürmeye yardımcı olmak için teklifte bulunur ve siz de hevesle kabul edeceksiniz.
Alice'in önce Git projenizin bir kopyasını oluşturması gerekir. Ardından, Alice değişikliklerini yaparken size göndermek isteyecektir. Bu durum Git'in dağıtılmış doğasının parladığı yerdir. Git'i kullanarak, iki veya daha fazla kişi diğerinin çalışmalarının üzerine yazma korkusu olmadan bir proje üzerinde birlikte çalışabilir. Ayrıca, Alice'in çalışmasını çalışmanızla birleştirmeden önce de kontrol edebilirsiniz. (Alice yeteneklidir, ancak hiçbir geliştirici mükemmel değildir. Güven ama doğrula.)
Bu derste, depoyu diğer kişilerin kullanımına açmak için depoyu (depo olarak da adlandırılır) kopyalamayı öğreneceksiniz. Git’in en önemli özelliklerinden biri olan çekme isteklerini kullanmayı da öğreneceksiniz.
Depo kopyalama (git kopyası)
Git'te, komutunu kullanarak depoyu kopyalayarak depoyu git clone
kopyalarsınız. Depoyu işaret eden bir URL'niz veya yolunuz olduğu sürece depo nerede depolanırsa depolansın kopyalayabilirsiniz.
git clone
dosya sistemi yolunu kabul eder; bir SSH yolu (örneğin, git@example.com:alice/Cats
Rsync veya SCP kullandıysanız bu formu veya genellikle , git:
veya ssh
ile file:
başlayan bir URL'yi öğreneceksiniz). Çeşitli formlar için git clone
belgelerde açıklanmıştır. Unix ve Linux'ta kopyalama işlemi sabit bağlantılar kullanır, bu nedenle hızlıdır ve çok az alan kullanır çünkü dosyalar değil, yalnızca dizin girdilerinin kopyalanması gerekir.
Uzak depolar (git çekme)
Git bir depoyu kopyaladığında, adını origin
kullanarak uzak olarak adlandırılan özgün depoya bir başvuru oluşturur. Kopyalanan depoyu, kopyalanan deponun uzak depodan çekeceği veya veri alacağı şekilde ayarlar. (Git de gönderebilirsiniz. Bu modülün ilerleyen bölümlerinde Git'te gönderme hakkında bilgi edineceksiniz.) origin
Git'in değişiklikleri çekmesi ve göndermesi için varsayılan konumdur. git pull
uzak depodaki değişiklikleri yerel depoya kopyalar. git pull
Komut çok verimlidir çünkü yalnızca yeni işlemeleri ve nesneleri kopyalar ve sonra bunları çalışma ağacınıza denetler.
komutunu kullanarak git pull
öğesini origin
çekersiniz. git pull
yöntemini diğer dosya kopyalama yöntemleriyle karşılaştırmak yararlı olabilir. Komutu her scp
şeyi kopyalar. (scp
Unix cp
komutuna benzer, ancak kopyalanan dosyaların aynı bilgisayarda olması gerekmez.) Uzak dizinde 10.000 dosya varsa, scp
bunların tümünü kopyalar. Rsync adlı daha verimli bir program, yerel ve uzak dizinlerdeki her dosyaya bakar ve yalnızca farklı olanları kopyalar. Rsync genellikle yedeklemeler yapmak için kullanılır, ancak dosyaların farklı boyutları veya oluşturma tarihleri olmadığı sürece her dosyayı karma hale getirmesi gerekir.
Git yalnızca işlemelere bakar. İşleme listesini kaydettiği için uzak depodan aldığı son işlemeyi zaten biliyor. Ardından Git, bilgisayara yeni işlemeler ve işaret ettikleri nesneler de dahil olmak üzere değişen her şeyi göndermek için öğesinin kopyalandığını söyler. Bu işlemeler ve nesneler paket adı verilen bir dosyada paketlenir ve tek bir toplu işlemle gönderilir. Son olarak Git, değişen tüm nesneleri paketten çıkararak ve bunları (gerekirse) çalışma ağacındaki işlemeler ve nesnelerle birleştirerek çalışma ağacını güncelleştirir.
Git yalnızca siz söyleyince çeker veya iter. Bu, işletim sisteminden klasöründe yaptığınız değişiklikleri bildirmesini istemesi ve bazen başka birinin değişiklik yapıp yapmadığını sunucuya sorması gereken Dropbox'tan farklıdır.
Çekme istekleri oluşturma (git request-pull)
Alice gibi başka bir geliştirici deponuzu kopyaladıktan ve yerel olarak bazı değişiklikler yaptıktan sonra, bu değişiklikleri özgün depoya geri eklemek isteyecektir. Bu değişiklikleri özgün depoya göndermek doğru yaklaşım gibi görünebilir. Ancak, diğer kullanıcıların deponuzda değişiklik yapma izni olmadığından özgün depoya gönderme işlemi başarısız olabilir. Olması gereken de budur. Şimdilik, gelen değişiklikleri ana kod tabanında birleştirmeden önce gözden geçirmek istiyorsunuz.
Şimdilik Alice'in değişikliklerini ana kod tabanına çekmenizi istemek için bir çekme isteği göndermesi gerekir. Alice bunu kullanarak git request-pull
yapabilir ve bu örnekteki gibi görünebilir:
git request-pull -p origin/main .
Alice uzak taraftaki origin
dala olarak origin/main
başvururmain
.
Bu çekme isteği temelde GitHub'daki çekme isteğiyle aynıdır (GitHub, kodu depolamak için kullanılan bir yerdir ve bu modülü kapsamayız). Çekme isteği, diğer ortak çalışanların değişikliklerini web sitesinde yaptığınız çalışmayla birleştirmeden önce gözden geçirme fırsatı sunar. Kod gözden geçirmeleri, bazıları işbirliğine dayalı programlamanın en önemli parçası olduğunu söyleyebilir.
Uzak (git remote) oluşturma ve çekme isteğini tamamlama (git çekme)
Proje sahibi olarak çekme isteklerini birleştirmeyi bilmeniz gerekir. İlk olarak, başka bir geliştiricinin deposunu git remote
uzak olarak ayarlamak için komutunu kullanırsınız. Ardından komutunu kullanarak çekme ve çekme istekleri için bu uzak alanı git pull
kullanırsınız.
Sahne gerisinde git pull
daha basit iki işlemin bileşimidir: değişiklikleri alan git fetch
ve bu değişiklikleri deponuzla birleştiren git merge
. Bu durumda birleştirme işlemi hızlı bir şekilde yapılmıştır. Bu, Alice'in depolarında en son işlemenize sahip olduğu anlamına gelir, bu nedenle işlemesi herhangi bir değişiklik yapılmadan geçmişinizin önüne eklenebilir.