Как запустить svn update в цикле для импорта коммитов в git? - PullRequest
3 голосов
/ 05 декабря 2011

Текущая настройка
Я запускаю локальный репозиторий 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 externals , поэтому я не могу извлечь из хранилища svn через git-svn .

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Есть еще два варианта, которые вы можете исследовать:

  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.Но эти два проекта кажутся очень актуальными для вашего конкретного случая.Надеюсь, вы найдете мой комментарий полезным.

2 голосов
/ 05 декабря 2011

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

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

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

0 голосов
/ 05 декабря 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 может выдать`.

...