【问题标题】:How to integrate svn branches into git branches with git-svn?如何使用 git-svn 将 svn 分支集成到 git 分支中?
【发布时间】:2011-07-07 10:39:47
【问题描述】:

我没有太多的svn经验,但我习惯使用git。

我有以下 svn 存储库结构和修订。

https://server/svn/solution/trunk/solution.sln@r100
https://server/svn/solution/trunk/project1/project1.csproj@r150
https://server/svn/solution/trunk/project2/project2.csproj@r160

https://server/svn/solution/branches/solution.sln@r100
https://server/svn/solution/branches/project1/project1.csproj@r200
https://server/svn/solution/branches/project2/project2.csproj@r350

当我克隆存储库时

git svn clone https://server/svn/solution --stdlayout

我得到了一切

(master)$ git branch -a  
* master  
  remotes/project1  
  remotes/project2  
  remotes/trunk  

当我想为远程分支创建本地分支时

(master)$ git checkout -b local-project1 project1

我结帐时得到的只是 project1。该分支不包含来自

的任何内容

https://server/svn/solution/branches/solution.sln@r100

为了解决这个问题,我尝试了以下方法:

(local-project1)$ git checkout master
Switched to branch 'master'.
(master)$ git branch local-project1 -D
Deleted branch local-project1 (was 1111a11).
(master)$ git checkout -b local-project1
Switched to new branch 'local-project1'.
(local-project1)$ pwd
/c/workingcopies/solution
(local-project1)$ cd project1
(local-project1)$ pwd
/c/workingcopies/solution/project1
(local-project1)$ git branch --set-upstream local-project1 remotes/project1
Branch local-project1 set up to track local ref refs/remotes/project1.
(local-project1)$ git svn fetch
(local-project1)$ git reset --hard ae8e9b1a ;# go to last commit of the remote branch

获取从存储库中的分支获取最后一个修订,并且 HEAD 设置为最后一次提交,但我仍然只在分支中获取 project1,而不是解决方案。感谢您提供任何建议和帮助。

【问题讨论】:

    标签: git git-svn git-branch remote-branch


    【解决方案1】:

    问题是您没有标准的 svn 布局。标准布局会在每个分支的分支下都有目录,就像这样。

    repo/
      +-- trunk
      |     +-- solution.sin
      |     +-- project1/project1.csproj
      |     +-- project2/project2.csproj
      +-- branches/
            +-- branch01/
                  +-- solution.sin
                  +-- project1/project1.csproj
                  +-- project2/project2.csproj
    

    相反,您有一个主干和一个名为“分支”的分支,位于与主干相同的目录中。

    我不确定是否可以告诉 git 正确处理此问题。我有一些想法:您可以编辑 .git/config 以使 git 在最顶层目录中查找分支,但是当它尝试创建一个名为 trunk 的分支时可能会感到困惑,而它已经有一个主干。

    【讨论】:

    • 我尝试了这种方法,但由于不同的 git 错误消息而失败
    • 哪种方法?重新组织 svn,或欺骗 git 查找高于正常分支的目录?
    • 欺骗 git。 svn repo 不符合标准。 repo 将在不久的将来移动,我的同事将重新组织 repo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2011-10-07
    • 2013-05-28
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多