Git如何知道该文件已重命名?

时间:2015-04-23 11:59:32

标签: git

Git使用什么算法来确定某些文件是否已重命名?

这就是git status之前几分钟产生的内容:

enter image description here

标有黄色框的信息不正确。实际上没有这种重命名。文件views/file/create.phpviews/file/index.php在一组全新的两个文件创建后半小时内被真正删除 - views/logo/create.phpviews/logo/index.php已创建。

两个文件集看起来(对Git)非常相似,但事实仍然是 - 这些不一样,重命名的文件。这是一组完整的新文件,在删除第一组文件之前约半小时在不同目录中创建。

由于Git提供的信息不正确,我想满足我的好奇心,这就是我要问的原因。

1 个答案:

答案 0 :(得分:9)

来自Wikipedia

  

重命名是隐式处理而不是显式处理。普通的   对CVS的抱怨是它使用文件名来识别它   修订历史记录,因此如果没有,则无法移动或重命名文件   要么打断历史,要么重命名历史   使历史不准确。大多数CVS后修订控制系统   通过为文件提供一个唯一的长期名称(一种inode来解决这个问题)   数字)幸存重命名。 Git没有记录这样的   标识符,这是一个优势。[34] [35]源代码   文件有时被拆分或合并以及简单地重命名,[36]和   将此记录为简单重命名会冻结不准确   描述(不可变)历史中发生的事情。 Git地址   通过在浏览快照历史记录时检测重命名来解决问题   而不是在制作快照时记录它。[37] (简单地说,给出   修订版N中的文件,修订版N-1中的同名文件是其文件   默认祖先。但是,当没有同名文件时   修订版N-1,Git搜索仅存在于修订版中的文件   N-1和新文件非常相似。)但是,确实需要   每次审查历史记录时都会有更多CPU密集型工作,以及一些数字   调整启发式的选项。这种机制并不总是如此   工作;有时是在同一次提交中使用更改重命名的文件   读取为旧文件的删除和新文件的创建。   开发人员可以通过提交重命名来解决此限制   并单独更改。