与SVN主干和分支Git
因为我一直在使用Git,所以我喜欢这样一个事实,即您可以创建一个本地分支,您可以将它压缩到主分支,并将DCommit分配给SVN(在主干上),然后删除该本地分支(在Git上)。
现在我想知道如何处理SVN分支。 我需要与一个新功能团队合作,但我们不想在Trunk上这样做。 所以很显然,我们需要从树干分支并在分支上工作,直到我们对工作感到满意并合并回Trunk。
关于如何从Git前端角度来做到这一点的任何想法? 我确信有足够的资源,但我还没有找到可以解释这一点的东西。
因此,为了确保我解释自己,我知道如何单独使用Git与SVN主干。 这很简单,很好。 但是我需要从trunk中分支SVN,并使用Git来处理该分支(同时希望仍然可以使用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 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