2012-04-04 101 views
0

我正在开发一款构建于开源项目之上但包含一些专有更改的软件。最近,开源项目已经有了一个大的更新,它已经移动了一堆文件。例如:强制git在合并时识别文件已移动

应用程序/模型/ my_model.rb - >应用程序/型号/名称空间/ my_namespaced_model.rb

有很多文件,这被感动了,他们中的一些有一个很大的变化。所以git并没有合并文件,而只是说旧文件已被“删除”并将其标记为合并冲突。问题是,如果只有少许变化,git就可以意识到文件已被移动,而不是认为它已被删除,并且创建了新文件,我认为它可以轻松地整理大部分更改。就目前而言,它看起来像我需要通过手工完成对新文件的所有旧的更改。

所以我的问题是,有没有办法强制git意识到文件已被移动,当它不能自动计算出来?

回答

1

git merge默认使用的递归策略有一个“重命名阈值”选项,您可以更改以提供帮助。您可能需要尝试找到最佳设置。

git merge -X rename-threshold=70 mybranch 

设置具有相同的效果和git diff -Mgit diff手册页中描述。

+0

我得到这个:“致命:未知的合并递归选项:-Xrename-threshold = 70”。我也一直在尝试使用诸如“ignore-space-change”之类的选项,因为有些文件有缩进更改,但获得相同的错误。我在Ubuntu 10.10上使用git 1.7.1。我需要更新的版本吗? – alexsanford1 2012-04-04 18:47:52

+0

错字,它是'-X ...'(有空格)。 – torek 2012-04-04 18:55:47

+0

@torek:已更新。将来,请随时自行解决错别字。 – 2012-04-04 19:05:16