尝试将大型但线性的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)的组合变体。 ......总是出现同样的错误。
感谢您的任何建议!
答案 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
。-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二进制文件也可以工作。