我一直在与git/git-svn学习曲线作斗争,昨晚,作为学习曲线的一部分,我做了非常非常糟糕的事情.我已经纠正了,但我希望能够理解错误.
我有一个svn存储库,我已经克隆了主干和分支(我忽略了标签因为我们不对它们起作用).使用git,我为当前需要使用的每个分支创建了本地分支:
$ git checkout -b trunk svn/trunk $ git checkout -b feature1 svn/branches/development/feature1 $ git checkout -b maint svn/branches/maintenance/previous-version
我将feature1作为我的活动分支并进行了一些更改,然后被拉开了几天.我回到它昨天想要整合已经对主干进行的任何更改,以便我正在使用最新和最好的.我所做的是首先通过git svn rebase完全更新所有brances(没有其他人在feature1分支上工作过).从我的svn存储库获取最新信息,我试图改变.
使用feature1作为我的活动分支,我做了一个"git rebase trunk",认为我会将更改从trunk更改为 feature1分支.结果我非常非常错.合并所有冲突后,我做了一个git svn dcommit,发现我的更改已应用于主干.
我的第一个问题是我思考过程中的核心错误在哪里?我的第二个是,经过大量阅读和谷歌搜索,我看到人们支持拉动,合并和重组.鉴于我想将一个本地分支中应用的更改合并到另一个本地分支,应该是什么怎么做呢?这种情况的最佳做法是什么?
谢谢你的帮助.
您遇到的问题是rebase的命令行语法与您(非常合理的,IMO)的期望不符.
$ git checkout feature1 $ git rebase trunk
此序列将未共享的feature1提交添加到trunk的HEAD上,并且您期望它将新的trunk提交放置到feature1的HEAD上.当你知道如何实现Git的数据模型时,语法实际上是有意义的(这无疑是它的原因).但对我而言,这与我的预期相反,在功能上.最好将它作为一种任意的结构来学习而不是试图获得期望.
你明白如何使用git-svn与SVN repo进行交互是正确的.所以忽略你在谷歌搜索中发现的关于推拉和合并的内容 - 这些人几乎都是正确的讨论,好像推拉和合并在git和svn中是相同的.几乎是对的还是错的.