使用git svn的不完整的svn提交历史记录

时间:2019-04-23 15:45:44

标签: git git-svn

我们正在将svn分支迁移到git。

我们无法从git repo中的svn获取完整的提交历史记录,因此需要帮助才能正确获取完整的历史记录。

git svn clone对我们不起作用,因为它一直失败

“警告:有太多无法到达的松散对象;请运行'git prune'删除它们。”

我们的仓库大约有r250000次提交

我们在https://abc.xyz.com/svn/app1有一个回购根URL

我们有一个分支A,其中包含文件夹(URL:https://abc.xyz.com/svn/app1/proj1/A/trunk

tp

src

jrp

我们创建了分支B(从r12000的分支A)包含文件夹(URL:https://abc.xyz.com/svn/app1/path/to/proj2/B/trunk

tp

src

jrp

我们想将svn分支B迁移到git作为git的主干

我们使用非标准的SVN布局

我们使用git-svn版本2.18.0(svn 1.7.14)

我们不使用svn2git

我们在做什么错了?

第一次运行

我们尝试了

cd svngitTrunkrepo
git config gc.pruneExpire now
git config gc.auto 1
git svn init  https://abc.xyz.com/svn/app1 -T path/to/proj2/B/trunk --prefix svn/ svngitTrunkrepo
git svn fetch

error: invalid object 100644 xxxyyyzzz111222333444555666 for 'src/to/file.java'
fatal: git-write-tree: error building trees
write-tree: command returned error: 128

第二次跑

我们尝试了

cd svngitTrunkrepo2
git config gc.pruneExpire now
git config gc.worktreePruneExpire now
git config gc.reflogExpire now
git config gc.reflogExpireUnreachable now
git config gc.auto 1
git svn init https://abc.xyz.com/svn/app1 -T path/to/proj2/B/trunk --prefix svn/ svngitTrunkrepo2
git svn fetch -r 1:50000
git gc --aggressive
git svn fetch -r 50000:66813
git gc --aggressive
git svn fetch -r 66813:76813
git gc --aggressive
(continue)
git svn fetch -r 216813:220000
git gc --aggressive

运行结果显示

(continue)
r218237 = b9e6e8ee272fdaa2611f6c3e9ccc05d412ecdf48 (refs/remotes/svn/trunk@218238)
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
Found branch parent: (refs/remotes/svn/trunk) b9e6e8ee272fdaa2611f6c3e9ccc05d412ecdf48
Following parent with do_switch
Successfully followed parent
r218239 = d4af17ac206cb4650f1aa0490dfdb4e1c00a5c16 (refs/remotes/svn/trunk)
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
Checking out files: 100% (63293/63293), done.
Checked out HEAD:
  https://abc.xyz.com/svn/app1/path/to/proj2/B/trunk r218239
fatal: gc is already running on machine 'ppplwxzdw' pid 21345 (use --force if not)

然后我们检查提交历史记录

svngitTrunkrepo2]# git log -v

但是我们只看到29个修订版本,而不是预期的198312版本

1 个答案:

答案 0 :(得分:0)

消息

fatal: gc is already running on machine 'slc15zdw' pid 21345 (use --force if not)

表示git gc尝试两次启动。同时,您对git gc进行了非常奇怪的设置-尤其是git config gc.auto 1意味着对于每个松散的对象git gc都会尝试启动。非常适合上述fatal消息。

尝试在没有git svn参数的情况下运行gc.* -我认为它们弊大于利。