svn: Как разбить большой коммит на несколько маленьких коммитов?

Я создал новый репозиторий для проекта и добавляю в него существующую кодовую базу (llvm). Эта база кода составляет около 18 000 файлов, что делает мой первоначальный коммит много времени. (читай 5 часов)

Есть ли способ разделить этот ОГРОМНЫЙ коммит на несколько меньших коммитов? Так что это может завершиться быстрее?

4 ответа

Решение

При заполнении нового хранилища большим количеством файлов я настоятельно рекомендую использовать svn import команда с сервера вместо фиксации файлов с удаленной машины. Самый простой способ сделать это:

  1. Соберите код в один архив (используя gzip, 7zip и т. Д.)
  2. Передайте этот архив на сервер (используя rsync, scp и т. Д.)
  3. Вход на сервер удаленно
  4. Распакуйте архив во временный каталог
  5. использование 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

Другие вопросы по тегам