-
1. Başlangıç
- 1.1 Sürüm Denetimi
- 1.2 Git’in Kısa Tarihçesi
- 1.3 Git Nedir?
- 1.4 Komut Satırı
- 1.5 Git’i Yüklemek
- 1.6 Git’i İlk Defa Kurmak
- 1.7 Yardım Almak
- 1.8 Özet
-
2. Git Temelleri
-
3. Git Dalları
- 3.1 Dallar
- 3.2 Kısaca Dallandırma ve Birleştirme Temelleri
- 3.3 Dal Yönetimi
- 3.4 İş Akışı Dallandırması
- 3.5 Uzak Dallar
- 3.6 Yeniden Temelleme (rebase)
- 3.7 Özet
-
4. Bir Sunucuda Git Kurma
- 4.1 İletişim Kuralları (Protocols)
- 4.2 Bir Sunucuda Git Kurma
- 4.3 SSH Ortak Anahtarınızı Oluşturma
- 4.4 Sunucu Kurma
- 4.5 Git Cini (Daemon)
- 4.6 Akıllı HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Üçüncü Taraf Barındırma (Hosting) Seçenekleri
- 4.10 Özet
-
5. Dağıtık Git
- 5.1 Dağıtık İş Akışları
- 5.2 Projenin Gelişiminde Rol Almak
- 5.3 Bir Projeyi Yürütme
- 5.4 Özet
-
6. GitHub
- 6.1 Bir Projeye Katkıda Bulunmak
- 6.2 Proje Bakımı
- 6.3 Kurumsal Yönetim
- 6.4 GitHub’ı otomatikleştirme
- 6.5 Özet
-
7. Git Araçları
- 7.1 Düzeltme Seçimi
- 7.2 Etkileşimli İzlemleme (Staging)
- 7.3 Saklama ve Silme
- 7.4 Çalışmanızı İmzalama
- 7.5 Arama
- 7.6 Geçmişi Yeniden Yazma
- 7.7 Reset Komutunun Gizemleri
- 7.8 İleri Seviye Birleştirme
- 7.9 Rerere
- 7.10 Git’le Hata Ayıklama
- 7.11 Alt Modüller
- 7.12 Demetleme (Bundling)
- 7.13 Git Nesnesini Değiştirme
- 7.14 Kimlik Bilgisi Depolama
- 7.15 Özet
-
8. Git’i Özelleştirmek
- 8.1 Git Yapılandırması
- 8.2 Git Nitelikleri
- 8.3 Git Kancaları (Hooks)
- 8.4 Bir Örnek: Mecburi Git Politikası
- 8.5 Özet
-
9. Git ve Diğer Sistemler
- 9.1 İstemci Olarak Git
- 9.2 Git’e Geçiş
- 9.3 Özet
-
10. Dahili Git Ögeleri
- 10.1 Tesisat ve Döşeme (Plumbing ve Porcelain)
- 10.2 Git Nesneleri
- 10.3 Git Referansları
- 10.4 Packfiles
- 10.5 Refspec
- 10.6 Transfer Protokolleri
- 10.7 Bakım ve Veri Kurtarma
- 10.8 Ortam Değişkenleri
- 10.9 Özet
-
A1. Ek bölüm A: Diğer Ortamlarda Git
- A1.1 Görsel Arayüzler
- A1.2 Visual Studio ile Git
- A1.3 Visual Studio Code ile Git
- A1.4 Eclipse ile Git
- A1.5 Sublime Text ile Git
- A1.6 Bash ile Git
- A1.7 Zsh ile Git
- A1.8 PowerShell ile Git
- A1.9 Özet
-
A2. Ek bölüm B: Git’i Uygulamalarınıza Gömmek
- A2.1 Git Komut Satırı
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Ek bölüm C: Git Komutları
- A3.1 Kurulum ve Yapılandırma Komutları
- A3.2 Proje Oluşturma Komutları
- A3.3 Kısaca Poz (Snapshot) Alma
- A3.4 Dallandırma ve Birleştirme Komutları
- A3.5 Projeleri Paylaşma ve Güncelleme Komutları
- A3.6 İnceleme ve Karşılaştırma Komutları
- A3.7 Hata Ayıklama (Debugging) Komutları
- A3.8 Yamalama (Patching)
- A3.9 E-Posta Komutları
- A3.10 Harici Sistemler
- A3.11 Yönetim
- A3.12 Tesisat (Plumbing) Komutları
10.5 Dahili Git Ögeleri - Refspec
Refspec
Kitabın tamamında, uzak dallardan yerel referanslara basit eşlemeler kullandık, ancak bunlar daha karmaşık olabilir. Son birkaç bölümü takip edip küçük bir yerel Git reposu oluşturduysanız ve şimdi ona bir uzak repo eklemek istiyorsanız:
$ git remote add origin https://github.com/schacon/simplegit-progit
Yukarıdaki komutu çalıştırmak, repo .git/config
dosyanıza bir bölüm ekler.
Bu bölüm, uzak repo adını (origin
), uzak repo adresini ve alım için kullanılacak refspec 'i belirtir:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
Refspec’in formatı, öncelikle isteğe bağlı bir "" içerir, ardından
" Git’e, hızlı ileri-sarma olmasa bile referansın güncellenmesini bildirir.<src>:<dst>
gelir; burada <src>
uzak taraftaki referanslar için desen ve <dst>
bu referansların yerel olarak izleneceği yerdir.
"
Git git remote add origin
komutuyla otomatik (varsayılan) olarak sunucudaki refs/heads/
altındaki tüm referansları alır ve bunları yerel olarak refs/remotes/origin/
'e yazar.
Dolayısıyla sunucuda master
dalı varsa, bu dala yerel olarak aşağıdakilerden herhangi biri aracılığıyla erişebilirsiniz:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
Git her birini refs/remotes/origin/master
'a genişlettiği için hepsi eşdeğerdir.
Eğer Git’in her seferinde yalnızca master
dalını çekmesini ve uzak sunucudaki diğer tüm dalları değil değiştirmesini istiyorsanız, alım satırını sadece o dala referans gösterecek şekilde değiştirebilirsiniz:
fetch = +refs/heads/master:refs/remotes/origin/master
Bu o uzak reponun git fetch
komutu için varsayılan refspec’tir.
Bir defalık bir çekme yapmak istiyorsanız, özel refspec’i komut satırında da belirtebilirsiniz.
Uzak sunucudaki master
dalını yerel olarak origin/mymaster
'a çekmek için şunu çalıştırabilirsiniz:
$ git fetch origin master:refs/remotes/origin/mymaster
Ayrıca birden fazla refspec belirtebilirsiniz. Komut satırında, birkaç dalı şu şekilde indirebilirsiniz:
$ git fetch origin master:refs/remotes/origin/mymaster \
topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
! [rejected] master -> origin/mymaster (non fast forward)
* [new branch] topic -> origin/topic
Burada bir hızlı ileri-sarma referansı olarak listelenmediği için master
dalının çekilmesi reddedildi.
Bunu, refspec’in önüne {plus}
belirterek geçersiz kılabilirsiniz.
Ayrıca, yapılandırma dosyanızda çekme için birden fazla refspec belirtebilirsiniz.
Her zaman origin
uzak sunucusundan master
ve experiment
dallarını almak istiyorsanız, iki satır ekleyin:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/experiment:refs/remotes/origin/experiment
Desende kısmi globlar kullanamazsınız, yoksa bu geçersiz olur:
fetch = +refs/heads/qa*:refs/remotes/origin/qa*
Ancak, bunun gibi bir şeyi başarmak için ad-alanlarını (veya dizinleri) kullanabilirsiniz.
Eğer bir dizi dalı iten bir QA ekibiniz varsa ve siz master
dalıyla QA ekibinin dallarından herhangi biri dışında hiçbiryerden çekme yapmak istemiyorsanız, şu şekilde bir yapılandırma bölümü kullanabilirsiniz:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*
Eğer bir QA ekibi, geliştiriciler ve entegrasyon ekiplerinin uzak dalları itip işbirliği yaptığı, karmaşık bir iş akışı süreciniz varsa, hepsini bu şekilde kolayca ad-alanına çekebilirsiniz.
Refspec’leri İtmek
Ad-alanlı referansları bu şekilde alabilmeniz güzel, ancak QA ekibi dallarını qa/
ad-alanına nasıl alır?
Bunu, refspecs’i itmek için kullanarak başarırsınız.
Eğer QA ekibi master
dalını uzak sunucuda qa/master
'a itmek istiyorsa, şunu çalıştırabilirler:
$ git push origin master:refs/heads/qa/master
Her seferinde git push origin
çalıştıklarında Git’in bunu otomatik olarak yapmasını istiyorlarsa, yapılandırma dosyalarına bir push
değeri ekleyebilirler:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/qa/master
Tekrar belirtmek gerekirse, bu yapılan varsayılan olarak yerel master
dalının uzak qa/master
dala itilmesine neden olacaktır.
Not
|
Refspec’i bir repodan almak ve başka bir repoya itmekte kullanamazsınız. Bunu yapacak bir örnek için GitHub’taki Herkese Açık Repolarınızı Güncel Tututun bölümüne başvurabilirsiniz. |
Referansları Silmek
Ayrıca, şuna benzer bir şey çalıştırarak refspec’i uzak sunucudan referansları silmek için kullanabilirsiniz:
$ git push origin :topic
Refspec <src>:<dst>
olduğundan, <src>
kısmını kırparak, uzak sunucudaki topic
dalını hiçbir şeye getirebilirsiniz (yani silersiniz).
Ya da daha yeni sözdizimini kullanabilirsiniz (Git v1.7.0’dan itibaren kullanılmaktadır):
$ git push origin --delete topic