我正在将存储库移至新主机,由于历史原因,不幸的是,许多大型文件(可可豆荚,图像)都已签入
虽然我已经使用Git BFS将大小从2.4GB减小到940mb,但仍然不足以支持推进我们内部部署BitBucket服务器。
因此,我想从历史的特定角度开始逐一提交。该存储库最初是从SVN移植的,并且在那个时间点破坏了Git树(有一个图在5年前就已经出现了实质性的崩溃)
只有4000次提交,因此一个接一个地推送是相当合理的,但是我找不到从 推送给定引用而不是推送的好方法。 em>给定的参考
那么,有什么方法可以将 commit-hash 推送到 commit-hash (在我的情况下为HEAD)到一个(新的)远程端点?
答案 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
您可能还想添加一个睡眠,以防服务器因所有这些推动而变得不堪重负,从而给它一些时间来处理所有这些数据;除了将其存储在磁盘上之外,我真的不知道它是否还有其他作用,它可能会对其进行索引或其他操作。