【问题标题】:Can I git-svn clone an svn repo with multiple standard directory layouts我可以 git-svn 克隆具有多个标准目录布局的 svn 存储库吗
【发布时间】:2011-04-01 02:32:54
【问题描述】:

我有一个 SVN 存储库,其布局类似于
项目1/主干
项目1/分支机构
项目1/标签
项目2/主干
项目2/分支机构
项目2/标签
等等

出于多种原因,我想要一个 git-svn 存储库,它允许我处理这些项目中的任何一个,并一次从所有项目中获取/dcommit。这种事情可能吗?我知道我可以只用 git-svn 克隆整个东西而不指定分支、标签和主干,但是这样我就会失去很多使用 git 的优势。

【问题讨论】:

    标签: svn git git-svn


    【解决方案1】:

    我就是这样做的。不过,可能还有更简单的方法。

    1. 选择第一个具有您想要处理的标准布局的项目并git svn clone它:

      git svn clone --stdlayout http://sample.com/svn/repository-name/project-name repository-name

    2. 进入repository-name 目录并编辑其.git/config 文件。您也可以使用git-config 命令来执行此操作,但我发现在文本编辑器中更容易。

    3. 您将看到已为您的第一个项目定义的 [svn-remote "svn"] 部分。将svn-remote 重命名为比"svn" 更独特的名称,可能与您的项目名称相同。例如,[svn-remote "project-name"]

    4. 按照第一个项目的模板,为每个项目制作更多 [svn-remote "project-name"] 部分。给每个人一个独特的名字!您需要更改 fetchbranchestags 设置,以便为每个项目使用正确的 Subversion 目录名称。

    5. 完成后,保存文件并运行git svn fetch --fetch-all。其他项目将作为远程存储在您的本地存储库中。

    6. 要在项目之间切换master,请执行git reset --hard other-project-name/trunk,就像切换到任何其他远程Subversion 分支一样。

    【讨论】:

    • git svn rebase 会重新设置所有项目的基础吗? git svn dcommit 会提交所有更改吗?
    • git svn rebase 只是为您获取当前 HEAD 的修订版,所以不,您得到的只是当前项目的当前分支。 git svn dcommit 也一样。要获得每个项目,您需要执行git svn fetch --fetch-all,然后重新设置您当前的 HEAD。不幸的是,我不知道提交所有在其远程之前的本地分支的等效方法,但我确信它可以编写脚本。
    • 这就是我要找的。为简化起见,在第 1 步中,将 -R project1-name --prefix=project1-name/ 添加到 git svn clone 命令中,让初始克隆从一开始就使用正确的 svn-remote 名称和分支前缀。
    • @MarkGardner:但是你必须在项目之间切换,对吧?您不能同时签出所有项目吗?
    • 正确,上面第6步就是这么说的。
    【解决方案2】:

    为了解决同时签出多个项目的问题, git-new-workdir 可用于从同一个 git 存储库中检出多个工作目录,请参阅https://github.com/git/git/blob/master/contrib/workdir/git-new-workdir

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 2013-02-28
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      相关资源
      最近更新 更多