git filter-ветки - нет прогресса в конце - PullRequest
3 голосов
/ 20 сентября 2010

Я только что преобразовал CVS репозиторий 10G (около 120 модулей) в одном репозитории git, используя cvs2git без ошибок на машине RHEL5.Я хотел бы разделить один подкаталог + историю из репозитория и создать новый.(Например: Как я могу переместить один каталог из репозитория git в новый репозиторий при сохранении истории? )

Я пытался:

git filter-branch --subdirectory-filter xxx.model -- --all

, который работаетхорошо, пока последний элемент не обработан - тогда он зависает, используя CPU без какого-либо прогресса.Используя strace, это выглядит примерно так: [неработающая ссылка].strace - если все вилки будут иметь выход> 2.5G - я не знаю, станет ли он больше;Я остановил это.

Что вызывает это странное поведение?Есть ли другой способ создания нового хранилища с подкаталогом + история существующего хранилища?

Ответы [ 3 ]

4 голосов
/ 23 сентября 2010

Операция успешно завершена после нескольких часов работы.Единственная проблема заключалась в том, что нам казалось, что прогресса нет, но это не так.Нет выходных данных.

Установите GIT_TRACE = 1 и повторите команду, после чего отобразится вывод и прогресс.

Возможно, большое количество тегов вызвало замедление операции.

0 голосов
/ 22 сентября 2010

Говорил людям во freenode / # git Я нашел другой способ сделать то же самое, удалив (git rm) все, кроме каталога, который я хочу сохранить.

git filter-branch --prune-empty --index-filter "git ls-files --exclude-standard |grep -v '^foobar'|xargs git rm -r -f --cached --ignore-unmatch" HEAD

Эта операция медленная, но работает (наверное, так). Я не посмотрел на результат из-за аборта.

Кстати: кто-то в #git сказал мне, что эта операция может часто занимать дни, чтобы закончиться, поэтому вполне вероятно, что если бы я ждал (хотя похоже, что прогресса нет / "зависает"), он закончил.

0 голосов
/ 21 сентября 2010

Что бы вы ни делали, потребуется переписать существующий репозиторий git. Так что вы можете просто запустить преобразование снова, разделив проекты сначала , а затем преобразовав проекты по отдельности.

Если два проекта уже находятся в отдельных подкаталогах хранилища CVS, вы можете просто указать cvs2git на один подкаталог, а затем на другой.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...