2012-03-29 97 views
6

我和一個朋友正在單獨工作一個項目。起初,我推了一個名爲old-name的文件夾,然後他從中取出。在它的中間,我決定將old-name文件夾重命名爲new-name以更好地將其與其他項目區分開來(讓我們假設old-name太泛化,new-name更具體)。所以我告訴我的朋友把他的項目文件夾重命名爲new-name。然後我們分開工作。Git重命名問題

現在,他推送了他對遠程服務器(在new-name文件夾下)的做法,當我嘗試從服務器拉出時,發生所有這些衝突(重命名/添加),顯然每個文件都有一個額外副本現在new-name項目。

new-name/index.php (MINE) 
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe) 

我的問題是,我們如何解決這個沒有這個git衝突重命名問題?當然,我可以手動解決衝突,但只有太多的文件需要檢查和刪除,因爲git已將這個新的額外副本拉到了我的回購庫中。

感謝

回答

0

你應該一個新的工作拷貝下拉到一個新的本地文件夾,旁邊的代碼,你的工作就先。然後使用Diff style tool比較並將您的工作合併到新的本地副本中。然後在新的pull down和bam上提交更改,您的更改已經完成。我知道這並不能保存你所做的所有更改日誌,但如果手動執行它不是一個選項,這是下一個最好的選擇。

1

只需添加所有文件即可。任何簡單重命名的內容都將被識別爲沒有區別並從索引中刪除。因此,即使'git status'顯示了負載和負載問題,但在'git add -A'之後,仍然會有很少的剩餘部分(剩下的部分將會有真正的差異)。你應該立即簽出一個新的分支(在'git add -A'之前),這樣你可以很容易地追溯到南方。

1

只是一個猜測,但它聽起來像Git的重命名檢測合併時沒有檢測到重命名。這個目錄中有很多文件嗎?所有的文件是否被大量修改?

嘗試在增加merge.renameLimitdiff.renameLimit配置設置的值後重新進行合併/拉取。從git help config

diff.renameLimit 
    The number of files to consider when performing the copy/rename 
    detection; equivalent to the git diff option -l. 

merge.renameLimit 
    The number of files to consider when performing rename detection 
    during a merge; if not specified, defaults to the value of 
    diff.renameLimit. 

您也可以嘗試-Xrename-threshold=70降低重命名相似性檢測閾值。從git help merge(也git help pull):

rename-threshold=<n> 
    Controls the similarity threshold used for rename detection. 
    See also git-diff(1) -M. 

git help diff

-M[<n>], --find-renames[=<n>] 
    Detect renames. If n is specified, it is a threshold on the 
    similarity index (i.e. amount of addition/deletions compared to the 
    file’s size). For example, -M90% means git should consider a 
    delete/add pair to be a rename if more than 90% of the file hasn’t 
    changed. 

請注意,我不知道當行尾Unix的風格和Windows之間的風格轉換會發生什麼。即使唯一的區別是行結尾,Git可能會認爲這些文件是100%不同的,因此請確保您使用的是相同的行結尾。

+0

你可以告訴git忽略空白變化,解決了行結束問題。另見http://stackoverflow.com/questions/861995/is-it-possible-for-git-merge-to-ignore-line-ending-differences – 2012-03-29 17:29:49