2

我正在从 svn 存储库中导入代码,其结构如下:

Repo/
  branches/
  tags/

存储库没有主干。

代码保存在子目录 ProjectName 中,所以当它被签出时,我看到

Repo/
  ProjectName/
    Files

当我执行时:

git svn clone -t tags -b branches https://servername/svn/Repo GitRepo

我在 GitRepo 获得了一个 git 存储库,并且所有内容都正确导入,问题是每当我在 git 中检出文件时,它都会将它们检出到 ProjectName 子目录中,例如:

GitRepo/
  ProjectName/
    Files

我的问题是,有没有办法告诉 git svn 以我得到的方式克隆 repo:

GitRepo/
  Files

所以,我要问的是我是否可以告诉 git 使用仅在将分支签出作为存储库的根目录时才出现的文件夹。

4

2 回答 2

3

原来我需要:

[svn-remote "svn"]
    url = https://servername/svn/Repo
    branches = branches/*/*:refs/remotes/branches/*/*
    tags = tags/*/*:refs/remotes/tags/*/*

在 .git/config

分支和标签字符串中的第二个 /* 是我之前遗漏的重要部分。

感谢 ChrisA 为我指明了正确的方向。

于 2013-09-30T09:47:22.280 回答
3

是的,您可以这样做,但您需要手动指定主干、分支和标签位置(因为在您的情况下它们不是标准的)。

像这样创建你的回购:git svn init https://servername/svn/Repo GitRepo

然后打开 .git/config 文件和 url、fetch、branchs 和 tag 行,如下所示:

[svn-remote "svn"]
    url = https://servername/svn/Repo
    fetch = ProjectName:refs/remotes/trunk
    branches = branches/*:refs/remotes/branches/*
    tags = tags/*:refs/remotes/tags/*

这里重要的一行是fetch = ProjectName:refs/remotes/trunk在远程的 ProjectName 和本地的中继之间创建了一个链接。

于 2013-09-27T12:23:53.717 回答