我一直在使用git-svn
与我公司的 svn repo 通信一段时间,没有任何大的头痛。
今天,“头痛”部分发生了巨大的变化:
我一直在master/trunk
非常专注地工作,并且需要将大部分(但不是全部!)这些变更集合并到一个新的 svn 分支中,该分支源自一个预先存在的svn 分支。
基本上是这样的:
-----------1--1-----1--------1--1--1--- master/trunk
\
\
2--2--2--2--2 versioned-release
应该变成这样:
-----------1--1-----1--------1--1--1--- master/trunk
\
\
2--2--2--2--2 versioned-release
\
\
1--1--1--1--1--1 new-versioned-release
不应该在 中的提交在哪里
new-versioned-release
,以及x
来自各个分支的想要的提交x
。
所以我做了以下事情:
git checkout -b versioned-release-svn remotes/versioned-release
git svn branch new-versioned-release -m "Preparing for merge of XXX"
git checkout -b new-versioned-release-svn remotes/new-versioned-release
git cherry-pick ...
对于每一个1
,解决途中的任何冲突。
因为我想确定我真的要针对 repo 上的正确分支,然后我运行git svn dcommit --dry-run
它并没有产生任何错误或警告,但告诉我......</p>
Committing to svn://username@$repo-host/$repo-name/$path/branches/new-versioned-release ...
…接着是几diff-tree
行。
所以我试图省略--dry-run
提交的中途以......</p>
Item already exists in filesystem: File already exists: filesystem '/data/subvroot/$repo-name/db', transaction '20856-g3m', path '/$path/branches/new-versioned-release/some-directory' at /usr/libexec/git-core/git-svn line 862
……还有一堆未分阶段的变化。
除了显而易见的——“WTF?!?” 和“我怎样才能在不失去我所做的一切的情况下摆脱这个烂摊子?” ——我有两个问题:
- 假设我回到以前
git svn dcommit
:我如何让我的本地分支 dcommit 到其计划的目的地? - 现在看来很明显,这不是实现我想要的正确方法……但是我应该怎么做呢?
我为错误消息找到的所有内容,在某种程度上类似于我的情况,到目前为止,这是另一个堆栈溢出问题,并且提出的“以某种方式 [...] 吹走.git/svn
元数据目录”的解决方案并没有引起我的共鸣...... </p>