【问题标题】:Git thinking added/removed files are renamed [duplicate]Git思考添加/删除的文件被重命名[重复]
【发布时间】:2015-12-22 01:49:30
【问题描述】:

我以前从未遇到过这种情况,因为根据我的经验,Git 一直认为重命名的文件是添加/删除的,但是我们在 repo 中生成了基于 repo 中另一个文件的修改的文件(它最初是由其他人以这种方式设计,我们决定在重组后的 repo 中使用它),并且它认为这些文件的每次新迭代都被“重命名”(97% 相似性),即使旧文件被完全删除并创建新文件(部分基于校验和的文件名)。

我们正在使用 BitBucket 合并拉取请求,现在尝试合并分支变得很痛苦,因为它认为在添加或删除文件时在合并的两侧都有文件重命名。

有什么解决办法吗?

【问题讨论】:

    标签: git bitbucket


    【解决方案1】:

    Git 实际上不识别文件重命名,它也不关心它。 Git 所做的是跟踪完整存储库的内容。如果您修改文件、添加文件或删除文件,Git 只会拍摄存储库的另一个独立快照并为其创建提交。

    一些瓷器工具,即最终用户通常使用的命令,确实具有识别文件重命名的概念。或者至少,他们试图检测它。由于 Git 没有重命名的概念,所以它们可以很好地猜测。为此,他们对内容进行比较。如果之前的文件内容与之后的文件内容有一定比例的相似性,则将其视为重命名或副本(如果原始文件仍然存在,则视为副本)。

    但这实际上只是一种视觉辅助工具,可帮助您确认您的操作,以防您真正执行了合并。毕竟,如果您重命名整个文件夹,您实际上是删除了该原始文件夹中的所有文件,并添加了新文件夹中的所有文件。至少这就是 Git 看到的以及它跟踪的内容。但是对于查看更改的用户来说,看到所有文件都保持不变并且只是移动到新路径会更有帮助。

    底线是你不需要关心这个。它只是 Git 前端工具给你的一个指标。它对 Git 的实际操作没有任何影响,无论某些东西被认为是重命名还是文件被删除并在其他地方读取都没有区别。

    【讨论】:

      【解决方案2】:

      如何合并重命名或相似的文件?

      您也可以尝试-Xrename-threshold=X来降低重命名相似度检测阈值。

      git merge ... -Xrename-threshold=<20> 
      // Where 20 is the % of similarity in files
      

      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.
      

      来自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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-08
        • 2011-03-07
        • 2015-07-16
        • 2022-10-04
        • 2020-02-02
        • 1970-01-01
        相关资源
        最近更新 更多