【问题标题】:git-svn: How do I avoid 'Merge branch <branchname>' commit messages?git-svn:如何避免“合并分支 <branchname>”提交消息?
【发布时间】:2011-11-06 05:10:06
【问题描述】:

这是我目前的 git-svn 工作流程:

git checkout -b feature master
# hack commit hack commit
git checkout master
git svn rebase
git merge feature
git svn dcommit

这通常工作正常,git 在主干重放本地分支的所有提交,唯一的“丢失数据”是原始提交的时间戳,没什么大不了的。

但今天看来,merge 和 dcommit 出现了一些不同,导致 SVN 存储库上的提交消息只是“合并分支'功能'”,可能是因为该功能“更小”,只有 2 个或3 次提交。

如何避免这种情况发生并确保所有来自 git 的提交和提交消息都在 SVN 存储库上重放?

【问题讨论】:

    标签: workflow git-svn


    【解决方案1】:

    该注释应该是 git 合并的 dcommit 的结果,如“Is git-svn dcommit after merging in git dangerous?”所示:

    (master)$> git log --graph --oneline --decorate
    * 56a779b (work, master) Merge branch 'work'
    |\  
    | * af6f7ae msg 3
    | * 8750643 msg 2
    | * 08464ae msg 1
    |/  
    * 21e20fa (git-svn) last svn commit
    

    换句话说,如果这三个“msgx”提交是直接在 master 上完成的,那么它们就会在 svn 端被重放(使用它们原来的 cmets)。
    但在这里,只有生成的合并提交会被重放,并带有“通用”注释。

    【讨论】:

    • 好的,我想我明白了,但它仍然没有回答如何将功能合并到 master 中,以确保 master 将接收所有提交而不是组合的“合并分支”提交。我应该从功能变基到主控而不是合并?
    • @dipnlik: 如果你想重播从featuremaster 的所有提交,那么是的,rebase 是一个选项(前提是你知道关于 rebase 的风险,你可能已经知道推送到其他远程 Git repo 并且其他可能已经克隆,与 git-svn 无关的风险:参见“RECOVERING FROM UPSTREAM REBASE
    【解决方案2】:

    你需要先从特性分支变基:

    git checkout feature
    git rebase master
    

    这可确保当您合并到您的主服务器时,您只会获得一个 Fast-Forward 而不是实际的合并。

    我的流程通常是这样的:

    git checkout master
    git svn rebase
    git checkout feature
    <hack...hack...hack>
    git commit
    git rebase master
    git checkout master
    git merge feature
    

    我只是确保做一个 svn rebase,然后 rebase 我所有的功能分支,以保持一切都按照 SVN 喜欢的方式保持良好和线性。

    另外,如果您不知道,还有git svn dcommit --dry-run 选项。我总是使用--dry-run 并计算提交次数以确保 git-svn 能够提交我所期望的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2013-02-07
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多