git bundle create
Yöntemlerden biri havuzu arasında veri alışverişi için harici depolama kullanmaktır git demeti . Bu şekilde, ara Git depoları için değil, her aktarım için yalnızca tek dosyalarınız olur.
Her "git push" bir dosya oluşturulmasına dönüşür, "git fetch" bu dosyadan bir şeyler alır.
Demo oturumu
İlk depoyu oluşturmak ve ilk "ittirmeyi" yapmak
gitbundletest$ mkdir repo1
gitbundletest$ cd repo1
repo1$ git init
Initialized empty Git repository in /tmp/gitbundletest/repo1/.git/
repo1$ echo 1 > 1 && git add 1 && git commit -m 1
[master (root-commit) c8b9ff9] 1
1 file changed, 1 insertion(+)
create mode 100644 1
repo1$ git bundle create /tmp/1.bundle master HEAD
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 384 bytes | 384.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
ikinci depoya "klonlama" (yani ikinci bilgisayar):
gitbundletest$ git clone /tmp/1.bundle repo2
Cloning into 'repo2'...
Receiving objects: 100% (3/3), done.
gitbundletest$ cd repo2/
repo2$ cat 1
1
Bazı değişiklikler yapın ve bunları başka bir paket dosyasına “itin”:
repo2$ echo 2 > 1 && git add 1 && git commit -m 2
[master 250d387] 2
1 file changed, 1 insertion(+), 1 deletion(-)
repo2$ git bundle create /tmp/2.bundle origin/master..master origin/HEAD..HEAD
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 415 bytes | 415.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
"çekerek" ilk depoda değişiklik yapar:
repo2$ cd ../repo1
repo1$ git pull /tmp/2.bundle
Receiving objects: 100% (3/3), done.
From /tmp/2.bundle
* branch HEAD -> FETCH_HEAD
Updating c8b9ff9..250d387
Fast-forward
1 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
repo1$ cat 1
2
İlk paketin aksine, ikincisi sadece kısmi Git geçmişi içerir ve doğrudan klonlanamaz:
repo1$ cd ..
gitbundletest$ git clone /tmp/2.bundle repo3
Cloning into 'repo3'...
error: Repository lacks these prerequisite commits:
error: c8b9ff94942039469fa1937f6d38d85e0e39893a
fatal: bad object 250d38747656401e15eca289a27024c61e63ed68
fatal: remote did not send all necessary objects
Her bir paketin hangi ürün grubunu içermesi gerektiğini elle belirtmeniz gereken paketlerin kullanımında dezavantaj vardır. Aksine git push
, git bundle
önceki pakette olanı izlemiyorsa, manuel olarak ayarlamanız gerekir, refs/remotes/origin/master
aksi takdirde paketler olabileceğinden daha büyük olur.