Миграция незафиксированных локальных коммитов в новый репозиторий - PullRequest
0 голосов
/ 23 января 2020

У нас проблема с тем, что размер нашего хранилища превысил допустимый предел, и теперь мы заблокированы для pu sh любого локального коммита.

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

Я хочу знать простой способ переместить коммиты, которые мы не могли бы поместить в sh новый репозиторий? так как я не хочу применять каждое изменение вручную.

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Я думаю, что нашел хорошее решение, основанное на этом вопросе

Я сделал следующее:

  1. Добавьте удаленный старыйReRepo, указывающий на старую папку репозитория
git remote add oldRepo <oldRepoPath>/.git
git fetch oldRepo
Повторите следующие действия для каждой ветви, для которой вы хотите перенести свои коммиты
git checkout <yourBranch>
git cherry-pick <OldestUnpushedCommitSHA>..<LatestsUnpushedCommitSHA>
git push
В конце удалите oldRepo remote
git remote remove oldRepo
0 голосов
/ 23 января 2020

Вот иллюстрация того, как переместить необходимые коммиты в новый репо. Возможно, если разработчик не является экспертом git, эксперт должен сделать это для него:

Исходное репо:

m1<-m2<-m3<-m4<--master

Новое репо:

m1a-m2a-m3a-m4a<--master
m1a-m4a have the large files removed

Репо для разработчиков:

origin/master|
             V
m1<-m2<-m3<-m4<-a<-b<-c<--master
a,b,c need to be pushed to the new repo

Шаг 1: Добавить и извлечь новую историю из нового репо

git remote add newRepo <new repo url>
git fetch newRepo

Репо для разработчиков:

origin/master|
             V
m1<-m2<-m3<-m4<-a<-b<-c<--master<--head

m1a<-m2a<-m3A<m4a<--newRepo/master

Шаг 2: Создать новое локальное отделение и cherry-pick или перебазирование новых коммитов в него:

git checkout -b newRepo_master newRepo/master 
git cherry-pick a b c

РЕПО для разработчиков:

origin/master|
             V
m1<-m2<-m3<-m4<-a<-b<-c<--master

  newRepo/master|
                V
m1a<-m2a<-m3A<m4a<-aa<-ba<-ca<--newRepo_master (local branch)<-head

Шаг 3: Pu sh новые коммиты для нового репо на newRepo Главная ветка

git push --set-upstream newRepo master

Шаг 4: (Необязательно, но рекомендуется) Переместить локальную главную ветку

git checkout -B master newRepo_master
git branch -D newRepo_master (delete temporary local branch)

Репо разработчиков:

origin/master|
             V
m1<-m2<-m3<-m4<-a<-b<-c

              newRepo/master|
                            V
m1a<-m2a<-m3A<m4a<-aa<-ba<-ca<--master

Новое репо:

    m1a-m2a-m3a-m4a<-aa<-ba<-ca<--master
0 голосов
/ 23 января 2020

Я хочу знать простой способ переместить коммиты, которые мы не могли бы вставить sh в новый репозиторий? так как я не хочу применять каждое изменение вручную.

коммит всегда сохраняет ссылку на свой родительский коммит. Таким образом, каждый коммит также хранит всю историю проекта вплоть до самого первого коммита. Поэтому, когда вы «пересаживаете» коммит в новый проект, вы также должны перенести всю историю вместе с ним.

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

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

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

...