与SVN主干和分支Git

因为我一直在使用Git,所以我喜欢这样一个事实,即您可以创建一个本地分支,您可以将它压缩到主分支,并将DCommit分配给SVN(在主干上),然后删除该本地分支(在Git上)。

现在我想知道如何处理SVN分支。 我需要与一个新功能团队合作,但我们不想在Trunk上这样做。 所以很显然,我们需要从树干分支并在分支上工作,直到我们对工作感到满意并合并回Trunk。

关于如何从Git前端角度来做到这一点的任何想法? 我确信有足够的资源,但我还没有找到可以解释这一点的东西。

因此,为了确保我解释自己,我知道如何单独使用Git与SVN主干。 这很简单,很好。 但是我需要从trunk中分支SVN,并使用Gi​​t来处理该分支(同时希望仍然可以使用Git访问SVN主干),直到完成工作,然后将该分支合并回SVN的trunk(再次使用Git)。 如果任何人都可以给我洞察力,我会非常感激! 是否有可能在一个单一的Git仓库中有这个功能?

提前致谢。 (如果还不清楚,请告诉我)。


我几个月前在博客这个话题:http://www.jillesvangurp.com/2012/08/04/git-presentation/

简而言之,您可以在单个git存储库中跟踪多个svn分支,但实际上不应该这样做。 有一次我搞砸了,我基本上永远不会再试着在一个存储库中跟踪多个svn分支。 它太易变,太容易在svn中造成重大损失。 基本上一切都很顺利,我承认我的改变。 但实际上,我重新排序了一些实际上不应该重新排序的提交,并在上游造成了很大的损失。 最后,我必须做一个大的svn恢复。 非常尴尬。

所以,相反有独立Git仓库来跟踪每一个SVN分支,并使用这些存储库作为一个git远程仓库只有在您实际工作推到不同的远程存储库,当您去。 像这样隔离git和svn很有意义。 确保保持你的历史线性(svn不做非线性),并确保总是反向上游。

移动一个更安全的方式(在git的世界同样的事情)分行/存储库之间犯这种情况下是使用git格式补丁和git上午。 或者,你可以在仓库中使用git cherry-pick。


我终于发现为了与使用Git的SVN分支一起工作,我需要做些什么。 我已经尝试了下面提到的东西(除了我指定的地方),所以我相当有信心,只要我没有做任何有趣或不合时宜的事情,我从Git到SVN的提交应该工作得很好。 当然,我不对任何可能发生的问题承担任何责任! 我接受进一步评论/评论。

即使我没有用标准布局克隆SVN回购,我也应该配置指向SVN路径的遥控器。

克隆一个SVN分支(SVN路径应该指向包含trunk,分支和标签的根路径):

git svn clone -s http://myrepo.com c:/my/local/path

如果您已经拥有SVN分支的克隆,则需要手动将远程分支添加到其他SVN分支,请查看以下内容:

  • 使用git svn签出远程分支
  • 我如何告诉git-svn关于在获取回购后创建的远程分支?
  • 重要的是您有一个本地分支正在跟踪远程分支。

    git checkout -b localbranch remotes/remote_branch
    

    现在你可以对本地分支进行提交,每次完成后就像在主干中一样:

    git svn fetch
    git svn dcommit
    

    当你最终完成这个SVN分支并且你想合并到主干时,你可以执行以下操作(它将从该分支获取所有内容并将其重新分配到主分区):

    git checkout master
    git merge localbranch
    git rebase -i trunk  (just save the message)
    git svn fetch
    git svn dcommit
    

    如果你想要的话,你也可以做一个壁球合并(如果你不想把所有这些小小的签到):

    git merge --squash localbranch
    git svn fetch
    git svn dcommit
    

    在做一个真正的DCOMMIT以确保一切正常(包括目的地)之前,你可能会做一个干运行。

    git svn dcommit -dry-run
    

    但是,如果您预计合并冲突(这是我在网上阅读的内容,但我没有尝试过,我只是提到了这一点),请在上面显示的git checkout master主线之前执行以下操作。 这是一个本地分支,它不跟踪应该用来解决合并冲突和东西的远程分支。 这是否有必要是另一回事。

    git checkout -b merge_work master
    git merge localbranch
    git checkout master
    git rebase merge_work
    

    我正在为自己和其他可能想在未来尝试这种做法的人写这篇文章。

    链接地址: http://www.djcxy.com/p/89515.html

    上一篇: Git with SVN trunk and branches

    下一篇: How to remove origin from git repository