Как запустить svn update в цикле, чтобы импортировать коммиты в git?

Текущая настройка
Я запускаю локальный репозиторий git параллельно с извлечением svn в той же папке. Всякий раз, когда на сервере svn происходит что-то новое, я запускаю svn update для загрузки коммитов. Затем я git add && git commit вношу весь набор изменений в репозиторий git.

Задача
Я хочу проверить каждую фиксацию отдельно, чтобы иметь возможность git add && git commit внести изменение с помощью соответствующего сообщения фиксации от svn.

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

// svnversion -h
usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]

  Produce a compact 'version number' for the working copy path
  WC_PATH.  TRAIL_URL is the trailing portion of the URL used to
  determine if WC_PATH itself is switched (detection of switches
  within WC_PATH does not rely on TRAIL_URL).  The version number
  is written to standard output.  For example:

    $ svnversion . /repos/svn/trunk
    4168

  The version number will be a single number if the working
  copy is single revision, unmodified, not switched and with
  an URL that matches the TRAIL_URL argument.  If the working
  copy is unusual the version number will be more complex:

   4123:4168     mixed revision working copy
   4168M         modified working copy
   4123S         switched working copy
   4123P         partial working copy, from a sparse checkout
   4123:4168MS   mixed revision, modified, switched working copy

   ...

Примечание
Я был бы рад обсудить с вами идеи по решению этой задачи.
Более поздняя установка также будет включать внешние svn, поэтому я не могу проверить Репозиторий svn через git-svn.


person JJD    schedule 05.12.2011    source источник


Ответы (3)


Есть еще два варианта, которые вы, возможно, захотите изучить:

  1. SmartGit

    SmartGit — это клиент Subversion + Git, что означает, что SmartGit работает с локальным репозиторием Git, но вы можете добавить репозиторий svn в качестве удаленного (аналогично удаленным git). SmartGit намного превосходит git-svn по функциональности. Для получения дополнительной информации см. сравнение SmartGit и git-svn.

    В частности, SmartGit довольно хорошо поддерживает как подмодули git, так и внешние модули svn, поэтому вы даже можете их смешивать.

    SmartGit — это проприетарное программное обеспечение, но оно бесплатно для некоммерческого использования.

  2. SubGit

    SubGit — это серверное решение. Это означает, что вам нужно установить SubGit и подключить его к репозиторию Subversion, что в основном включает два шага:

    1. Выполните первоначальный перевод репозитория SVN через SubGit в только что созданный репозиторий Git.

    2. Установите специальные хуки SubGit, которые срабатывают при каждом git push, чтобы каждое изменение синхронизировалось между репозиториями Git и SVN.

Для получения дополнительной информации вы можете обратиться к документации SubGit.

SubGit — это проприетарное программное обеспечение. SubGit бесплатен для небольших команд до 10 коммиттеров, а также для академических проектов и проектов с открытым исходным кодом. SubGit также доступен как надстройка для Bitbucket Server, чтобы узнать больше, посетите здесь.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:
Я разработчик SubGit и работаю в тесном контакте с разработчиками SmartGit. Но эти два проекта кажутся очень актуальными для вашего конкретного случая. Надеюсь, вам будет полезен мой комментарий.

person vadishev    schedule 06.12.2011
comment
описание функций SmartGit звучит многообещающе: поддержка субмодулей через двунаправленное сопоставление svn:externals. Я попробую. +1 --- Тем не менее, я хотел бы создать сценарий оболочки. - person JJD; 07.12.2011

Что ж, вы можете попробовать git svn, единственной целью которого является одновременная работа с SVN и Git.

Не используйте svn напрямую. Вот все, что вам нужно для настройки и работы с SVN и Git.

http://progit.org/book/ch8-1.html

person havexz    schedule 05.12.2011
comment
Я сам никогда не работал с внешними svn, но вы можете найти то, что ищете здесь - person havexz; 05.12.2011
comment
@havexz Я уже некоторое время использую git-svn тишину. Но на этот раз svn externals замешаны.. - person JJD; 06.12.2011

Однажды я создал «непрерывную интеграцию», например сценарий оболочки, который по сути был

while true
do
  sleep 42
  if svn up | grep '^. ' | egrep '^[ABDUCGE]*'
  # the first grep drops the "At revision xxx" line
  # the second grep searches for the update status codes
  then
    #do something
  fi
done

Но я пишу это только по памяти, возможно, есть какие-то другие сообщения, которые svn up может выдавать`.

person Rudi    schedule 05.12.2011
comment
Но этот запуск svn up и сразу извлекает все изменения — не так ли? - person JJD; 06.12.2011