我有一个git存储库,其中包含大约30个我想要导入现有SVN存储库的修订版.不幸的是,SVN存储库有一堆预提交挂钩,需要提交消息中的某些信息,某些文件类型中的某些SVN关键字等等.这些都与我正在检查的东西无关,或者无论如何,它们都不像保留现有的修订历史那么重要.
在一个完美的世界里,我可能会做一些事情:
在一个不那么完美的世界里,我可以得到git-svn以某种方式预先设置skip-pre-commit-checks(? - 我之前从未使用过它),然后我至少拥有所有的修订历史记录.
思考?
更新以添加: skip-pre-commit-checks实际上并不是一件事; 我被某个特定项目的特定黑客误导了.
你有几个选择.
您可以使用git filter branch来重写您的提交消息:
如果您需要将Acked-by行添加到最后10个提交(其中没有一个是合并),请使用以下命令:
git filter-branch --msg-filter '
cat &&
echo "Acked-by: Bugs Bunny <bunny@bugzilla.org>"
' HEAD~10..HEAD
Run Code Online (Sandbox Code Playgroud)
您可以通过选择编辑模式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
...
Run Code Online (Sandbox Code Playgroud)
然后
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
....
Run Code Online (Sandbox Code Playgroud)
您还可以使用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>
Run Code Online (Sandbox Code Playgroud)
如果这是您可能需要定期执行的操作,则可以使用prepare commit mesg钩子为提交消息的格式添加一些一致性.
请注意,与git不同,您不能跳过svn中的预提交挂钩(至少不能通过任何内置机制),因此尝试执行任何操作git commit -va --no-verify
都不会影响下次运行时git svn dcommit
,它将全部失败相同(如果有什么东西要失败的话).