我有一个带项目结构的svn存储库:
/root/projectA/trunk
/root/projectA/branches
/root/projectA/tags
/root/projectB/trunk
/root/projectB/branches
/root/projectB/tags
我想克隆projectA。我跑的时候:
git svn clone -r <revision number>:HEAD <url>/root/projectA
我没有错误,并且在新的projectA目录下创建了一个git存储库。但是该目录为空。我错过了吗?
答案 0 :(得分:42)
我的问题是使用-s
或--stdlayout
,因为我的svn repo没有标准布局(主干,分支,标签)。
答案 1 :(得分:20)
以下命令完成了这项工作:
git svn clone -r HEAD <url>/root/projectA
答案 2 :(得分:10)
对于包含authors-file
选项的任何人,git svn clone
如果在提供的作者文件中遇到没有查找值的作者,将完全停止。如果您没有注意,git对此的“警告”可能看起来像是repo已完成克隆,并且没有说明该过程未完成。除了.git。
如果添加缺少的作者,然后重新运行完全命令,git将在停止的位置继续。
答案 3 :(得分:2)
我遇到了同样的问题,它通过使用--no-metadata参数解决了。在您的情况下,这将等于
git svn clone -r <revision number>:HEAD <url>/root/projectA --no-metadata
答案 4 :(得分:1)
如果您使用HTTP或HTTPS传输(即您的存储库URL以HTTP [s]开头),则需要提供有效的 SVN 用户名。
git svn clone -s https://svn.example.com/root/projectA --username <SVN username>
-s是--stdlayout
的别名但是,我只需要指定--username选项一次,后续调用没有它。我猜它会缓存用户名。
答案 5 :(得分:1)
有一个类似的问题,执行&#39; git reset - hard HEAD&#39;在目录中似乎创建了文件。
.git / objects非常大,所以我猜这些文件是从svn导入到git中的,它们还没有被检出,或者其他东西。
答案 6 :(得分:1)
在我的情况下,克隆操作没有正确完成。结帐中途git svn clone
会失败。一旦我解决了问题,它就会在克隆操作后自动进行结账 - 不再是空文件夹。
[更新] 以下是我的案例:
尝试git svn clone --preserve-empty-dirs <repo>
对我失败了。在搜索网后,我找到https://www.semitwist.com/articles/article/view/the-better-svn-git-guide,其中部分说:
这部分有点烦人。从v1.7.7开始,Git有一个--preserve-empty-dirs。问题是,该死的东西坏了。如果你试图按原样使用它,整个操作可能会在中途失败。它必须修复。
首先,找到你的git-svn文件:
$ find / 2&gt; / dev / null | grep git-svn
$ find 2&gt; / dev / null / -type f | grep -l&#34;无法剥离&#34;
对我来说,它位于/ usr / libexec / git-core / git-svn。
注意:它不再是git-svn(至少不在git 2.7.0中)。我在/usr/lib/perl5/vendor_perl/5.22/Git/SVN/Fetcher.pm
找到了它。
在您喜欢的编辑器中打开目标文件:
sudo <your-favorite-editor> path/to/file
现在,在这个git-svn文件中,搜索
die "Failed to strip path
。 ([取决于您的git版本],它[可能]位于第4583行附近。将die
更改为
git svn clone --preserve-empty-dirs <repo>
现在应该按预期运行。
答案 7 :(得分:0)
我无法检查这是否有效,但请尝试:
git svn clone --stdlayout <url>/root/projectA/