git-svn迁移致命:没有有效的SHA1 update-ref refs / heads / master refs / remotes / trunk:command返回错误:128

时间:2012-07-27 18:59:36

标签: git-svn

尝试将大型但线性的svn存储库迁移到git。 svn存储库没有标准布局(主干,分支,标签)......只有一个带有主干的目录。

Ubuntu 12.4 LTS,git 1.7.9.5。

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel/COAWST --authors-file=../users.txt COAWST

...

    D   WPS/metgrid/storage_module.F
    D   WPS/metgrid/process_domain_module.F
W: -empty_dir: WPS/metgrid/gridinfo_module.F
W: -empty_dir: WPS/metgrid/input_module.F
W: -empty_dir: WPS/metgrid/interp_option_module.F
W: -empty_dir: WPS/metgrid/module_date_pack.F
W: -empty_dir: WPS/metgrid/process_domain_module.F
W: -empty_dir: WPS/metgrid/storage_module.F
r635 = c19181c9718e701788b540ed0cc559e4fbddf413 (refs/remotes/git-svn)
    M   Tools/Docs/COAWST_User_Manual.doc
r636 = 1b7849c3e5a20856c9ddb909a5f53ddf8501ad33 (refs/remotes/git-svn)
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 14143, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14039/14039), done.
Writing objects: 100% (14143/14143), done.
Total 14143 (delta 8350), reused 0 (delta 0)
fatal: refs/remotes/trunk: not a valid SHA1
update-ref refs/heads/master refs/remotes/trunk: command returned error: 128

我尝试过使用-s,-t Trunk,-t COAWST, - preserve-empty-dirs(我想做的), - no-meta-data(每个Pro Git)的组合变体。 ......总是出现同样的错误。

感谢您的任何建议!

5 个答案:

答案 0 :(得分:10)

我认为你运行正确的命令。或者你可以运行

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel --trunk=COAWST --authors-file=../users.txt COAWST

git-svn几乎完成了每个案例的工作。它唯一要做的就是将'master'设置为指向你的主干。由于某些错误,它会尝试将其设置为错误的值,但您可以使用

手动执行它
$ git update-ref refs/heads/master refs/remotes/git-svn

如果您仍然遇到问题,可以尝试使用SubGit分三个步骤转换存储库:

$ subgit configure path/to/svn/repository
#edit path/to/svn/repository/conf/subgit.conf to set trunk = COAWST:refs/heads/master and authorsFile = path/to/users.txt
$ subgit install path/to/svn/repository

转换后的存储库位于path / to / svn / repository / conf / .git

答案 1 :(得分:10)

每次发生这种情况时,Git根本无法在Subversion中从trunk获取提交:

fatal: refs/remotes/trunk: not a valid SHA1

<强>理由:

  • 当它不是标准(trunk-tags-branches)时,您没有指定Subversion布局。特别针对错误 - 您没有/trunk
  • 您没有从足够长的修订版中获取至少一个提交到trunk的提交(例如,使用-r选项)。
  • 以上的组合。

答案 2 :(得分:1)

我今天遇到了同样的问题。

问题可能是SVN存储库没有trunk目录。标准的trunk,tags和branches目录在SVN中似乎是可选的。但git-svn在迁移时需要了解这一点。

某些目录也可能存在,但命名方式不同。 (例如,trunk可以命名为“project”而不是“trunk”,分支可以像往常一样命名为“branches”,标签可能会丢失。或者“trunk”可以命名为“Trunk”。)

  • 如果SVN仓库中没有这些标准目录,并且所有内容都只是放在仓库的根目录中, 解决方案就是不要尝试克隆标准的svn目录。 只需克隆根。

  • 如果它们存在(或其中一些存在),但名称不同, 必须告诉git-svn这些名字。

我使用 Tortoise Git 从SVN迁移到GIT。 在TortoiseGit中,它是通过从svn存储库(yep!)克隆并检查“From SVN Repository”复选框来完成的。

  • 如果SVN仓库中没有中继,标签或分支目录, 只需取消选中“trunk”,“tags”和“branches”复选框 克隆对话框中的“来自SVN存储库”部分。

  • 如果标准目录在那里,但命名方式不同于 正常,请检查它们,但在文本框中写下使用过的名称 在他们旁边。

    (从命令行可以使用-T,-t完成 和-b开关。看到 http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-to-git-preserving-branches-and-tags-3/ 在“非标准SVN布局”下。)

(那是我遇到的两个案例 - 可能存在更复杂的案例。我有几个SVN存储库,没有主干,标签或分支目录,取消选中这3个复选框使其工作。我还有一个案例,主干目录是称为“项目”而不是“主干”,但分支目录正常命名,没有标签目录。取消选中标签复选框并输入主干目录的名称使该案例有效。)

答案 3 :(得分:0)

也有问题。 知道git命令区分大小写,并且我指定的是--trunk=trunk/MyLib而不是--trunk=trunk.Mylib

我设法解决了这个问题。

希望这可以帮助某人...

答案 4 :(得分:0)

我相信我在Windows计算机上安装了两组git二进制文件:

a。 Git(无论典型的Windows安装是什么,忘记了我的安装位置)。这将在右键单击文件浏览器上下文菜单上安装“此处Git Bash”选项。

b。乌龟龟。

使用“ Git Bash”(即Git)克隆非标准svn存储库时收到错误。

然后,我尝试使用TortoiseGit(如此处的一张海报所述),并且没有错误。

但是,TortoiseGit显示了它正在使用的实际命令行,我对此感到怀疑,因为该命令行与我未成功使用Git的命令行相同。

然后我再次尝试了“ Git Bash”,并提供了我认为是TortoiseGit git二进制文件的完整路径,即:

"C:/Program Files/Git/bin/git.exe" svn clone svn://localhost/dtapublic tempgitrepo

效果很好。

但是,

git svn clone svn://localhost/dtapublic tempgitrepo

导致错误。

我认为可能有两个git二进制文件在起作用,这就是为什么TortoiseGit用一张海报解决了这个问题的原因。带有“ Git”的git二进制文件不适用于非标准svn存储库,带有“ TortoiseGit”的git二进制文件也可以工作。