2009-10-20 42 views
3

我們工作在混合大小寫敏感/不敏感的環境(cywgin/linux),今天有人通過重命名文件,將S更改爲s,在我們的工作流程中造成了一次小破壞。這導致各分支機構出現各種有趣的合併問題,而且相當誠實,沒有人完全確定發生了什麼。如何更改cygwin下git中的文件大小寫?

在git中爲cygwin更改文件框的最合適的方法是什麼?我必須強調,我們大小寫敏感的,通常這樣做的權利 - 如果它不是爲S.

+1

我從來沒有在cygwin下使用git - git mv沒有正確檢查重命名嗎? – Cascabel 2009-10-20 19:07:26

回答

2

已經想了幾分鐘,它似乎很可能會git-mv你需要什麼。我確信它會嘗試重命名(這可能是不區分大小寫的操作系統上的禁用操作),然後將重命名添加到索引。這應該基於參數,而不是實際的文件 - 我在內建mv.c中看到rename_cache_entry_at(pos, dst);

我不知道這是否是你問或不是的一部分,但相對於你的分支混亂,這裏就是你可能要採取的一般方法:

  • 提交重命名修復到所有「最下行」的分支。這些可能是主題和維護分支 - 合併到其他分支的分支,但從未將分支合併到它們中
  • 按照正常的工作流合併這些分支,修復可能由重命名引起的任何衝突。
  • 鼓勵大家儘快拉動,以防萬一問題有辦法進一步傳播。例如,某人可以在重命名的文件上工作,然後拉,並以錯誤的方式修復重命名衝突,從而導致在推/拉時重新創建問題的狀態。
+4

對於其他誰發現這一點,您將需要使用「git mv -f」來強制重命名,因爲Cygwin會抱怨源和目標是相同的。 – 2010-06-07 15:31:52

1

我想指出,作爲一個後備你可以操縱在索引條目(臨時區域),從你就可以用「git的承諾」承諾在哪裏(而不是「git的承諾-a 「)與git update-index管道(低級別)命令。

3

我剛剛遇到類似這樣的問題,我只是想將目錄'腳本'重命名爲'腳本'。我目前在Cygwin工作,所以它不是那麼容易。如果我嘗試像在GNU/Linux中那樣做,我會得到一個錯誤。

$ git mv foo Foo 
fatal: renaming foo failed: Invalid argument 

不過,我意識到我可以繞過我以爲是什麼Windows的缺點,通過移動了兩次,第一次是不衝突的名稱,然後到實際所需的名稱。

$ git mv foo Foo2 && git mv Foo2 Foo 

我藏了我的工作樹離開了這個變化,雖然這樣我就可以單獨的提交,並通過明顯,因爲現在我搬到無法從藏匿合併目錄下的文件沒有想到事情我樹。 : - /在我的情況下,這是一個小問題,雖然(爲了安全起見,我在嘗試這個之前先對樹進行了標記,但我總是可以用強有力的非版本化的方式來做它:P)。