我用git mv
重命名了一些文件。通常git status
会检测到这一点并显示这些文件已重命名。但是在GitWeb中,这些文件显示为已删除并使用新名称创建。有没有办法告诉GitWeb尝试检测重命名的文件?也许,其他一些基于网络的Git查看器可以做到这一点吗?
答案 0 :(得分:1)
Git doesn't track renames。它实际上以完全相同的方式处理以下两个操作:
git mv foo bar
cp foo bar
git rm foo
git add bar
有些工具会显示“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%
。
您所比较的文件也可能有足够的内容,以至于它们未被检测为重命名?