git checkout-index
命令將文件從索引複製到工作樹。`git checkout-index -u`或`--index`做什麼?
文檔包括關於其-u
或--index
命令行參數的隱蔽備註:
-u
--index
爲索引中檢驗出的條目更新統計信息文件。
什麼是「統計信息?」更新它並不更新它有什麼區別?
我發現在簡單的實驗中,git checkout-index
只是將文件寫入工作樹,正如您所期望的那樣;我看不到使用-u
/--index
而不使用它的任何區別。
git checkout-index
命令將文件從索引複製到工作樹。`git checkout-index -u`或`--index`做什麼?
文檔包括關於其-u
或--index
命令行參數的隱蔽備註:
-u
--index
爲索引中檢驗出的條目更新統計信息文件。
什麼是「統計信息?」更新它並不更新它有什麼區別?
我發現在簡單的實驗中,git checkout-index
只是將文件寫入工作樹,正如您所期望的那樣;我看不到使用-u
/--index
而不使用它的任何區別。
git-checkout-index
複製數據從索引到工作樹。 git-update-index
複製元數據從工作樹到該索引。
這些是需要明確告訴做什麼的低級命令。
這個選項完全存在的是用戶界面設計的一個奇蹟一個有用的選項,以確保git的索引反映操作執行後的工作樹的一致視圖。
具體來說,此更新(至少)不會貢獻給git存儲庫的元數據,而是用於確定文件是否未更改。見How to get a human-readable dump of .git/index?和What does the git index contain EXACTLY?。
新增於415e96c。通過一個例子,我將跟着t/t2002-checkout-cache-u.sh
,它首先運行命令沒有,然後與-u
(再次,這是「相當於git update-index - 在檢出條目上刷新」) 。
1)製備:
echo frotz >path0 &&
git update-index --add path0 &&
t=$(git write-tree)
2)無-u,GIT中結帳索引污跡STAT信息。
rm -f path0 &&
git read-tree $t &&
git checkout-index -f -a &&
git diff-files --exit-code
輸出的DIFF-文件:
:100644 100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0000000000000000000000000000000000000000 M path0
--> 1
看看有什麼索引:
$ git ls-files --debug
path0
ctime: 0:0
mtime: 0:0
dev: 0 ino: 0
uid: 0 gid: 0
size: 0 flags: 0
3)-u,git的結帳指數回升的新文件統計信息。
rm -f path0 &&
git read-tree $t &&
git checkout-index -u -f -a &&
git diff-files --exit-code
(返回0)
現在的stat(2)有:
$ git ls-files --debug
path0
ctime: 1491479474:0
mtime: 1491479474:0
dev: 16777220 ino: 50556411
uid: 501 gid: 20
size: 6 flags: 0
除了被記錄的統計信息,有一個在輸出另一個有趣的一點。爲什麼git-diff-files
表示工作樹和索引之間存在差異?
手冊說,在輸出域是
SHA1爲 「DST」; 0 {40}如果創建,不合並或「看工作樹」。
<如果一個文件是文件系統上的新文件,並且它與索引不同步,則sha1>顯示爲全0。
所以這個測試用例說明了git使用元數據信息的一種方式:比較工作樹和索引中的文件。如果統計信息看起來過時(或全零),那麼文件可能已經改變。由於git-read-tree
只寫入索引,而不是寫入工作樹,因此必須使stat信息無效。如果統計信息有效,git-diff-files
可以自信地給出該條目的blob ID。
您是否看到'.git/index'的mtime變化? –