以下脚本尝试查找两个分支的最新常见提交。提交应该有相同的主题,相同作者和相同作者日期。但提交日期和散列是不同的。因此,git rebase
无法自动找到此分支。在两个完全不同的git树中查找常见提交
#!/bin/bash
lastbr=
lastrest=
revU= # Update
revB= # Base
rm -f rev.*.tmp
(
git log --format='format:b %H %at %an %ae %f' master
echo
git log --format='format:u %H %at %an %ae %f' master_tmpnew
) | sort -r -t' ' -k3 | while read br rev rest; do
echo "? $br $rev $rest"
[ "$br" != "u" ] || revU="$rev"
[ "$br" != "b" ] || revB="$rev"
if [ "$lastrest" = "$rest" -a "$lastbr" != "$br" ]; then
echo "found match: base $revB updae $revU"
echo "$revB" >rev.base.tmp
echo "$revU" >rev.update.tmp
break
fi
lastrest="$rest"
lastbr="$br"
done
if [ ! -f rev.base.tmp ]; then
echo "No matching revision found"
exit 1
fi
revB="`cat rev.base.tmp`"
revU="`cat rev.update.tmp`"
git rebase --onto $revB $revU master_tmpnew
问题:该解决方案看起来并不对我很好。你们中的任何人是否有更好的主意来解决如何实施这个问题,或者有没有解决方案?
背景:我尝试使用工具cvs2git实现增量式CVS到GIT导入。正式的,它不支持增量进口,但我发现了一个类似于this workaround的解决方案。唯一的问题:我做了一个简单的git rebase
问题。由于分支不匹配(由于git2svn的性质,提交日期不同),所以如果我不使用详细引用(普通提交),它通常会重写更多的提交。查看this以获得上述脚本的准备运行测试场景。
而不是'$ revB',我应该使用'master'的为底垫命令:'git的重订--onto主$ revU master_tmpnew'。但这不是我的问题的主题。 – 2013-02-25 10:16:43