相关疑难解决方法(0)

git如何检测类似文件的重命名检测?

维基百科解释了自动重命名检测:

简而言之,给定修订版N中的文件,修订版N-1中的同名文件是其默认祖先.但是,当修订版N-1中没有同名文件时,Git会搜索仅存在于修订版N-1中的文件,并且新文件非常相似.

重命名检测显然归结为类似的文件检测.这个算法记录在哪里吗?很高兴知道自动检测到哪种变换.

git

85
推荐指数
2
解决办法
2万
查看次数

什么是git的启发式,用于为文件路径分配内容修改?

精简版:

如果没有仔细研究git源代码,我在哪里可以找到git用于将内容块与特定跟踪路径名相关联的启发式的完整描述?


详细版本:

在下面的(Unix)shell演示交互中,两个文件ab" git-commit已经"被修改,以便(有效地)将大部分a内容传输到b最后,最后两个文件再次被提交.

要寻找的关键是第二个的输出git commit以线结束

rename a => b (99%)
Run Code Online (Sandbox Code Playgroud)

即使没有重命名文件(通常意义上)(!?!).


在演示演示之前,这个简短的描述可能会让您更容易理解.

该文件的内容ab通过组合这三个辅助文件,内容产生../A,../B../C.象征性地,状态ab可以表示为

../A + ../C -> a
../B        -> b
Run Code Online (Sandbox Code Playgroud)

就在第一次提交之前,和

../A        -> a
../B + ../C -> b
Run Code Online (Sandbox Code Playgroud)

就在第二个之前.

好的,这是演示.


首先,我们展示的辅助文件的内容../A,../B以及../C:

head ../A ../B ../C
# ==> ../A <==
# ... …
Run Code Online (Sandbox Code Playgroud)

git

10
推荐指数
2
解决办法
1303
查看次数

两个目录中相同文件的 Git Diff 总是会导致“重命名”

git diff --no-index --no-prefix --summary -U4000 目录1 目录2

这按预期工作,因为它返回两个目录之间所有文件的差异。添加的文件按预期输出,删除的文件也会产生预期的 diff 输出。

但是,由于 diff 将文件路径考虑为文件名的一部分,因此两个不同目录中具有相同名称的文件会导致 diff 输出带有重命名标志,而不是更改。

  1. 有没有办法告诉 git 不考虑 diff 中的完整文件路径,而只查看文件名,就好像文件来自同一目录一样?

  2. 有没有办法让 git 真正知道不同目录中同一文件的副本是否确实被重命名?我不明白如何,除非它有一种以某种方式比较文件 md5 的方法(可能是一个错误的猜测,哈哈)。

  3. 使用分支而不是目录可以轻松解决此问题吗?如果可以,上面列出的命令的分支版本是什么?

git version-control diff git-branch

2
推荐指数
1
解决办法
2318
查看次数

标签 统计

git ×3

diff ×1

git-branch ×1

version-control ×1