如何使用git真正显示重命名文件的日志?
我对git比较陌生。我以前用过颠覆 我注意到,如果文件被重命名,大多数图形化git前端和IDE插件似乎无法显示文件的历史记录。当我使用如何使用git真正显示重命名文件的日志?,git,Git,我对git比较陌生。我以前用过颠覆 我注意到,如果文件被重命名,大多数图形化git前端和IDE插件似乎无法显示文件的历史记录。当我使用 git log --follow 在命令行中,我可以看到整个重命名日志 ()--follow开关是一个“SVN noob”取悦器;严重的Git用户不使用它: --follow是一个完全的黑客程序,旨在满足从未使用过SVN的前用户 你知道什么吗 亲子关系还是漂亮的修订图 无论如何 这不完全是基本的,但是 “遵循”的当前实施情况 这确实是一个快速的预处理过程 用螺
git log --follow
在命令行中,我可以看到整个重命名日志
()--follow
开关是一个“SVN noob”取悦器;严重的Git用户不使用它:
--follow是一个完全的黑客程序,旨在满足从未使用过SVN的前用户
你知道什么吗
亲子关系还是漂亮的修订图
无论如何
这不完全是基本的,但是
“遵循”的当前实施情况
这确实是一个快速的预处理过程
用螺栓固定在地板上
逻辑,而不是什么
真的很完整
它被设计成一个“SVN”
“noob”讨人喜欢,而不是“真正的git”
“功能性”的东西。想法是
让你远离(破碎的)世界
重新命名的思维方式
事关全局
我的问题:当文件被重命名时,你们当中的核心git用户是如何获得该文件的历史记录的?“真正”的实现方式是什么?我认为Linus point背后的主要驱动力是——有一点可以肯定——git的铁杆用户从来都不关心“文件”的历史。您将内容放在git存储库中,因为内容作为一个整体具有有意义的历史 文件重命名是“内容”在路径之间移动的一个小特例。您可能有一个函数,可以在git用户可能使用“pickaxe”功能性地跟踪的文件之间移动(例如,
log-S
)
其他“路径”更改包括合并和拆分文件;Git并不关心你认为重命名的文件和你认为复制(或重命名和删除)的文件,它只是跟踪你的树的完整内容。< /P>
git鼓励“全树”思维,其中有尽可能多的版本控制系统是以文件为中心的。这就是为什么git更多地引用“路径”而不是“文件名”的原因。我遇到了与您完全相同的问题。尽管我不能给你答案,但我相信你可以阅读莱纳斯在2005年写的文章,它非常中肯,可能会给你一个关于如何处理这个问题的提示: …我认为任何试图跟踪重命名的SCM基本上都是 除非出于内部原因(即允许有效的 Delta),因为重命名并不重要。他们帮不了你,而且 不管怎么说,它们都不是你感兴趣的东西 重要的是找到“这是从哪里来的”和git 建筑确实做得很好——比其他任何东西都好 在外面 我发现它被引用,这对您找到可行的解决方案也很有用: 在这封信中,Linus概述了一个理想的内容跟踪系统如何让您发现一段代码是如何进入当前状态的。您可以从文件中的当前代码块开始,在历史记录中查找更改文件的提交。然后检查提交的更改,以查看您感兴趣的代码块是否被它修改,因为更改文件的提交可能不会触及您感兴趣的代码块,而只触及文件的某些其他部分 当您发现在提交之前,文件中不存在代码块时,您可以更深入地检查提交。您可能会发现这是许多可能情况之一,包括:
- 查看文件日志时,SourceTree在左下角有一个复选框“跟随重命名的文件”
- 在左下角的日志窗口中有一个“跟随重命名”复选框
git日志的“bug”性质——请遵循:
参见作者(2016年3月30日)
(于2016年4月13日被合并)
diffcore:修复重命名检测期间相同文件的迭代顺序
如果两个路径“dir/A/file
”和“dir/B/file
”的内容相同
并且父目录被重命名,例如.g
renamed: dir/B/file -> other-dir/A/file
renamed: dir/A/file -> other-dir/B/file