-
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
-
5. DaÄıtık Git
-
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
-
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ı
7.12 Git AraƧları - Demetleme (Bundling)
Demetleme (Bundling)
Git verisini aÄ Ć¼zerinden aktarmanın yaygın yollarını (HTTP, SSH, vb.) ƶÄrendik, ancak aslında pek kullanılmayan fakat oldukƧa yararlı olabilen baÅka bir yol daha vardır.
Git, verisini tek bir dosya halinde "demetleyebilir" ve bu, ƧeÅitli senaryolarda faydalı olabilir.
Belki aÄınız kapalıdır ama deÄiÅikliklerinizi iÅ arkadaÅlarınıza gƶndermek istiyorsunuz.
Belki dıÅarıda bir yerde ƧalıÅıyorsunuz ve güvenlik nedeniyle yerel aÄa eriÅiminiz yoktur.
Belki sadece kablosuz/eternet kartınız bozulmuÅtur.
Belki Åu anda paylaÅılan bir sunucuya eriÅiminiz yok ve birine güncellemeleri e-posta ile gƶndermek istersiniz ama format-patch
ile 40 deÄiÅikliÄi aktarmak istemiyorsunuzdur.
İÅte burada git bundle
komutunun yardımcı olabileceÄi yer vardır.
bundle
komutu, bir git push
komutuyla normalde aÄ Ć¼zerinden gƶnderilecek her Åeyi ikilik (binary) bir dosya demeti haline getirecektir.
Bu dosyayı birine e-posta ile gƶnderebilir veya bir taÅınabilir sürücüye koyup, ardından baÅka bir repoda aƧabilirsiniz.
Basit bir ƶrnek gƶrelim. İki katkı iÅlenmiÅ olan bir repoya sahip olduÄunuzu varsayalım:
$ git log
commit 9a466c572fe88b195efd356c3f2bbeccdb504102
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Mar 10 07:34:10 2010 -0800
second commit
commit b1ec3248f39900d2a406049d762aa68e9641be25
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Mar 10 07:34:01 2010 -0800
first commit
EÄer o repoyu birine gƶndermek istiyorsanız ama gƶnderilecek repoya eriÅiminiz yoksa veya hemen bir tane kurmak istemiyorsanız, git bundle create
ile demetleyebilirsiniz.
$ git bundle create repo.bundle HEAD master
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 441 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
Artık, repoyu yeniden oluÅturmak iƧin gereken tüm verilere sahip repo.bundle
adında bir dosyanız var.
bundle
komutu ile dahil edilmesini istediÄiniz her referansı veya belirli bir deÄiÅiklik aralıÄını belirtmeniz gerekir.
EÄer bunu baÅka bir yere kopyalamak niyetindeyseniz, burada yaptıÄımız gibi HEADāi de bir referans olarak eklemelisiniz.
Bu repo.bundle
dosyasını baÅka birine e-posta ile gƶnderebilir veya USB sürücüsüne koyarak ulaÅtırabilirsiniz.
Bunun yanında, diyelim ki bu repo.bundle
dosyası size gƶnderildi ve projede ƧalıÅmak istiyorsunuz.
Bu ikilik dosyayı, sanki URLāden klonlama yapar gibi, bir dizine kopyalayabilirsiniz.
$ git clone repo.bundle repo
Cloning into 'repo'...
...
$ cd repo
$ git log --oneline
9a466c5 second commit
b1ec324 first commit
EÄer referanslara HEADāi dahil etmezseniz, -hangi dala geƧileceÄini bilemeyeceÄi iƧin- -b master
veya iƧerilen herhangi bir dalı belirtmeniz gerekir.
Åimdi diyelim ki üç adet deÄiÅiklik yaptınız ve bunları bir USB sürücüsü veya e-posta ile geri gƶndermek istiyorsunuz.
$ git log --oneline
71b84da last commit - second repo
c99cf5b fourth commit - second repo
7011d3d third commit - second repo
9a466c5 second commit
b1ec324 first commit
Ćncelikle, demete dahil etmek istediÄimiz deÄiÅiklik aralıÄını belirlememiz gerekiyor. AÄ Ć¼zerinde aktarılacak minimum veri kümesini otomatik olarak belirleyen aÄ protokollerinin aksine, bunu manuel olarak kendimiz belirlememiz gerekecek. Åimdi, doÄrudan tüm repoyu demetlemek iÅe yarayacak olsa da lokal olarak yaptıÄımız üç deÄiÅikliÄi iƧeren farkı demetlemek daha iyidir.
Bunu yapabilmek iƧin farkı hesaplamanız gerekecek.
Katkı AralıÄı bƶlümünde aƧıkladıÄımız gibi, bir dizi deÄiÅiklik aralıÄını belirtmek iƧin birkaƧ yol vardır.
BaÅta kopyaladıÄımız dalda bulunmayıp, artık master dalımızda olan üç deÄiÅikliÄi almak iƧin origin/master..master
veya master ^origin/master
gibi bir Åey kullanabilirsiniz.
Bu iÅlemi log
komutuyla test edebilirsiniz.
$ git log --oneline master ^origin/master
71b84da last commit - second repo
c99cf5b fourth commit - second repo
7011d3d third commit - second repo
Åimdi demete dahil etmek istediÄimiz deÄiÅikliklerin listesine sahip olduÄumuza gƶre, onları demetleyelim. Bunu, git bundle create` komutunu kullanarak yaparız; bunu yaparken demetimizin dosya adını ve eklemek istediÄimiz katkıların aralıÄını veririz.
$ git bundle create commits.bundle master ^9a466c5
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (9/9), 775 bytes, done.
Total 9 (delta 0), reused 0 (delta 0)
Åimdi dizinimizde bir commits.bundle
dosyasına sahibiz.
Bu dosyayı alıp arkadaÅımıza gƶnderirsek, geƧen zaman zarfında dosya üzerinde daha fazla ƧalıÅma yapılmıŠolsa bile, bunu orijinal repoya aktarabilir.
ArkadaÅımız bu demeti aldıÄında, onu reposuna aktarmadan ƶnce iƧerdiÄini gƶrmek iƧin inceleyebilir.
İlk komut, dosyanın gerƧekten geƧerli bir Git demeti olduÄundan ve bunu doÄru Åekilde yeniden oluÅturmak iƧin gerekli tüm eklere sahip olduÄunuzdan emin olmak iƧin bundle verify
komutudur.
$ git bundle verify ../commits.bundle
The bundle contains 1 ref
71b84daaf49abed142a373b6e5c59a22dc6560dc refs/heads/master
The bundle requires these 1 ref
9a466c572fe88b195efd356c3f2bbeccdb504102 second commit
../commits.bundle is okay
EÄer demetleyici, tüm üç deÄiÅiklik yerine, yalnızca yaptıkları son iki deÄiÅikliÄin bir demetini oluÅturmuÅ olsaydı, gerekli tarihlerden biri eksik olacaÄı iƧin, orijinal repo bunu alamazdı.
verify
komutu ise Åu Åekilde gƶrünecekti:
$ git bundle verify ../commits-bad.bundle
error: Repository lacks these prerequisite commits:
error: 7011d3d8fc200abe0ad561c011c3852a4b7bbe95 third commit - second repo
Ancak, ilk demetimiz geƧerlidir, bu yüzden ondaki deÄiÅiklikleri Ƨekebiliriz. İƧeri aktarılabilen demette hangi dalların olduÄunu gƶrmek isterseniz, yalnızca uƧları (HEAD) listelemek iƧin bir komutumuz da mevcuttur:
$ git bundle list-heads ../commits.bundle
71b84daaf49abed142a373b6e5c59a22dc6560dc refs/heads/master
verify
alt komutu aynı zamanda baÅlıkları da size sƶyleyecektir.
Amacımız iƧe aktarılabilenleri gƶrmektir, haliyle bu demetten deÄiÅiklikleri almak iƧin fetch
veya pull
komutlarını kullanabilirsiniz.
Åimdi demetin master dalını, repomuzdaki other-master adlı bir dala almak iƧin fetch
komutunu kullanıyoruz:
$ git fetch ../commits.bundle master:other-master
From ../commits.bundle
* [new branch] master -> other-master
Åimdi, other-master dalında alınan deÄiÅiklikleri, kendi master dalımızda yaptıÄımız tüm deÄiÅikliklerle birlikte gƶrebiliriz.
$ git log --oneline --decorate --graph --all
* 8255d41 (HEAD, master) third commit - first repo
| * 71b84da (other-master) last commit - second repo
| * c99cf5b fourth commit - second repo
| * 7011d3d third commit - second repo
|/
* 9a466c5 second commit
* b1ec324 first commit
GƶrdüÄünüz gibi, git bundle
uygun aÄa veya paylaÅılan bir repoya sahip olmadıÄınızda paylaÅım yapmak veya aÄ benzeri iÅlemler gerƧekleÅtirmek iƧin gerƧekten yararlı olabilir.