简介
我们正在使用git-svn
从Git转移到SVN。
我们有一个包含大型目录树的SVN存储库。项目使用相对路径链接到其他子项目。以下简化示例的MainProject
取决于SharedProject1
和SharedProject2
SVN
└── trunk
├── MainProject
├── SharedProject1
└── SharedProject2
转到Git,我们每个项目都有一个存储库。我们将使用git-subtree
处理依赖项。因此MainProject
存储库的结构如下所示:
MainProject
└── Depend
├── SharedProject1
└── SharedProject2
如何git - > svn move已执行
使用以下方法将每个项目克隆到Git存储库:
git svn clone http://server/svn --trunk="trunk/MainProject" MainProject
git svn clone http://server/svn --trunk="trunk/SharedProject1" SharedProject1
git svn clone http://server/svn --trunk="trunk/SharedProject2" SharedProject2
在MainProject
我们使用git-subtree添加SharedProject:
git subtree add --prefix "Depend/SharedProject1" path/to/SharedProject1 master --squash
git subtree add --prefix "Depend/SharedProject2" path/to/SharedProject2 master --squash
更改MainProject中的链接后,一切正常!
git svn rebase的问题
当我们的一些开发人员更新SVN存储库中的MainProject
时,我想使用以下命令将更改添加到MainProject的Git存储库:
git svn rebase
但是我收到以下错误:
First, rewinding head to replay your work on top of it...
Applying: Squashed 'Depend/SharedProject1/' content from commit fdabd7b
Applying: Squashed 'Depend/SharedProject2/' content from commit 38e8c6f
...
Falling back to patching base and 3-way merge...
Auto-merging Properties/AssemblyInfo.cs
CONFLICT (add/add): Merge conflict in Properties/AssemblyInfo.cs
Failed to merge in the changes.
Patch failed at 0002 Squashed 'Depend/SharedProject2/' content from commit 38e8c6f
...
rebase refs/remotes/trunk: command returned error: 1
SharedProject1
和SharedProject2
(但不是MainProject
)都有一个文件Properties/AssemblyInfo.cs
git似乎尝试合并,即使它们不在同一个文件夹中。< / p>
我做错了什么,如何让它正常工作?
答案 0 :(得分:0)
我还有另一个问题,可能与您的问题有关(是的,几年过去了)。在我这边,git svn rebase
试图将子对象的根直接重新建立到主项目的根中(因为该子对象没有--prefix
或它确实忽略了它)。
在以下步骤之后发生:
'
From https://...
! [rejected] trunk -> master (non-fast-forward)
+ 834b7b2...794c965 trunk -> origin/trunk (forced update)
.git\svn\refs\remotes\origin\trunk
并重新获取svn:git svn fetch
(此修复程序基本上可以正常工作)git svn rebase
之后,主项目的根被弄乱了,并包含子树的根。在您的情况下,您似乎有2个子树,其中git尝试将文件两次合并到同一目录(主项目根目录)中。
我不知道为什么,但是看来git-svn
要么以某种方式错过了有关子树前缀的信息,要么没有考虑到它。
要解决此问题,我必须在git push origin master:trunk
之前致电git svn rebase
。