在GitWeb中显示重命名的文件

时间:2014-05-29 11:41:56

标签: git gitweb

我用git mv重命名了一些文件。通常git status会检测到这一点并显示这些文件已重命名。但是在GitWeb中,这些文件显示为已删除并使用新名称创建。有没有办法告诉GitWeb尝试检测重命名的文件?也许,其他一些基于网络的Git查看器可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

Git doesn't track renames。它实际上以完全相同的方式处理以下两个操作:

  1. 在Git中重命名文件:
    • git mv foo bar
  2. 删除文件,然后添加具有相同内容的新文件:
    • cp foo bar
    • git rm foo
    • git add bar
  3. 有些工具会显示“foo重命名为bar”的内容,但这只是基于类似内容的猜测。其他工具会显示“已删除foo并添加bar”。对Git来说,他们是一回事。

    gitweb.conf manpage列出了一个配置指令,可用于更改检测重命名的方式:

      

    @diff_opts

         

    重命名git-diff和git-diff-tree的检测选项。默认值为('-M');将其设置为('-C')或('-C',' - C')以检测副本,或将其设置为(),如果您不想进行重命名检测,则将其设置为空列表。

         

    请注意,重命名,尤其是复制检测可能会占用大量CPU资源。另请注意,非git工具可能会出现上述选项生成的补丁问题,尤其是涉及文件副本('-C')或纵横交错重命名('-B')时。

    看起来('-M')的默认值是您想要的(from the git-diff manpage):

      

    -M[<n>]
      --find-renames[=<n>]

         

    检测重命名。如果指定n,则它是相似性指数的阈值(即与文件大小相比的添加/删除量)。例如,-M90%表示如果超过90%的文件未更改,git应将删除/添加对视为重命名。如果没有%符号,则该数字将作为分数读取,并在其前面加上小数点。即,-M5变为0.5,因此与-M50%相同。同样,-M05-M5%相同。要将检测限制为精确重命名,请使用-M100%

    您所比较的文件也可能有足够的内容,以至于它们未被检测为重命名?