繁体   English   中英

git-svn和本地分支机构

[英]git-svn and local branches

我通常使用git进行版本控制,但是现在我在svn存储库中遇到了源代码,因此我使用git-svn来访问该存储库。 然而,当我尝试使用本地分支时,这似乎会导致一些麻烦。

我通常每天只提交一次本地存储库,所以我可能会在我的本地主服务器上提交,我还没有上传。 当我在此时创建分支,然后其他人提交到上游存储库时,当前的一个和上一个同步的提交之间的所有提交都会重复。

为了使这一点更加清晰:

A-B-C-D-E  
     \  
      \-F

上游存储库位于A处,两个分支处分别位于E和F. 做一个git svn rebase会导致:

A-G-H-B-C-D-E
 \
  \-B-C-F

其中G和H是从上游回购中提取的提交。 我已经尝试通过切换到另一个git svn rebase来将两个提交到另一个分支。 但这让我离开了:

A-G-H-B-C-D-E
 \
  \-G-H-B-C-F

因此,这会导致更多的提交重复。 有没有一种干净的方法来处理这种情况?

你应该在'git svn dcommit'之前使用'git svn rebase'来避免这些问题。 这反映了在提交之前更新的常见svn用法。 有关详细信息,请参阅http://git-scm.com/docs/git-svn中的 “REBASE VS. PULL / MERGE”部分。

您可以使用git rebase将任何提交范围重新应用到任何特定提交,这听起来像您想要的。 这种技术适用于移动任何范围的提交,但正如我在底部提到的,如果你的分支上只有一个提交F ,那么它就更容易挑选。 但是,首先我将介绍如何使用git rebase来实现它,因为这通常更有用。

(nb我要稍微重命名你的提交,因为两个B s, C s等在重新定位后会有不同的提交ID。)

在第一个git svn rebase

所以,如果你想在第一个git svn rebase之后做这个git svn rebase你会遇到这种情况:

A-G-H-B'-C'-D'-E'
 \
  \-B-C-F

此时,你可以做到:

git rebase --onto C' C F

......本来会创造的:

A-G-H-B'-C'-D'-E'
\          \
 \-B-C-F    \-F'''

第二个git svn rebase

如果情况如您在第二个git svn rebase之后描述的那样,那将是这样的:

A-G-H-B'-C'-D'-E'
 \
  \-G'-H'-B''-C''-F''

在这种情况下,您可以类似地做:

git rebase --onto C' C'' F''

要创建图表:

A-G-H-B'-C'-D'-E'
 \         \
  \          \- F'''
   \
    \-G'-H'-B''-C''-F''

......你可以忘记G'F''


但是,在这两种情况下,您只需移动一个提交,因此可能更容易选择提交。 换句话说,你可以这样做:

git checkout -b new-experiment C'
git cherry-pick F

我希望有一些用处。

暂无
暂无

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

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