toh*_*lio 7 svn git version-control git-svn
我正在使用严格的签入策略在subversion存储库中处理项目,其中包括:每次提交到trunk都必须由另一个开发人员审核,这必须在提交消息中提及.
在使用git-svn时,我正在进行许多未经审核的增量git签到.他们的git commit消息反映了这一点.
使用git-svn但遵循svn存储库规则的最佳方法是什么?我应该将所有提交压缩成单个svn提交吗?我可以使用审阅者信息重写每个修订的提交消息吗?在执行git-svn dcommit之前,我可以"手动"将每个单独的更改移动到git master分支并修改每个更改的提交消息吗?
我在git的分支上工作,然后checkout master,git svn rebase最后将分支合并到master中.
此时,git svn dcommit将所有临时提交与原始消息一起放入svn中 - 不是想要的!但是如果我使用git commit --amend将标准合并消息中的merge的提交消息更改为适合我们的svn提交策略的东西,则dcommit会将它们全部归为新消息下的一个.赢得.
我发现如果master在分支的生命周期内没有改变,这似乎不起作用 - 提交只是快速转发,没有"合并分支"消息 - 所以最好将--no-ff标志添加 到git merge.
摘要:
git checkout branch
<do work>
git checkout master
git svn rebase
git merge --no-ff branch
git commit --amend
<policy-compliant commit message>
git svn dcommit
Run Code Online (Sandbox Code Playgroud)
您可以根据 Subversion 跟踪分支以交互方式重新调整本地分支的基础,这为您提供了压缩和修改提交的机会。
下次您进行 dcommit 时,dcommit 将一次重放您的一次提交历史记录,这就是将提交给 Subversion 的内容。
假设:
该怎么办:
$ git rebase -i git-svn
Run Code Online (Sandbox Code Playgroud)
您的默认编辑器将打开,其中包含 master 中的提交列表,以针对 git-svn 进行变基。您可以选择、编辑或压缩提交(如果需要,可以混合和匹配)。
做出选择后,另一个临时文件将打开,显示您正在重写的每个提交的提交消息。您可以在此处修改提交消息。
注意事项:
您正在重写存储库的历史记录,请务必小心。在感到自信之前,尝试这种行为可能是值得的。