我有一个包含大约30个修订版的git存储库,我想将其导入到现有的SVN存储库中。不幸的是,SVN存储库有一堆预提交挂钩,需要提交消息中的某些信息,某些文件类型中的某些SVN关键字等等。这些都与我正在检查的内容无关,或者无论如何,它们都不像保留现有的修订历史那么重要。
在一个完美的世界里,我可能会做类似的事情:
在一个不那么完美的世界里,我可以得到git-svn以某种方式预先设置skip-pre-commit-checks(? - 我之前从未使用过它),然后我至少会进行所有的修改在那里的历史。
思想?
更新以添加: skip-pre-commit-checks实际上并不是一件事;我被某个特定项目的特定黑客误导了。
答案 0 :(得分:5)
您有几个选择。
您可以使用git filter branch重写提交消息:
如果您需要将Acked-by行添加到最后10个提交(其中没有一个是合并),请使用以下命令:
git filter-branch --msg-filter '
cat &&
echo "Acked-by: Bugs Bunny <bunny@bugzilla.org>"
' HEAD~10..HEAD
您可以git rebase interactive选择编辑模式
来重写提交消息git rebase -i HEAD~30
edit f7f3f6d changed my name a bit
edit 310154e updated README formatting and added blame
edit a5f4a0d added cat-file
...
然后
git commit -v --amend
<editor launched, edit commit message>
git rebase --continue
git commit -v --amend
<editor launched, edit commit message>
git rebase --continue
git commit -v --amend
<editor launched, edit commit message>
git rebase --continue
....
您还可以使用git rebase将everthying转换为一个限制工作负载的提交
git rebase -i HEAD~30
pick f7f3f6d changed my name a bit
squash 310154e updated README formatting and added blame
squash a5f4a0d added cat-file
...
<editor launched, edit the combined commit message>
如果这是您可能需要定期执行的操作,则可以使用prepare commit mesg挂钩为提交消息的格式添加一些一致性。
请注意,与git不同,您不能跳过svn中的预提交挂钩(至少不能通过任何内置机制),因此尝试执行git commit -va --no-verify
之类的任何操作都不会影响下次您运行git svn dcommit
,它会一直失败(如果有什么东西要失败的话)。