18

尝试将大型但线性的 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)组合的变体......总是同样的最终错误。

感谢您的任何建议!

4

5 回答 5

13

每次这种情况发生在我身上时,Git 都无法从trunkSubversion 中获取提交:

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

原因:

  • 当它不是标准的(trunk-tags-branches)时,您没有指定 Subversion 布局。专门针对错误-您没有/trunk.
  • 您没有从足够旧的版本中获取至少一个提交到主干(例如,使用-r选项)。
  • 以上结合。
于 2014-05-07T18:19:06.120 回答
12

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

$ 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

如果您仍然遇到问题,您可以尝试通过3 个步骤使用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

于 2012-07-27T19:52:08.750 回答
4

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

问题可能是 SVN 存储库没有主干目录。标准的主干、标签和分支目录在 SVN 中似乎是可选的。但是 git-svn 在迁移时需要知道这一点。

也有可能某些目录存在但名称不同。(例如,主干可以命名为“项目”而不是“主干”,分支可以像往常一样命名为“分支”,标签可能会丢失。或者“主干”可以命名为“主干”。)

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

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

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

  • 如果 SVN 存储库中没有主干、标签或分支目录,只需取消选中克隆对话框的“来自 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 个复选框使其工作。我还有一个情况,主干目录被称为“项目” 而不是“主干”,但分支目录被正常命名,并且没有标签目录。取消选中标签复选框并输入主干目录的名称使这种情况有效。)

于 2013-12-21T23:23:43.370 回答
1

我相信我的 Windows 机器上安装了两组 git 二进制文件:

一种。Git(无论典型的 Windows 安装是什么——忘记我在哪里得到它)。这个在右键单击文件资源管理器上下文菜单中安装“Git Bash Here”选项。

湾。乌龟 Git。

使用“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 二进制文件确实有效。

于 2018-11-15T03:45:25.183 回答
0

也有这个问题。发现 git 命令区分大小写,并且我指定--trunk=trunk/MyLib的是--trunk=trunk.Mylib

我设法以这种方式解决了它。

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

于 2018-07-18T14:54:10.600 回答