2016-11-10 38 views
1

У меня есть Git repo при переходе из SVN с git-svn. Я использовал git svn fetch, чтобы получить последние данные из SVN. Я хотел нажать репо на GitHub, но в истории было несколько файлов размером более 100 МБ that I had to remove, поэтому я использовал bfg repo cleaner, чтобы избавиться от них.git svn fetch дает «Недопустимый диапазон изменений» «Ошибка: 128» после очистки bfg

$ java -jar bfg-1.12.14.jar --strip-blobs-bigger-than 100M 
... 
In total, 10235 object ids were changed. Full details are logged here: 
... 
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive 
... 
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive 
Counting objects: 204963, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (171827/171827), done. 
Writing objects: 100% (204963/204963), done. 
Total 204963 (delta 91547), reused 106805 (delta 0) 

$ git svn fetch -A authors-transform.txt 
fatal: Invalid revision range b156a7b66be002c3bf38987ea503f5c852146343 
rev-list --pretty=raw --reverse b156a7b66be002c3bf38987ea503f5c852146343..refs/remotes/git-svn --: command returned error: 128 

Как я могу заставить его работать без Повторная инициализация весь репозиторий, так как я не хочу, чтобы эти файлы снова в истории (они превышают предел GitHub в)? Любой способ пересчитать хэш или заставить его игнорировать несоответствие?

ответ

1

В то время как git-svn обеспечивает довольно приличную поддержку зеркалирования Subversion для Git, вы не сможете комбинировать это с инструментом очистки от перезаписи, например BFG.

Если вам необходимо очистить репозиторий, вам следует подумать о завершении миграции Subversion-to-Git, написании сценариев конверсии и миграции и переходе на Git-first, коммиты и отказ от репозитория Subversion, и в этот момент вам больше не понравится git-svn. Вам будет очень сложно счистить историю Subversion, и невозможно будет связать сглаженную Subversion и BFG-scrubbed Git с каждым другим. Как вы уже заметили, git-svn не собирается переносить переписывание.

Планируйте очистку BFG как одноразовое упражнение, выполнив сценарий и протестировав его текущие git-svn, но после запуска полностью прекратите использование Subversion и используйте Git.

0

После делать что-то подобное для вас (клонированием Svn репо с git svn clone --prefix=svn/ ...), а затем работает

> bfg --strip-blobs-bigger-than 20M 
> git reflog expire --expire=now --all && git gc --prune=now --aggressive 

удалить большие файлы из моего репозитория, я обнаружил, что я также не мог обновить из SVN репо с либо git svn fetch или git svn rebase. Сначала у меня были ошибки, связанные с диапазоном ревизий, тогда у меня были ошибки, связанные с отсутствующими или недопустимыми объектами. Чтобы исправить это, мне пришлось удалить файл .revmap.*, а также индекс как в локальной, так и в удаленной ветвях, а затем восстановить их. Полный набор команд, которые исправили проблему для меня были:

> git fsck --full 
> git prune 
> rm .git/svn/refs/remotes/svn/trunk/.rev_map.* 
> rm .git/index 
> rm .git/svn/refs/remotes/svn/trunk/index 
> git svn rebase 

Я понятия не имею, какие дракон я развязал на будущее, но мой репо, кажется, работает в настоящее время. Я могу успешно перенести новые обновления svn в my git repo и объединить их в другие ветви локально.

Обратите внимание, что я не возвращаюсь к svn через git, поэтому я не знаю, вызовут ли это проблемы. Вместо этого я сохраняю ветвь «svn», содержащую чистую копию, вытащенную из репозитория svn, и я работаю локально в git на ветке «master». Затем я выставляю изменения с помощью командной строки svn из «master», вытаскивая их обратно в ветвь «svn», а затем объединяет их обратно в «master».

 Смежные вопросы

  • Нет связанных вопросов^_^