为什么 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
。
在两次测试提交中,其中第一个只有操作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
。