Push-репозиторий на новый удаленный, один коммит за раз - PullRequest
0 голосов
/ 21 ноября 2018

Я перемещаю репозиторий на новый хост, и по неудачным историческим причинам в нем регистрируется много больших файлов (какао-бобы, изображения)

Хотя я использовал Git BFS для уменьшенияразмером до 940 МБ (от 2,4 ГБ), этого по-прежнему недостаточно, чтобы поддержать толчок к нашему внутреннему развертыванию сервера BitBucket.

Так что я бы хотел выдвигать коммиты один за другим, с определенного момента истории,Хранилище изначально было портировано из SVN и в тот момент сломало дерево Git (есть график, который имеет сплошной разрыв около 5 лет назад)

Это всего 4000 коммитов, так что это разумное количество, чтобы подтолкнутьодин за другим, но я не могу найти хороший способ подтолкнуть от данного реф, а не к данный реф.

Итак, есть лиспособ передать из commit-hash в commit-hash (в моем случае, HEAD) в (новую) удаленную конечную точку?

1 Ответ

0 голосов
/ 21 ноября 2018

Как я и предлагал в комментариях, небольшой скрипт для отправки по одному коммиту за раз может сработать.С точки зрения сервера это выглядело бы так, как если бы вы работали над проектом, постоянно коммитировали и давили.

В 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

Возможно, вы также захотите добавить спящий режим на случай, если сервер будет перегружен всеми этими нажатиями, чтобы дать ему некоторое время для обработки всех этих данных;Я действительно не знаю, делает ли он что-то большее, чем просто сохранение его на диске, он может проиндексировать это или что-то в этом роде.

...