2010-08-18 36 views
25

這些都是一樣的嗎?如果是這樣,爲什麼有這麼多條款?!索引,緩存和在git中上演有什麼區別?

另外,我知道有這個叫做git stash的東西,在這裏你可以臨時存儲你的工作副本的變化,而不必將它們提交給repo。我發現這個工具非常有用,但是再一次,這個名字與git中的其他一些概念非常相似 - >這很混亂!

+0

不要忘記「添加」,因爲Android Studio在其Git版本控制UI中使用。 – 2015-05-26 20:40:36

+0

@ScottBiggs什麼是「添加」? – allyourcode 2015-07-22 01:40:26

+0

我仍然是一個令人困惑的新手,與Git。在「提交」之前「添加」曾經做過的事情,我也將它與「Stash」混淆起來(爲湯添加另一個術語)。 – 2015-07-22 14:27:21

回答

28

索引/階段/緩存是同樣的事情 - 至於爲什麼這麼多的術語,我認爲這個索引是'原始'術語,但人們發現它很混亂,所以引入了其他術語。我同意,起初它有時讓事情有點混亂。

git的stash工具是一種存儲正在進行的工作的方法,您現在不想在提交對象中存儲該工作,該提交對象存儲在特定的存儲目錄/數據庫中)。基本的stash命令將存儲對工作目錄進行的未提交更改(緩存/暫存和未緩存/非暫存更改),然後將工作目錄恢復爲HEAD。

它並沒有真正與索引/ stage/cache相關,只是它將存儲緩存中未提交的更改。

這使您可以快速保存髒工作目錄和索引的狀態,以便您可以在乾淨的環境中執行不同的工作。稍後,您可以取回存儲對象中的信息並將其應用於您的工作目錄(即使工作目錄本身處於不同的狀態)。

官方git stash聯機幫助頁有非常好的細節,但仍然可以理解。它也有很好的例子,說明如何使用stash

+3

git暗藏不同於其他人:它更像是一個'匿名提交' – 2010-08-18 21:29:52

+0

@Peter - 我試圖更正確地解決隱藏問題(我最初錯誤地將它理解爲'舞臺')。 – 2010-08-18 21:43:42

+0

@邁克爾謝謝!有一點我希望你能澄清一下:第2段的結尾說明了存儲器在「緩存」中存儲的變化,但是做git存儲似乎還包括未分離的變化。這只是另一個術語混淆,或者你真的意味着git只存儲階段性變化? – allyourcode 2010-08-18 21:51:46

1

確實很令人困惑。這三個術語可以互換使用。這是我爲什麼稱這些事情的原因。 git的指標是:

  • 的二進制文件.git/index這是所有跟蹤的文件
  • 用作分期區域的指數的承諾
  • 包含緩存 SHA1哈希值的文件(加快性能)

一個重要的注意事項是索引/緩存/階段包含所有源文件列表e控制,甚至不變。不幸的是,諸如「將文件添加到索引」或「文件被分級到索引」之類的短語可能會誤導性地暗示該索引僅包含更改後的文件。

這裏有一個演示表明這些混帳指數包含的所有文件,不僅是修改過的文件的列表:

# setup 
git init 

echo 'x' > committed.txt 
git add committed.txt 
git commit -m 'initial' 

echo 'y' > staged.txt 
git add staged.txt 

echo 'z' > working.txt 

# list HEAD 
git ls-tree --name-only -r HEAD 
# committed.txt 

# list index 
git ls-files 
# committed.txt 
# staged.txt 

# raw content of .git/index 
strings .git/index 
# DIRC 
# committed.txt 
# staged.txt 
# TREE 

# list working dir 
ls -1 
# committed.txt 
# staged.txt 
# working.txt 

補充閱讀:

https://www.kernel.org/pub/software/scm/git/docs/technical/racy-git.txt

What does the git index contain EXACTLY?

+0

太棒了!我認爲你的意思是ls -l不是ls -1 – user5389726598465 2018-01-29 06:17:16

相關問題