带SVN主干和分支的Git

带SVN主干和分支的Git,git,svn,merge,branch,git-svn,Git,Svn,Merge,Branch,Git Svn,因为我一直在使用Git,所以我喜欢这样一个事实:您可以创建一个本地分支,您可以将其压缩到主分支,并将其提交到SVN(在主干上),然后删除该本地分支(在Git上) 现在我想了解如何处理SVN分支。我需要与一个团队合作开发一个新功能,但我们不想在Trunk上这样做。所以很明显,我们需要从主干上分支,并在那个分支上工作,直到我们对工作感到满意并合并回主干 从Git前端的角度看如何做到这一点,有什么想法吗? 我肯定有很多资源,但我还没有找到任何东西来解释这一点 所以,为了确保我自己解释清楚,我知道如何单

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

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

从Git前端的角度看如何做到这一点,有什么想法吗? 我肯定有很多资源,但我还没有找到任何东西来解释这一点

所以,为了确保我自己解释清楚,我知道如何单独将Git与SVN trunk一起使用。这很容易,也很好。但是我需要从trunk在SVN上进行分支,并使用Git处理该分支(同时希望仍然可以使用Git访问SVN trunk),直到工作完成,然后将该分支合并回SVN上的trunk(再次使用Git)。如果有人能给我这方面的见解,我将非常感激!有可能在一次Git回购中实现这一点吗


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

几个月前我在博客上写过这个话题:

简而言之,您可以在一个git存储库中跟踪多个svn分支,但实际上不应该这样做。有一次搞砸了,我基本上再也不会尝试在一个存储库中跟踪多个svn分支。它太不稳定,太容易在svn中造成重大损害。基本上,当地的一切都很好,我做出了改变。但实际上,我重新排序了一些确实不应该被重新排序的提交,并在上游造成了很大的损害。最后我不得不做一个大的svn恢复。非常尴尬

因此,您可以使用单独的git存储库来跟踪每个svn分支,并将这些存储库用作仅git存储库上的远程存储库,在该存储库中,您可以在运行时将这些存储库推送到不同的远程存储库。像这样隔离git和svn很有意义。确保您的历史记录保持线性(svn不做非线性),并确保始终根据上游重新设定基准


在这种情况下,在分支/存储库之间移动提交(git世界中也是一样)的一种更安全的方法是使用git格式补丁和git am。或者,您可以在存储库中使用git cherry pick。

几个月前,我在博客中谈到了这个主题:

简而言之,您可以在一个git存储库中跟踪多个svn分支,但实际上不应该这样做。有一次搞砸了,我基本上再也不会尝试在一个存储库中跟踪多个svn分支。它太不稳定,太容易在svn中造成重大损害。基本上,当地的一切都很好,我做出了改变。但实际上,我重新排序了一些确实不应该被重新排序的提交,并在上游造成了很大的损害。最后我不得不做一个大的svn恢复。非常尴尬

因此,您可以使用单独的git存储库来跟踪每个svn分支,并将这些存储库用作仅git存储库上的远程存储库,在该存储库中,您可以在运行时将这些存储库推送到不同的远程存储库。像这样隔离git和svn很有意义。确保您的历史记录保持线性(svn不做非线性),并确保始终根据上游重新设定基准


在这种情况下,在分支/存储库之间移动提交(git世界中也是一样)的一种更安全的方法是使用git格式补丁和git am。或者,您可以在存储库中使用git cherry pick。

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

即使我没有用标准布局克隆SVN repo,我也应该配置指向subversion上相关SVN路径的远程设备

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

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

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

git checkout -b localbranch remotes/remote_branch
现在,您可以对该本地分支进行提交,每次提交后,都可以像在主干中一样执行此操作:

git svn fetch
git svn dcommit
当您最终完成该SVN分支并希望合并到主干时,您可以执行以下操作(它将从该分支获取所有内容并将其重定为主分支):

如果愿意,您也可以进行挤压合并(如果您不想带来所有这些小签入):

在进行真正的数据提交之前,您可能需要进行一次试运行,以确保一切正常(包括目的地)

但是,如果您预期合并冲突(这是我在网上读到的,但我没有尝试过,我只是提到了这一点),请在上面显示的
git checkout master
行之前执行以下操作。这是一个不跟踪远程分支的本地分支,远程分支应用于处理合并冲突和其他问题。这是否必要是另一回事

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

我写这篇文章是为了我自己,也为了将来可能想尝试的其他人。

我终于发现了使用Git处理SVN分支需要做什么。 我已经尝试了下面提到的东西(我指定的地方除外),所以我很有信心,只要我不做任何有趣或不符合标准的事情,我从Git到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
git svn dcommit -dry-run
git checkout -b merge_work master
git merge localbranch
git checkout master
git rebase merge_work