2015-05-13 48 views
4

以我迄今閱讀GIT的經驗,我發現工作目錄似乎是一個超載的術語。有時,人們指分支簽出的硬盤驅動器上的目錄例如,當克隆repo時,分支檢入到repo新克隆的目錄中。什麼是GIT存儲庫的工作目錄?

但有時人們只是意思是指包含未跟蹤文件修改的文件即當你進入git status

我希望有人可以給我的官方定義的概念中的紅色文字的抽象位置工作目錄。即使是在線的Pro Git書,看起來似乎有點模糊,至於它是什麼。

注:我每天都用它,我只是想知道它是什麼。

乾杯

+0

你究竟在哪裏看到兩者的區別?您所使用的硬盤驅動器上的目錄是包含您的修改的目錄。但我認爲這個詞是「工作副本」。 – Thilo

+0

@Thilo啊,是的,我也讀過這個詞。所以,不同的概念和不同的術語都會超載。 2的區別在於第二個概念不包括正在跟蹤的未修改的文件。只有修改的文件。 – onefootswill

回答

4

git commit-tree,樹代表工作目錄的特定目錄狀態。

因此,儘管工作目錄代表其中回購簽出,一個工作樹代表其狀態
A git status顯示「工作樹」,意思是工作目錄的狀態。

工作目錄引用「在哪裏」,一個工作樹引用了「是什麼」(它包含什麼,跟蹤或不是它的文件跟蹤)

注意了Git 2.5(Q2 2015)將允許multiple working trees對於給定的本地回購。
這意味着你會使用多個工作目錄(與git worktree add <path> [<branch>]),每個工作目錄可以包含不同的工作樹:您可以檢出每條路徑的不同分支,例如,這意味着每個目錄包含相同的不同狀態回購:多種工作樹。

+0

我想我會將此標記爲答案,因爲它確實達到了標準並回答了問題。在該說明中,工作樹是工作副本的同義詞嗎? – onefootswill

+1

@onefootswill我想,但我總是使用工作樹,因爲你可以添加到git命令中的'--work-tree'選項。 – VonC

+0

很酷。只是試圖對這些條款進行分類。我想我也會使用工作樹。 – onefootswill

1

的目錄中的目錄.git被放置在和所有(不排除)根據該目錄。

+0

這與我以粗體顯示的第一個概念相關(不包括工作目錄)。那麼,它肯定與未跟蹤和修改過的文件截然不同? – onefootswill

+0

這不一定是真實的,因爲.git目錄的位置可以使用GIT_DIR環境變量或'--git-dir'命令行選項進行更改。 –

3

也許這有助於。

有基本上是與一個Git倉庫工作時,你有你的本地計算機上的三件事情:

1)庫本身。包含項目的整個更改歷史記錄。提交,樹木,斑點。這存儲在.git目錄內。

2)您的工作副本。它是在您從存儲庫「簽出」代碼(通常是分支)時創建的。它開始將您從存儲庫中檢出的所有文件都發送出去,但您可以對其進行處理。這些文件存儲在.git目錄之外的常規文件中。

3)稱爲「索引」的暫存區域。當您提交到存儲庫時,首先將您的更改「添加」到索引中。這基本上是想要提交的文件的快照。然後你可以原子地提交所有這些更改。或者查看它們。或者添加更多。索引也存儲在.git目錄內。


未追蹤的文件:這些只是您在工作副本中不屬於存儲庫一部分的文件。

修改後的文件:這些文件在您的工作副本中具有不同的內容,然後在存儲庫中執行。他們可能已經「上演」(即添加到指數)或不。

當您運行類似git statusgit diff的東西時,工具會查看工作副本中文件的內容並將它們與存儲庫(和索引)進行比較。文件狀態不是在任何地方「存儲」的,它是即時計算的。

+0

我已經在1和3之上了。 2對我有意義。這是所有檢出的文件。我認爲它包含未修改的文件,儘管人們說它只是未修改和修改過的文件。一個令人困惑的領域,只是因爲人們不使用他們的語言的正確性。或者可能不瞭解細節本身。 – onefootswill

+0

另請注意,當您執行git狀態時,它指的是工作目錄,而不是工作副本。有趣。 – onefootswill

+0

它指的是「工作目錄」?我的「git幫助狀態」表示「工作樹」,這不會讓事情變得更好...... – Thilo

相關問題