git svn fetch给出"无效的修订范围" "错误:128"在bfg清理之后

时间:2016-11-10 13:54:03

标签: git git-svn git-filter-branch bfg-repo-cleaner

我在使用git-svn从SVN迁移时有一个Git repo。 我使用git svn fetch来获取SVN的最新提交。我想将回购推送到GitHub,但历史上有一些文件大于100 MB that I had to remove,所以我使用bfg repo cleaner来摆脱它们。

$ java -jar bfg-1.12.14.jar --strip-blobs-bigger-than 100M
...
In total, 10235 object ids were changed. Full details are logged here:
...
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive
...
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
Counting objects: 204963, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (171827/171827), done.
Writing objects: 100% (204963/204963), done.
Total 204963 (delta 91547), reused 106805 (delta 0)

$ git svn fetch -A authors-transform.txt
fatal: Invalid revision range b156a7b66be002c3bf38987ea503f5c852146343 
rev-list --pretty=raw --reverse b156a7b66be002c3bf38987ea503f5c852146343..refs/remotes/git-svn --: command returned error: 128

如何在不重新初始化整个存储库的情况下使其工作,因为我不想在历史记录中再次使用这些文件(它们超过GitHub的限制)?有没有办法重新计算哈希值或使其忽略不匹配?

2 个答案:

答案 0 :(得分:1)

虽然git-svn为Subit提供了相当不错的镜像支持,但是你无法将它与历史重写清理工具(如BFG)结合起来。

如果你需要清理存储库,你应该考虑完成Subversion-to-Git迁移,编写转换和迁移脚本,然后转移到Git-first提交并完全放弃Subversion存储库,此时你我不再关心git-svn了。你会发现擦除Subversion历史非常困难,并且不可能将擦除的Subversion和BFG擦洗的Git相互关联起来。正如您已经观察到的那样,git-svn不会容忍重写。

计划将您的BFG清理作为一次性的练习,根据正在进行的git-svn提取进行编写和测试,但一旦运行,请完全停止使用Subversion并仅使用Git。

答案 1 :(得分:0)

做了类似的事情(用string result = ""; do { result = pwpasst (username, password, "admin", "123"); if(result.size()) break; result = pwpasst (username, password, "root", "456"); if(result.size()) break; result = pwpasst (username, password, "peter", "789"); if(result.size()) break; }while(0); 克隆svn回购后)然后运行

git svn clone --prefix=svn/ ...

从我的repo中删除大文件,我发现我也无法使用> bfg --strip-blobs-bigger-than 20M > git reflog expire --expire=now --all && git gc --prune=now --aggressive git svn fetch从svn repo更新。起初我有与修订范围相关的错误,然后我有与丢失或无效对象相关的错误。为了解决这个问题,我不得不删除git svn rebase文件,以及本地和远程分支上的索引,然后重新生成它们。为我解决问题的完整命令集是:

.revmap.*

我不知道我为未来释放了什么样的龙,但我的回购似乎现在有效。我可以成功地将新的svn更新提取到我的git repo,并将它们合并到本地的其他分支。

请注意,我不会通过git推回到svn,所以我不知道这是否会导致问题。相反,我保留了一个“svn”分支,其中包含从svn repo中提取的纯副本,并且我在git分支“master”上本地工作。然后我使用“master”中的命令行svn将更改推回原来,将它们拉回到我的“svn”分支,然后将它们合并回“master”。