来自svn repo的Git克隆没有trunk目录,并将文件放在git repo的根目录下

时间:2013-09-27 10:47:26

标签: git-svn

我正在从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以这样的方式克隆回购:

GitRepo/
  Files

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

2 个答案:

答案 0 :(得分:3)

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

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

然后打开.git / config文件以及url,fetch,branches和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之间创建了一个链接。

答案 1 :(得分:2)

原来我需要:

[svn-remote "svn"]
    url = https://servername/svn/Repo
    branches = branches/*/*:refs/remotes/branches/*/*
    tags = tags/*/*:refs/remotes/tags/*/*
<。>在.git / config

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

感谢ChrisA指出我正确的方向。