2012-05-04 37 views
1

我使用git-new-workdir爲一個git存儲庫提供兩個工作樹。這通常工作得很好,但是如果在兩個工作樹中籤出相同的分支,我會感到有趣的行爲:git-new-workdir:在工作樹中提交A導致樹中的假冒變化B

  • 我開始在工作樹清理和「主」。
  • 我承諾的東西在工作樹A.

結果:

  • 「混帳地位」,在工作樹A顯示了在工作 「乾淨」(如預期)
  • 「混帳地位」樹B突然顯示「要提交的更改」

顯示的更改與我在A中所做的提交相反。對於 示例,如果co m中的A添加了一行,B中的「要提交的更改」 表明該行已被刪除。

這裏發生了什麼?這是git-new-workdir的一個已知限制嗎? 有沒有辦法避免這個問題?或者,我應該避免檢查 而同一分支在兩個副本簽出?

我也有興趣瞭解這裏發生了什麼 內部(我對git的內部知識知之甚少)。

注:

我發現這個問題很容易通過只是運行B中 git reset--hard,把B先於A.提交未提交的更改,如果我解決

然而雖然在B中有未提交的更改,但實際未提交的更改與來自 提交的虛假更改混在一起,似乎沒有簡單的方法來解決它們。因此 的問題。

回答

4

我認爲這是預期的行爲。從http://nuclearsquid.com/writings/git-new-workdir/

創建你的工作目錄中的一個新的承諾或分公司, 他們立即適用於所有工作目錄。

當您在A中提交更改時,該提交也可用於B.由於您剛添加到A中的行不在B中,因此自最近一次提交以來似乎已做出更改。

我認爲多個工作目錄的目的是同時檢出不同的分支。

+1

我不知道這是「預期行爲」 - 對我來說,它看起來更像是一個不良的副作用。但是你的回答解釋了爲什麼會發生。 – sleske

2

截至2015年,這個問題已經過時。

git-new-workdir已被替換爲git worktree(2015年7月在Git V2.5中引入)。git worktree解決了斷然拒​​絕兩個worktrees簽出同一分支在此提到的問題:

$ git checkout myBranch 
fatal: 'myBranch' is already checked out at '/tmp/otherworktree'