代码之家  ›  专栏  ›  技术社区  ›  John Bachir

git svn如何知道要向哪个分支提交数据?

  •  17
  • John Bachir  · 技术社区  · 15 年前

    我的回购协议是SVN,我用git做所有的开发。我们有一个标准的布局,我用 git svn init -s <url to repo>

    以下是我处理分支机构的工作流:

    # creates a new branch remotely
    git svn branch new-branch-name
    
    # switches to a branch or trunk locally
    git reset --hard name-of-branch
    git reset --hard trunk
    
    # merge changes from trunk into a branch
    git reset —hard name-of-branch
    git merge trunk
    git svn dcommit
    

    上面的最后一个命令将提交对分支名称的更改。我的问题是,吉特怎么知道的?当我做git的时候 reset --hard foo ,到底发生了什么?

    这可能只是一个关于git的一般性问题。每次我试图研究一个答案时,我都会困惑svn集成是否是一个特例。

    3 回复  |  直到 15 年前
        1
  •  11
  •   cdhowie    15 年前

    git-svn 将在提交树中查找对应于活动SVN分支的祖先提交 refs/remotes/... 与SVN中的分支对应的分支)。然后它会提交给那些人。

    注意,不应该合并,然后dcommit——SVN和Git的分支模型不匹配,这种情况可能会破坏SVN的历史记录。你应该改 git rebase trunk 当你在树枝上的时候。(或者, git svn rebase .)

    另外,请注意,在重新定位之前签出的分支应该是本地分支。如果不是,你可以用 git checkout -b local-branch-to-create remote-branch . 那么 吉特回扣箱 .

    如果要将所有重新定位的提交压缩为一个提交,请在重新定位后执行以下操作: git reset --soft trunk && git commit .

    一旦你对现在存在于主干之上的承诺感到满意,就 git svn dcommit 将它们推送到SVN服务器。

        2
  •  2
  •   jgm Piyush Srivastava    13 年前

    创建一个本地分支和跟踪一个远程svn分支不是很简单吗? 当你做一个 git svn init --stdlayout url-of-svn-repo ,git会关闭整个svn repo,并对其进行压缩,使其可用于git。

    在那之后,这只是一个事实,做一些类似的事情:

    git checkout -b mybranch -t remotes/mybranch
    

    如果有本地分支跟踪远程分支, git svn dcommit 仅推送到跟踪的远程分支。

        3
  •  1
  •   kenorb    12 年前

    简单方法如果要将git master提交到svn trunk,请尝试以下命令:

    git checkout master
    git rebase trunk
    git svn info # To verify that you're on the right branch
    git svn dcommit
    

    在另一个分支上相同(例如6.x)

    git checkout 6.x
    git rebase 6.x # or git rebase remotes/6.x
    git svn info
    git svn dcommit