繁体   English   中英

Git与SVN主干和分支机构

[英]Git with SVN trunk and branches

由于我一直在使用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 format-patch和git am。 或者,您可以在存储库中使用git cherry-pick。

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

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

要克隆SVN分支(SVN路径应指向包含主干,分支和标记的根路径):

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

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

重要的是,您有一个跟踪远程分支的本地分支。

git checkout -b localbranch remotes/remote_branch

现在你可以针对那个本地分支进行提交,每次完成时就像在trunk中一样:

git svn fetch
git svn dcommit

当你最终完成SVN分支并且想要合并到trunk时,你可以执行以下操作(它从该分支获取所有内容并将其重新绑定到master):

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

我正在为自己和其他可能希望将来尝试这一点的人写下这篇文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM