svn: Как разбить большой коммит на несколько маленьких коммитов?
Я создал новый репозиторий для проекта и добавляю в него существующую кодовую базу (llvm). Эта база кода составляет около 18 000 файлов, что делает мой первоначальный коммит много времени. (читай 5 часов)
Есть ли способ разделить этот ОГРОМНЫЙ коммит на несколько меньших коммитов? Так что это может завершиться быстрее?
4 ответа
При заполнении нового хранилища большим количеством файлов я настоятельно рекомендую использовать svn import
команда с сервера вместо фиксации файлов с удаленной машины. Самый простой способ сделать это:
- Соберите код в один архив (используя gzip, 7zip и т. Д.)
- Передайте этот архив на сервер (используя rsync, scp и т. Д.)
- Вход на сервер удаленно
- Распакуйте архив во временный каталог
- использование
svn import
посеять хранилище
Это окажется значительно быстрее в большинстве случаев. Передача одного большого архива по сети, как правило, происходит намного быстрее, чем передача множества небольших файлов, даже если вы не учитываете сжатие. Разница в производительности значительно больше при использовании Windows. В некоторых версиях Subversion имеется ошибка Windows, из-за которой каждый файл открывает и закрывает отдельное сетевое соединение, что добавляет значительные накладные расходы по сравнению с использованием одного сетевого соединения для всей операции.
Существует случай, когда меньшие коммиты могут иметь значение:
- репо обслуживается через http mod_dav_svn Apache
- авторизация на основе пути используется
SVNPathAuthz short_circuit
не установлен
Вы можете разделить коммит, указав отдельные файлы. Однако это вряд ли ускорит процесс: вам все равно придется переместить файлы по сети и записать их на диск. На самом деле, вполне возможно, что он будет работать медленнее, поскольку Subversion необходимо заблокировать репозиторий в какой-то момент обновления (чтобы он мог назначить уникальный номер ревизии).
Я думаю, что вам лучше создать репозиторий на локальном диске, выполнить коммит там (что устраняет сетевые издержки), а затем отправить репозиторий в его конечный пункт назначения.
Работа с более мелкими порциями может не привести к уменьшению общего затраченного времени.
Принимая во внимание запуск процесса, разрыв соединения и накладные расходы на связь, несколько небольших коммитов, вероятно, потребуют больше общего времени, потраченного по сравнению с одной огромной фиксацией.
Вы не указали, какая операционная система используется, но как насчет установки SVN Tortoise и выбора вишни столько файлов, сколько необходимо для каждого коммита? В любом случае, SVN основан на каталогах, поэтому, если ваши 18 000 файлов находятся в отдельных каталогах, то непременно фиксируйте каждый каталог отдельно.
Вот пара ссылок в случае использования командной строки:
http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.add.html
http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.commit.html