【发布时间】:2014-11-06 07:46:03
【问题描述】:
使用 git 重命名通常没有问题,但我遇到了一个非常困难的问题,我正在努力解决。
由于各种原因,我有一个文件dir1/file。由于一些很久以前的决定,它在完全错误的地方,需要转移到dir2/file。
但是有很多代码需要更改,并且由于各种原因,我们不得不将文件在新位置和旧位置保留一段时间。
因此,自然(ish)的方法是这样做:
git mv dir1/file dir2/file
git commit -a
到目前为止一切顺利:
> git diff master --name-status --find-renames
R100 dir1/file dir2/file
那么我们就这样做
ln -s ../dir2/file dir1/file
git commit -a
但是会发生这种情况
> git diff master --name-status --find-renames
A dir2/file
T dir1/file
如果有人在 master 上更改 dir1/file 并且我尝试将其拉出,我会被告知与 dir1/file1 存在合并冲突,并且 dir2/file1 保持不变。我从阅读 git 跟踪内容的其他帖子中想到,但它似乎在跟踪文件名和内容。并且完全忽略了内容已经移动的事实。
那么到底如何让 git 识别出我实际上重命名了一个文件,然后添加了一个恰好与旧文件同名的新文件?
注意:我不想将其作为多次推送来执行。有几个像这样的文件受到影响,并且有人同时对其中一个文件进行更改的可能性非常高,并且不能保证他们能够进行拉取以获取重命名,然后拉取以获取软链接.
加法示例。我正在从 python 模块 __init__.py 中删除一个函数,它不应该存在,__init__.py 应该是空的。这也没有被发现为重命名。即使新文件的内容与原始 __init__.py 的内容有 99% 的相同,新的 __init__.py 的内容与旧的内容也有 0% 的相同。在我添加同名文件之前一切都很好。
【问题讨论】: