ด้วย Git ทำให้ที่เก็บข้อมูลปกติ (ไม่เปลือย) สองแห่งไม่สามารถผลัก / ดึงไฟล์ไปมาได้โดยตรง จะต้องมีคลังเก็บเปลือย เห็นได้ชัดว่ามันเป็นเหมือนคู่สมรสที่มีลูกและทั้งคู่ก็หย่าร้างกัน ผู้ปกครองจะไม่พูดคุยกัน แต่พวกเขาจะสื่อสารผ่านทางเด็ก
ดังนั้นคุณมีที่เก็บหนึ่งที่คุณโคลนที่เก็บนี้ไปยังที่เก็บเปลือยแล้วคุณโคลนที่หนึ่ง คนแรกและคนที่สามสามารถแลกเปลี่ยนข้อมูลผ่านพื้นที่เก็บข้อมูลที่สองคือที่โล่ง ฉันเดาว่ามันสมเหตุสมผลแล้วเนื่องจากคุณไม่ต้องการให้ใครบางคนสามารถตรวจสอบเนื้อหาในที่เก็บข้อมูลของคุณโดยไม่ได้รับความยินยอมจากคุณเพราะอาจทำให้เกิดข้อขัดแย้งในการผสาน
ดังนั้นนี่คือตัวอย่าง:
บนพีซีใน ~ / พื้นที่ทำงาน
git init
echo "line 1" > afile.txt
git add .
git commit -m ‘initial import’
git clone --bare . ../remote-repository.git
git remote add origin ../remote-repository.git
git push --set-upstream origin master
บนแล็ปท็อปใน ~ / พื้นที่ทำงาน (ห้าม git init ฯลฯ )
git clone //LJZ-DELLPC/remote-repository.git/ .
// จากนั้นทำคอมมิชชันต่าง ๆ แล้วผลักมัน:
echo "line 2" > afile.txt
git add afile.txt
git commit -m 'added line 2'
git push
จากนั้นกลับสู่พีซีใน ~ / พื้นที่ทำงาน
git pull
// จากนั้นทำคอมมิชชันต่าง ๆ แล้วผลักมัน:
git push
ในการดึงคอมไพล์แล็ปท็อป
และอื่น ๆ ..
นี่คือตัวอย่างที่เป็นรูปธรรมทั้งหมดในเครื่องเดียวคัดลอกโดยตรงจากหน้าต่างคำสั่งเพื่อที่เราจะได้รู้ว่าไม่มีขั้นตอนใดถูกทิ้งไปใช้งานได้จริง ฯลฯ :
lylez@LJZ-DELLPC ~
$ cd gitdir
/home/lylez/gitdir
lylez@LJZ-DELLPC ~/gitdir
$ ls
lylez@LJZ-DELLPC ~/gitdir
$ mkdir repo1
lylez@LJZ-DELLPC ~/gitdir
$ cd repo1
/home/lylez/gitdir/repo1
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git init
Initialized empty Git repository in /home/lylez/gitdir/repo1/.git/
lylez@LJZ-DELLPC ~/gitdir/repo1
$ echo "line 1" > afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git add afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git commit -m 'initial import'
[master (root-commit) f407e12] initial import
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git clone --bar . ../repo1-bare-clone
Cloning into bare repository '../repo1-bare-clone'...
done.
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git remote add origin ../repo1-bare-clone
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git push --set-upstream origin master
Branch master set up to track remote branch master from origin.
Everything up-to-date
lylez@LJZ-DELLPC ~/gitdir/repo1
$ cd ..
lylez@LJZ-DELLPC ~/gitdir
$ ls
repo1 repo1-bare-clone
lylez@LJZ-DELLPC ~/gitdir
$ mkdir repo1-remote
lylez@LJZ-DELLPC ~/gitdir
$ cd repo1-remote
/home/lylez/gitdir/repo1-remote
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ git clone ../repo1-bare-clone .
Cloning into '.'...
done.
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ ls
afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ cat afile.txt
line 1
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ echo "line 2" >> afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ git add afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ git commit -m 'added line 2'
[master 5ad31e0] added line 2
1 file changed, 1 insertion(+)
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 260 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /home/lylez/gitdir/repo1-remote/../repo1-bare-clone
f407e12..5ad31e0 master -> master
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ cd ../repo1
lylez@LJZ-DELLPC ~/gitdir/repo1
$ ls
afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1
$ cat afile.txt
line 1
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git pull
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../repo1-bare-clone
f407e12..5ad31e0 master -> origin/master
Updating f407e12..5ad31e0
Fast-forward
afile.txt | 1 +
1 file changed, 1 insertion(+)
lylez@LJZ-DELLPC ~/gitdir/repo1
$ cat afile.txt
line 1
line 2
lylez@LJZ-DELLPC ~/gitdir/repo1
$ echo "line 3" >> afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git add afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git commit -m 'added line 3'
[master 3fa569e] added line 3
1 file changed, 1 insertion(+)
lylez@LJZ-DELLPC ~/gitdir/repo1
$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 265 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../repo1-bare-clone
5ad31e0..3fa569e master -> master
lylez@LJZ-DELLPC ~/gitdir/repo1
$ cd ../repo1-remote/
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ ls
afile.txt
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ cat afile.txt
line 1
line 2
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ git pull
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/lylez/gitdir/repo1-remote/../repo1-bare-clone
5ad31e0..3fa569e master -> origin/master
Updating 5ad31e0..3fa569e
Fast-forward
afile.txt | 1 +
1 file changed, 1 insertion(+)
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ cat afile.txt
line 1
line 2
line 3
lylez@LJZ-DELLPC ~/gitdir/repo1-remote
$ git --version
git version 2.1.1
lylez@LJZ-DELLPC ~/gitdir/repo1-remote