2011-05-05 55 views
3

我正在尋找使用Git進行本地開發人員VCS支持(這是針對多學科開發的)。如何使用(子)目錄在Git中重命名?

先前的做法是每個試用版本都會重命名頂級目錄(並保留一個zip副本)。這對於1-2人的球隊來說是相當有效的。版本之間使用超越比較。

然而,快速嘗試將Git應用於該方法表明它'認爲'文件被刪除並且創建了新文件,而不是簡單地在新路徑上。

因此,我們有

\GIT-Dir 
    \.git 
    \Master-with-updating-version-name1 
    \ProjectName 
     \Source 
     files.etc 

成爲

\GIT-Dir 
    \.git 
    \Master-with-updating-version-name2 
    \ProjectName 
     \Source 
     files.etc 

然後

\GIT-Dir 
    \.git 
    \Master-with-updating-version-name3 
    \ProjectName 
     \Source 
     files.etc 

考慮到我需要在過渡期間永葆老方法,有哪些選項?
a /如何讓Git認識到它只是一個路徑更新?
b /如何確保低層文件正確跟蹤& diff'ed?

我在Windows下使用,GitGui 0.13,和git 1.7.4.msysgit.0,並有GitExtensions 2.21安裝

回答

2

在命令行,你會重命名文件或目錄與git mv。你的GUI應該有一個選項。

+0

gui's似乎沒有命令(或菜單項)。我已經通過git bash窗口嘗試過了,我仍然得到Git說的(在Git Gui重新掃描之後),對於這個分支,舊目錄中的文件被刪除並且在新目錄中創建新文件,而是(a)已被重新命名(重新分配),然後(b)顯示已更改文件的差異。 – 2011-05-05 15:36:07

+0

@Philip:那麼你的GUI缺乏。但是,這並不重要,因爲Git不會因存儲哈希而在存儲庫中存儲兩個相同的文件。 – 2011-05-05 20:54:38

+0

它也發生在git bash中(請參閱我的評論以回覆James Gregory)。你是對的,它只存儲一次共同的內容,但接着報告一切都改變了:-( – 2011-05-05 21:41:36

3

Git不會跟蹤重命名,它追溯地將它們確定爲logshow命令的一部分。您不必使用git命令明確重命名/移動文件或目錄。

重命名由差異閾值決定,如果有文件的添加和刪除並且內容非常相似,那麼git會認爲它是重命名/移動。

如果您在git之外重命名您的目錄,然後執行git status,您會看到它將其作爲刪除對象。現在將它們添加到您的索引(git add -A將做到這一點),您現在應該看到它將它們視爲重命名。

+0

它不適合我的玩具測試,我將不得不嘗試使用較大的文件 - 什麼是最好的最小值大小? – 2011-05-05 17:39:01

+0

我得到不同的結果(這是兩個顯示暗示不同的東西)。'git add -A'後面跟着'git status'說我們有一個重命名,但是Git Gui仍然顯示這個情況是刪除和創建一個新文件(這只是在提交之前) – 2011-05-05 19:47:33

+0

just嘗試了'git whatchanged -r'(在git bash中),它顯示文件的添加和刪除,但同時顯示內容blob sha1的狀態保持不變(除非我故意改變以查看diff是否會捕獲它) – 2011-05-05 21:25:27