English 中文(简体)
to to foolool g--svn to recognize merges made with svn?
原标题:
  • 时间:2009-06-02 05:44:38
  •  标签:

我们有一个特别志愿人员网络,它拥有稳定的干.和不稳定的发展分支。 发展工作(主要是)在分处进行,然后在部署之前并入干线。

我使用惠恩作为我的SVN客户。 我的合并过程从不稳定到干 如下:

git svn fetch
git co -b trunk svn/trunk 
git merge --no-ff svn/unstable
git svn dcommit

svn/* 是偏远的SVN分行。

当然,这要求没有人在我做事之前对这个空白做任何事,但这实际上不是一个问题。

这一进程的好处是,现在把merge子的父母记录在我的当地存放处。 这对我的同事没有好处,但它的确允许对共同的祖先进行计算。 这非常可取。

这里是废墟。 当其他人混杂时,就不知道。 例如:

  o-...-A---o---C--- unstable
 /
X--...--B---o---o--- stable

不稳定的分支是在X点设立的。 在A点,我们决定在B点将不稳定的分支部门转变为稳定的分支。 普通祖先是正确的十。

由于混凝土历史上没有出现这种合并,因此C的以下合并再次假定X是共同的祖先。 如同以下图表一样,我想是A:

  o-...-A---o---C--- unstable
 /       
X---...---B---o---o--- stable

没有必要获得像照片一样的图表。 任何将承认A为共同祖先的图表,由我罚款。

我有一些选择,例如适当使用 g膜或“假”承诺,这种承诺从未向SVN开放。 然而,迄今为止,我从未尝试过充分的工作。

我感谢你能够提出的想法。 程序不必自动进行。 合并非常少见,我可以承受“亲手”这样做的痛苦。

最佳回答

另一种选择是使用Grafts案,它允许你在不实际操纵历史的情况下推翻承诺的父母。

这意味着,在你看到特别志愿人员国家存放处出现合并后,你刚刚需要与共同承诺(M)及其父母(A,B)的SchA-1一道增加一条线。

      o-...-A---o---D--- unstable
     /       
    X-----B---M---o---o--- stable

A = 31423cd8a838f984547a908777308d846043cbda
B = d99cfccb1f859a8f1dbfac95eec75227fe518b23
M = 13319a54d3e3d61b501e7cc6474c46f37784aaa3

为了建立A-M的联系,你将具体指明M的父母为B和A。 草稿的格式相当简单:

commit newparent1 ... newparentN

也就是说,在你起草的档案中添加以下(长期)线:

13319a54d3e3d61b501e7cc6474c46f37784aaa3 d99cfccb1f859a8f1dbfac95eec75227fe518b23 31423cd8a838f984547a908777308d846043cbda

现在,Gite将预先假定这种合并实际上已经发生。 作为倒数,这只字塔是通过 push/f/cl传播的,但这只是个人发展的一个主要问题。

问题回答

Your problem is a bit like SVN populating svnmergeinfo from git merges in reverse:
You do not want SVN to record merges from Git, but Git to record merges from SVN ;)

由于git-svn并不关注svnmerinfo/code>在从SVN进口时,该代之以“manual operation”办法。

I would not recommend a git-filter-branch solution or anything which rewrites history on the Git side.
If you are aware of a "A->B" merge on SVN, you should do that merge on Git **in a "merge" branch, and then merge it right back into the stable branch (trivial merge at this point), thus adding a new commit to your current stable history.

    o-.....-A---o---C--- unstable
   /         
  /           o-------\__ merge recorder branch
 /           /         
X---.....---B---o---o---o__ stable

然后,从C到稳定的合并应当具有共同的祖先。

由于1.6.6git,这种情况应自动发生。

* “git svn”学到:SVN 1.5+和SVK合并票。

:

携带raft子

  1. Do them wrong and a git gc will (after a while) drop parts of the history
  2. If you push to another host, it will not know of the grafts and may end up with broken history.




相关问题