【发布时间】:2011-04-01 02:32:54
【问题描述】:
我有一个 SVN 存储库,其布局类似于
项目1/主干
项目1/分支机构
项目1/标签
项目2/主干
项目2/分支机构
项目2/标签
等等
出于多种原因,我想要一个 git-svn 存储库,它允许我处理这些项目中的任何一个,并一次从所有项目中获取/dcommit。这种事情可能吗?我知道我可以只用 git-svn 克隆整个东西而不指定分支、标签和主干,但是这样我就会失去很多使用 git 的优势。
【问题讨论】:
我有一个 SVN 存储库,其布局类似于
项目1/主干
项目1/分支机构
项目1/标签
项目2/主干
项目2/分支机构
项目2/标签
等等
出于多种原因,我想要一个 git-svn 存储库,它允许我处理这些项目中的任何一个,并一次从所有项目中获取/dcommit。这种事情可能吗?我知道我可以只用 git-svn 克隆整个东西而不指定分支、标签和主干,但是这样我就会失去很多使用 git 的优势。
【问题讨论】:
我就是这样做的。不过,可能还有更简单的方法。
选择第一个具有您想要处理的标准布局的项目并git svn clone它:
git svn clone --stdlayout http://sample.com/svn/repository-name/project-name repository-name
进入repository-name 目录并编辑其.git/config 文件。您也可以使用git-config 命令来执行此操作,但我发现在文本编辑器中更容易。
您将看到已为您的第一个项目定义的 [svn-remote "svn"] 部分。将svn-remote 重命名为比"svn" 更独特的名称,可能与您的项目名称相同。例如,[svn-remote "project-name"]。
按照第一个项目的模板,为每个项目制作更多 [svn-remote "project-name"] 部分。给每个人一个独特的名字!您需要更改 fetch、branches 和 tags 设置,以便为每个项目使用正确的 Subversion 目录名称。
完成后,保存文件并运行git svn fetch --fetch-all。其他项目将作为远程存储在您的本地存储库中。
要在项目之间切换master,请执行git reset --hard other-project-name/trunk,就像切换到任何其他远程Subversion 分支一样。
【讨论】:
git svn rebase 只是为您获取当前 HEAD 的修订版,所以不,您得到的只是当前项目的当前分支。 git svn dcommit 也一样。要获得每个项目,您需要执行git svn fetch --fetch-all,然后重新设置您当前的 HEAD。不幸的是,我不知道提交所有在其远程之前的本地分支的等效方法,但我确信它可以编写脚本。
为了解决同时签出多个项目的问题, git-new-workdir 可用于从同一个 git 存储库中检出多个工作目录,请参阅https://github.com/git/git/blob/master/contrib/workdir/git-new-workdir
【讨论】: