为什么git svn无法克隆裸仓库?

13

这个问题与这个或者这个不同。

git svn clone -s --bare https://ctags.svn.sourceforge.net/svnroot/ctags
Unknown option: bare

出了什么问题?

我能用 git svn 克隆一个裸库吗?

我已经阅读了 man git-svn,但找不到克隆裸库的方法。

编辑1

我的 git svn 仓库标签:

git branch -r
  origin/master
  tags/Ctags-5_1
  tags/Ctags-5_1_1
  tags/Ctags-5_2
  tags/Ctags-5_2_1
  tags/Ctags-5_2_2
  tags/Ctags-5_2_3
  tags/Ctags-5_3
  tags/Ctags-5_3_1
  tags/Ctags-5_4
  tags/Ctags-5_5
  tags/Ctags-5_5_1
  tags/Ctags-5_5_2
  tags/Ctags-5_5_3
  tags/Ctags-5_5_4
  tags/Ctags-5_6
  tags/ctags-5.7
  tags/ctags-5.8
  tags/test
  trunk

为什么我无法将这些标签推送到Git存储库中?

2个回答

16

找到了更好的解决方案

$ git svn init https://ctags.svn.sourceforge.net/svnroot/ctags repo-git --stdlayout 
$ #edit  repo-git/.git/config to contain:
[svn-remote "svn"]
        url = https://ctags.svn.sourceforge.net/svnroot/ctags
        fetch = trunk:refs/heads/master
        branches = branches/*:refs/heads/*
        tags = tags/*:refs/tags/*
$ cd repo-git
$ git svn fetch

最后你可以设置core.bare=true。生成的裸仓库将位于repo/.git


为什么我应该将远程改为本地分支?为什么将 tags = tags/:refs/tags/ 更改为 tags = tags/:refs/heads/tags/ 不行? - hugemeow
因为按照定义,Git标签是在refs/tags/*命名空间中的引用。如果你运行"git tag -l"(列出所有标签),Git实际上会列出所有的refs/tags/*引用。我认为这就是你想要的。实际上我不明白你的最终目标是什么(一次性迁移并忘记Subversion还是使用本地的Git与Subversion工作)。如果你只想迁移,这个选项就是你需要的。 - Dmitry Pavlenko
1
只是添加一个工作笔记。很多时候,我们喜欢保持与svn存储库的链接完好无损。我发现创建两个存储库很有帮助。一个存储库用于维护git-svn(这应该是非裸的)。另一个裸存储库将用作所有git子存储库的服务器。git-svn存储库充当git和svn服务器的合并池。 - Yogesh Sajanikar

14

git-svn是一个Perl脚本,如果你打开它,你会发现它根本没有包含单词"bare"。选项"--bare"不受支持。

解决方法是使用简单的"git svn clone"命令,然后将生成的版本库转换为bare格式。


1
不,你应该将所有的 refs/heads/* 更新为相应的 refs/remotes/* 值。 - Dmitry Pavlenko
实际上只有一个分支,但有许多标签,如何将标签推送到远程 Git 存储库?使用 git pull --tag 无法完成,请阅读编辑1。 - hugemeow
我有点困惑:你是想推送还是拉取?是和远程 Git 还是远程 SVN 打交道(据我了解,你是在使用远程 SVN 存储库)。要将标签推到 Git,请运行“git push origin tagname”。要将标签推到 SVN, git-svn 无法帮助。我知道两个将标签从 Git 推送到 SVN 的解决方案:SubGit 和 SmartGit,只有 SmartGit 可以处理远程存储库。 - Dmitry Pavlenko
1
看看我的另一个“更好的解决方案”。行“tags = tags/*:refs/tags/*”将确保将SVN标签转换为Git标签。否则,您可以通过运行“git update-ref refs/tags/tagname refs/remotes/tags/tagname”手动完成每个标签名称(Ctags-5_1、Ctags-5_1_1等)。 - Dmitry Pavlenko
1
先执行 "git svn init ...",然后修改 .git/config 文件,最后按照我写的执行 "git svn fetch"。是的,我同意 git-svn 真的很让人头疼。 - Dmitry Pavlenko
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接