不久前,我有一个使用标准布局从 SVN 克隆的 git 存储库。(它是用 git svn init 和 git svn fetch 完成的)。现在我使用的是 git 1.7.9。我的 svn-remote 配置部分如下所示:
[svn-remote "svn"]
url = https://myhost/svn/myProject
fetch = trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/*
tags = tags/*:refs/remotes/tags/*
最初提取的所有分支都正常工作,后续提取在这些分支和主干上也是正确的。每个分支下的目录结构如下所示:
subProject1\src\myPackage
subProject2\src\
subProject3\src\
现在创建了一个名为 2_7_1 的新分支,它与所有其他分支和主干的目录结构相匹配。
现在,当我运行git svn fetch时,它开始从 r1 获取每个修订版,而不是仅从从主干创建 2_7_1 分支的修订版中获取它。原因似乎是它假设:src\myPackage目录结构而不是subProject1\src\myPackage,因此它开始获取从 r1 开始的所有修订。
当我在浏览器中浏览 SVN 存储库时,我发现目录结构没有任何区别。我注意到只有一个区别,新分支称为 2_7_1@18813(18813 是新分支的起始修订号),其中所有其他分支不包含修订,只有分支名称。
我不想使用此处提供的解决方案:How do I tell git-svn about a remote branch created after I fetch the repo? ,因为它会失去主干和 2_7_1 分支的共同父级。
编辑: 在完成完整的git svn fetch之后,我很清楚我的 git svn 看到了两个分支:2_7_1 和 2_7_1@18813。2_7_1@18813 是从修订版 #1 中获取的。这弄乱了我之前跟踪 SVN 主干的主分支。
现在我的分支结构看起来像这样(一团糟):
------------------------------------------- X -- Y -- Z == masterNew/trunk
-- A -- B -- C -- D -- E -- F -- G ---- == 2_7_1@18813
\ \
\ \ - J - K - L == master (old trunk)
\
- A' - B' - C' - D' - E' - F' - G' -- H -- I == 2_7_1
编辑#2: 使用 git svn clone 对 SVN 存储库进行完整克隆后,问题仍然存在。