2012-03-29 109 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