Git重命名问题

时间:2012-03-29 04:11:27

标签: git

我和一位朋友分别在一个项目上工作。起初,我推了一个名为old-name的文件夹,然后他从中取出。在其中间,我决定将old-name文件夹重命名为new-name,以便更好地将其与其他项目区分开来(我们只是说old-name过于通用而且new-name更多具体)。所以我告诉我的朋友将他的项目文件夹重命名为new-name。然后我们分开工作。

现在,他将他所做的工作推到了远程服务器上(在new-name文件夹下),当我尝试从服务器拉出时,所有这些冲突(重命名/添加)都会发生,显然每个都有一个额外的副本现在new-name项目中的单个文件。

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

我的问题是,如果没有这个git冲突重命名问题,我们如何才能解决这个问题?当然我可以手动解决冲突,但是由于git已经将这个新的额外副本提取到我的仓库,因此检查和删除的文件太多了。

由于

3 个答案:

答案 0 :(得分:1)

只需添加所有文件即可。任何简单重命名都将被识别为没有差异并从索引中删除。因此,即使'git status'显示负载和大量问题,在'git add -A'之后仍然会有很少的剩余(并且所有剩余的将具有真正的差异)。您应该立即检查一个新的分支(在'git add -A'之前),以便您可以轻松地回溯它是否向南。

答案 1 :(得分: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%不同的,即使唯一的区别是行结尾,所以请确保你们都使用相同的行结尾。

答案 2 :(得分:0)

您应该将新的工作副本下拉到新的本地文件夹,紧挨着您首先使用的代码。然后使用Diff style tool比较并将您的工作合并到新的本地副本中。然后在新的pull down和bam上提交更改,您已提交更改。我知道这并没有保存你所做的所有更改日志,但如果手动执行它不是一个选项,那么这是下一个最好的事情。