Tôi nghĩ rằng ký hiệu gạch chéo git này có thể được hiểu rõ nhất bằng cách nhìn vào bên trong .git
thư mục của bạn .
Ví dụ, đây là một cây viết tắt của .git của tôi cho cơ sở nguồn LibreOffice.
Trong linux sudo apt-get install tree
rất hữu ích để xem điều này.
Trong Windows tôi nghĩ rằngtree
lệnh vẫn có thể hoạt động.
Cuộn xuống và xem các ref (còn gọi là 'tài liệu tham khảo') ở gần cuối:
$ tree
.
├── branches
├── config
├── description
├── FETCH_HEAD
├── gitk.cache
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
...
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ ├── heads
│ │ ├── master
│ │ └── remotes
│ │ └── origin
│ └── remotes
│ └── origin
│ ├── distro
│ │ ├── cib
│ │ │ └── libreoffice-6-0
│ │ ├── collabora
│ │ │ └── cp-6.0
│ │ └── lhm
│ │ └── libreoffice-5-2+backports
│ ├── HEAD
│ ├── libreoffice-6-2
│ ├── master
│ └── private
│ └── mst
│ └── sw_redlinehide_4a
├── objects
│ ├── info
│ └── pack
│ ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.idx
│ ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.pack
│ ├── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.idx
│ └── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.pack
├── ORIG_HEAD
├── packed-refs
└── refs
├── heads
│ ├── master
│ └── remotes
│ └── origin
├── remotes
│ └── origin
│ ├── distro
│ │ ├── cib
│ │ │ └── libreoffice-6-0
│ │ ├── collabora
│ │ │ └── cp-6.0
│ │ └── lhm
│ │ └── libreoffice-5-2+backports
│ ├── HEAD
│ ├── libreoffice-6-2
│ ├── master
│ └── private
│ └── mst
│ └── sw_redlinehide_4a
└── tags
└── libreoffice-6-2-branch-point
32 directories, 45 files
Nó có thể đã ít gây nhầm lẫn hơn nếu nó được đặt ra như thế này, nhưng nó không phải là:
repositories (i.e. independent trees)
├──local
│ └──master
│
└──origin1
│ └──master
└──origin2
└──master
Chúng tôi có ba loại tài liệu tham khảo cơ bản: người đứng đầu , điều khiển từ xa và thẻ .
.git / refs / người đứng đầu tổ chức địa phương của chúng tôi chủ .
.git / refs / điều khiển từ xa có thể chứa một số điều khiển từ xa, mặc dù tại thời điểm này chúng ta chỉ có nguồn gốc trong đó.
.git / refs / tags (được thảo luận ở nơi khác).
gốc như vậy, là một và chỉ từ xa của chúng tôi. Nó giữ nguồn gốc / chủ .
Chúng tôi thấy rằng chúng tôi có 2 ĐẦU (con trỏ tới các nhánh hiện tại), một cục bộ và một điều khiển từ xa:
$ cat .git/HEAD # local: HEAD -> master
ref: refs/heads/master
$ cat .git/refs/remotes/origin/HEAD # remote origin: HEAD -> master
ref: refs/remotes/origin/master
Nếu bạn liệt kê các chi nhánh của bạn :
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/aoo/aw080
remotes/origin/aoo/trunk
remotes/origin/distro/capgemini/cg-4.1
remotes/origin/distro/cib/libreoffice-5-0
remotes/origin/distro/cib/libreoffice-5-1
remotes/origin/distro/cib/libreoffice-5-2
...
- Chi nhánh đầu tiên được liệt kê ( chính ) là nhánh duy nhất không phải là điều khiển từ xa. Vì vậy, trong trường hợp này, chúng tôi có một chi nhánh địa phương. Đây là nơi chúng ta sẽ bắt đầu công việc của mình từ đó, cho các chi nhánh mới của chúng ta và các cam kết tiếp theo.
Tiếp theo, bạn có thể có nhiều chi nhánh theo dõi từ xa, và chúng tôi làm ở đây. Bạn biết đây là những nhánh theo dõi từ xa vì chúng có tiền tố là ' điều khiển từ xa / '. Những cái được hiển thị ở đây là cho nguồn gốc có tên từ xa.
Vì vậy, dòng thứ hai là con trỏ nhánh hiện tại của nguồn gốc . Từ xa / nguồn gốc: CHÍNH - điểm đến -> chính. Điều này cho thấy trong kho lưu trữ từ xa, nhánh hiện tại là nhánh của chúng có tên là master , (không bị nhầm lẫn với nhánh cục bộ của chúng ta có tên master ).
Các nhánh còn lại không được tìm thấy trong .git / refs / cây của bạn, nhưng thay vào đó bạn sẽ tìm thấy chúng trong .git/packed-refs
.
Khi nào chúng ta git fetch chúng tôi tải thay đổi từ kho lưu trữ từ xa, vào kho theo dõi từ xa của chúng tôi.
Khi nào chúng ta hợp nhất, chúng tôi hợp nhất các thay đổi trong kho lưu trữ theo dõi từ xa cục bộ này vào nhánh hoặc nhánh cục bộ đang hoạt động của chúng tôi, trong trường hợp này vào nhánh chính của chúng tôi.
(Khi nào chúng ta kéo, chúng tôi thực hiện cả hai bước này trong một thao tác.)
Thật thú vị khi lưu ý các UUID cục bộ và từ xa này cho chủ hiện đang trỏ đến cùng một nút (còn gọi là 'commit'):
$ cat refs/heads/master # local master
1ca409292272632f443733450313de5a82c54a9c
$ cat refs/remotes/origin/master # remote origin master
1ca409292272632f443733450313de5a82c54a9c
Vì vậy, chủ địa phương của chúng tôi trỏ đến cùng một nơi với chủ gốc của điều khiển từ xa:
[local] master = [remote] origin master
Cuối cùng, tôi nghĩ cũng hữu ích khi xem qua .git/packed-refs
$ cat packed-refs
# pack-refs with: peeled fully-peeled
3c1d4742e649fe9c8aed8c2817fe3e1f3364f298 refs/remotes/origin/aoo/aw080
e87c8b7922e9a73e0abb7f9a7a47c9ac3374a826 refs/remotes/origin/aoo/trunk
b70fdffb041c12f124dcc0822b61bf3450e53137 refs/remotes/origin/distro/capgemini/cg-4.1
5dbc3f1754809b9489faaf380b1a4bdbcfbb6205 refs/remotes/origin/distro/cib/libreoffice-5-0
cfdbc96ca47d68d6785fd21829a8d61f49d6e591 refs/remotes/origin/distro/cib/libreoffice-5-1
5189c8c47461ef09739086e55512fc6a10245273 refs/remotes/origin/distro/cib/libreoffice-5-2
3bee5917569ca8e6ee3b086458f5b1a917b88ca1 refs/remotes/origin/distro/cib/libreoffice-5-3
92fbe703f9ca480d3a2b8610d87e991c729edf77 refs/remotes/origin/distro/cib/libreoffice-5-4
05c0a5df66cc69d75280f05b804cf82f3387d42b refs/remotes/origin/distro/cib/libreoffice-6-0
7fe193e759b24b90852e6e327115b77114d7b119 refs/remotes/origin/distro/cib/libreoffice-6-1
8187f7aa413e7ef7b377eea2b057d336bf256867 refs/remotes/origin/distro/collabora/cd-5.3
7a6b608591e21ef61dc05cff9fc58da531035755 refs/remotes/origin/distro/collabora/cd-5.3-3.1
....
Không nghi ngờ gì điều này để lại nhiều câu hỏi hơn câu trả lời, nhưng tôi nghĩ nó có thể bắt đầu giúp bạn trả lời câu hỏi của riêng bạn về những gì.