git bundle create
ভাণ্ডারগুলির মধ্যে ডেটা বিনিময় করতে বাহ্যিক স্টোরেজ ব্যবহারের অন্যতম পদ্ধতি হ'ল গিট বান্ডিল । এইভাবে আপনার কাছে প্রতিটি স্থানান্তরের জন্য একক ফাইল রয়েছে, অন্তর্বর্তী গিট সংগ্রহস্থলগুলি নয়।
প্রতিটি "গিট পুশ" ফাইল তৈরিতে পরিণত হয়, "গিট ফ্যাচ" সেই ফাইল থেকে জিনিস আনয়ন করে।
ডেমো সেশন
প্রথম সংগ্রহস্থল তৈরি এবং প্রথম "পুশ" করছেন
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)
দ্বিতীয় সংগ্রহস্থলটিতে (অর্থাৎ দ্বিতীয় কম্পিউটার) "ক্লোনিং":
gitbundletest$ git clone /tmp/1.bundle repo2
Cloning into 'repo2'...
Receiving objects: 100% (3/3), done.
gitbundletest$ cd repo2/
repo2$ cat 1
1
কিছু পরিবর্তন করা এবং এগুলিকে অন্য একটি বান্ডিল ফাইলে "পুশ" করা হচ্ছে:
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)
প্রথম সংগ্রহস্থলটিতে "টানছে" পরিবর্তনগুলি:
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
প্রথম বান্ডিলের বিপরীতে, দ্বিতীয়টিতে কেবল আংশিক গিট ইতিহাস রয়েছে এবং এটি সরাসরি ক্লোনযোগ্য নয়:
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
বান্ডিলগুলি ব্যবহার করার অসুবিধা রয়েছে যা আপনাকে প্রতিটি বান্ডেলে কী পরিমাণ কমিটের অন্তর্ভুক্ত থাকতে হবে তা ম্যানুয়ালি উল্লেখ করতে হবে। বিপরীতে git push
, git bundle
আগের বান্ডেলে যা ছিল তা রাখে না, আপনাকে ম্যানুয়ালি অ্যাডজাস্ট refs/remotes/origin/master
করতে হবে বা বান্ডিলগুলি এটির চেয়ে বড় হতে পারে।