移动后对文件进行了重大修改时,Git不会检测到重命名

整个

考虑这个测试脚本。

#!/bin/sh -x
rm -rf test
git init test
cd test
for I in {1..100}; do
    echo $I >> x
done
git add x
git commit -am "initial commit"
git checkout -b branch
git mv x y
git commit -am "renamed"
rm y
for I in {1..60}; do
    echo branch$I >> y
done
for I in {61..100}; do
    echo $I >> y
done
git commit -am "changed the first 60 lines in branch"
git checkout master
rm x
for I in {1..60}; do
    echo master$I >> x
done
for I in {61..100}; do
    echo $I >> x
done
git commit -am "changed the first 60 lines in master"
git merge -s recursive -X patience branch
git status

我想让git检测在分支x被重命名为y的名称,并为我提供解决合并冲突的机会。

相反,发生的事情是git忽略(无法检测到)重命名,并说xy创建新的不相关文件时已在分支中将其删除如何说服git将其作为重命名文件处理?

谢谢!

星期二

您是正确的:git进行了重命名检测,而不是重命名跟踪,并且如果文件已更改为“太多”(对于“ too too”的某个值),则git声明此文件为其他文件,而不是重命名文件。

没有完美的解决方案。如果您的git足够新(1.7.4或更高版本),通常最好的选择是将-X rename-threshold=<n>标志传递git merge降低阈值会使git检测更多的重命名(并且您可以git diff -M用来测试适当的阈值)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Git不会检测到较大的重命名操作

ZFS快照对文件修改,移动和重命名的行为处理

重命名后选择性地进行文件修改

Linux - 查找每個目錄中每組文件的最大修改日期

在文件被移动或重命名后要保留对文件的引用的策略?

重命名文件后尝试在Java中设置文件的最后修改时间

关于当前脏状态对最后一次提交进行了超过'n'个修改的文件的Git列表

Git无法检测到已被修改的文件

boto3版本,如果对文件进行了更改,则附加

是否可以知道以哪种方法对文件进行了加密?

为什么Git无法检测到重命名?

检测到修改后的文件后,有没有立即运行的git hook?

Git重命名检测空文件

让SourceTree检测到重命名,即使原始文件仍然存在

系统无法检测到重命名/新文件

git - 显示修改后的文件,删除(或重命名)文件除外

用bash / mv移动文件后如何在Git中“重命名”文件

在Django中,登录后如何检测哪个auth后端对用户进行了身份验证?

PHP登录表单(无sql)-针对文本文件记录进行了验证-未进行验证

SimpleOnScaleGestureListener不会检测到移动

Powershell - 如何在移动文件后重命名文件?

按修改时间对文件排序

SuiteCRM数据库在外部进行了修改

git:显示哪些文件在内核3.18.6和3.18.7之间进行了更改

检测哪些脚本对DOM进行了更改

jQuery检测更改输入,其中JS进行了更改

检查文件是否可以重命名(移动)而不进行复制

新创建的文件说该文件已在2个月前进行了修改

如何从git的重命名检测中排除某些文件模式?