考虑这个测试脚本。
$props = $dataSet.Tables[0] |
Select-Object * -ExcludeProperty RowError, RowState, ItemArray,
HasErrors, Table -First 1 |
ForEach-Object { $_.PSObject.Properties | Select-Object -Expand Name }
$dataSet.Tables[0] |
ConvertTo-Html –Body $body -Property $props |
Out-File -Append $OutputFile
我想要发生的是让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
在分支中被重命名为x
,并让我有机会解决合并冲突。
相反,git忽略(无法检测)重命名,并且在创建新的无关文件y
时,分支中删除了x
。
我如何说服git将其作为重命名的文件处理?
谢谢!
答案 0 :(得分:5)
你是对的:git重命名检测,而不是重命名跟踪,如果文件已经改变了太多" (对于某些值"太多"),git声明这是一个不同的文件,而不是重命名的文件。
对此没有完美的解决方法。如果您的git足够新(1.7.4或更高版本),通常最好的选择是将-X rename-threshold=<n>
标记传递给git merge
。降低阈值使git检测更多重命名(并且您可以使用git diff -M
来测试适当的阈值)。