将存储库推送到新的远程服务器,一次提交一次

时间:2018-11-21 19:31:23

标签: git bitbucket-server

我正在将存储库移至新主机,由于历史原因,不幸的是,许多大型文件(可可豆荚,图像)都已签入

虽然我已经使用Git BFS将大小从2.4GB减小到940mb,但仍然不足以支持推进我们内部部署BitBucket服务器。

因此,我想从历史的特定角度开始逐一提交。该存储库最初是从SVN移植的,并且在那个时间点破坏了Git树(有一个图在5年前就已经出现了实质性的崩溃)

只有4000次提交,因此一个接一个地推送是相当合理的,但是我找不到从 推送给定引用而不是推送的好方法。 em>给定的参考

那么,有什么方法可以将 commit-hash 推送到 commit-hash (在我的情况下为HEAD)到一个(新的)远程端点?

1 个答案:

答案 0 :(得分:1)

正如我在评论中所建议的,一个小的脚本可以一次推送一次提交。从服务器的角度看,似乎是一个人在从事项目,不断提交和推送。

在bash中,这应该起作用:

for c in $(git log --pretty=format:"%h" --reverse --first-parent origin/master..master); do 
    git push origin $c:master
done

--first-parent是必需的,因此它不会在合并时中断。我在本地尝试过,这就是我得到的:

tobi@TOBIAS-PC:/mnt/d/test/git/r$ git log --oneline --graph --decorate
* d2d3264 (HEAD -> master) asdaskdj
*   9171144 Merge branch 'something'
|\
| * f85e25e (something) opjsdfk
| * 069b6f1 bla
* | f3c54df kjsdaflk
* | ca354e5 kjsdaflk
|/
* 6765170 asdf
* c1873cc (origin/master) initial commit


tobi@TOBIAS-PC:/mnt/d/test/git/r$ git log --pretty=format:"%h" --reverse --first-parent origin/master..master
6765170
ca354e5
f3c54df
9171144
d2d3264


tobi@TOBIAS-PC:/mnt/d/test/git/r$ for c in $(git log --pretty=format:"%h" --reverse --first-parent origin/master..master); do git push origin $c:master; done
Counting objects: 3, done.
Writing objects: 100% (3/3), 235 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../b
   c1873cc..6765170  6765170 -> master
Counting objects: 3, done.
Writing objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../b
   6765170..ca354e5  ca354e5 -> master
Counting objects: 3, done.
Writing objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../b
   ca354e5..f3c54df  f3c54df -> master
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 762 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To ../b
   f3c54df..9171144  9171144 -> master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../b
   9171144..d2d3264  d2d3264 -> master


tobi@TOBIAS-PC:/mnt/d/test/git/r$ git log --oneline --decorate --graph
* d2d3264 (HEAD -> master, origin/master) asdaskdj
*   9171144 Merge branch 'something'
|\
| * f85e25e (something) opjsdfk
| * 069b6f1 bla
* | f3c54df kjsdaflk
* | ca354e5 kjsdaflk
|/
* 6765170 asdf
* c1873cc initial commit

您可能还想添加一个睡眠,以防服务器因所有这些推动而变得不堪重负,从而给它一些时间来处理所有这些数据;除了将其存储在磁盘上之外,我真的不知道它是否还有其他作用,它可能会对其进行索引或其他操作。