为什么 git diff-tree 显示总是显示重命名为添加和删除

Why does git diff-tree show always show rename as add and delete

在两次测试提交中,其中第一个只有操作git mv file moved_file,第二个只有mv moved_file moved_again_file && git add -A moved_file moved_again_file,两者都在提交前的git status中显示为重命名,但在git commit --verbose 它们显示为新文件和已删除文件。

我希望 git diff-tree HEAD 在每次提交后显示一个 R(重命名)状态,但我一直得到两个:一个 A 和一个 D

我正在尝试编写一个脚本来根据文件状态执行操作,但如果 R(或 C)状态始终显示为 [,我无法正确规划它们=29=].

Git 是版本 1.8.3.1,如果有差异的话。

git diff-tree 命令是 plumbing 命令,而不是 porcelain 命令,因此它具有可预测的行为。

其中之一是重命名检测关闭,除非明确打开。将此与例如 git diff 进行对比,这是一个 porcelain 命令,因此根据您对 diff.renames.

的个人配置设置重命名检测

要启用重命名检测,请添加 -M--find-renames(及其可选阈值)。使用 -C--find-copies(及其可选阈值)查找副本;如果需要,请添加 --find-copies-harder