我正在对我的存储库进行目录级别的重新组织。由此产生的提交显示了许多文件级别的重命名,这使得概念上我所做的只是一两个
有没有一种方法可以使
(我知道git的存储库模型不跟踪任何关于目录的信息,只跟踪文件。然而,文件重命名也是如此,但它能够在事后推导出有关文件级别重命名的信息。)
下面是一个简单的示例:
此时,我希望看到像这样的东西:
相反,我似乎只能制作出这样的东西:
git mv dir1/ dir2/
命令无法清楚地体现。有没有一种方法可以使
git log
总结这种操作,以显示整个目录的移动?我认为 --dirstat
或者 --summarize
可以让我接近完成,但它们似乎并不能做到我想要的。(我知道git的存储库模型不跟踪任何关于目录的信息,只跟踪文件。然而,文件重命名也是如此,但它能够在事后推导出有关文件级别重命名的信息。)
下面是一个简单的示例:
#setup
git init
mkdir dir1
for f in foo bar baz; do echo $f > dir1/$f; done
git add dir1
git commit -m 'dir1'
#do the directory move
git mv dir1 dir2
git commit -m 'rename dir1 to dir2'
此时,我希望看到像这样的东西:
$ git log -1 --what-options-go-here?
b0ba9c9 rename dir1 to dir2
0 0 {dir1 => dir2}/
相反,我似乎只能制作出这样的东西:
$ git log -1 --numstat --oneline
b0ba9c9 rename dir1 to dir2
0 0 {dir1 => dir2}/bar
0 0 {dir1 => dir2}/baz
0 0 {dir1 => dir2}/foo
log
命令的变体考虑在内,包括这个目录移动检测。 - Matt McHenrygit diff
输出被输入到各种补丁应用程序中(包括git apply
和git am
)。如果差异输出说“重命名此文件”,并且您重命名了目录中的所有文件,则它会“正常工作”(除了留下一个空目录)-但是如果您得到一个“重命名此目录”的命令,并且您重命名了包含未跟踪/忽略文件的目录,则这可能是错误的行为。我认为这里没有实际的对错答案,只有一个永恒的争论来源。 :-) - torek