Есть ли способ "постоянно" синхронизировать репозиторий git с SVN? - PullRequest
6 голосов
/ 20 марта 2011

Из того, что я мог найти в Интернете, кажется, что использование git svn не "сохраняется".

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

Есть ли способ обойти эту проблему?

Ответы [ 3 ]

5 голосов
/ 21 марта 2011

Клон, по сути, просто инициализирует новый git-репозиторий, устанавливает origin remote, запускает git fetch и создает ветку на основе HEAD удаленного репозитория.Ни одна из этих операций не смотрит на информацию .git/svn в удаленном хранилище - я думаю, что все, кроме refs, objects и HEAD в каталоге git удаленного хранилища, рассматривается как личное.

Что касается обхода этого, вы всегда можете rsync -a или scp -r удаленный репозиторий вместо его клонирования, что должно работать - все метаданные Subversion должны быть скопированы.

Однако лично я всегдамне показалось менее запутанным просто иметь один клонированный git svn репозиторий, из которого я делаю git svn dcommit, и отправлять обратно в этот репозиторий всякий раз, когда я хочу передать что-либо в Subversion.Тогда эти другие репозитории являются обычными git-репозиториями, и вам не нужно беспокоиться о каких-либо ограничениях git svn, пока вы не вернетесь к клону git svn, и в этот момент вам обычно нужно выполнить некоторую перебазировку ...

1 голос
/ 26 мая 2011

Я считаю, что самый простой способ - git svn init клон с теми же параметрами, которые вы использовали для создания первого клона git-svn, за которым следуют update-ref и dcommit.

Скажите, что вы сделали:

git svn clone -s svn: // сервер / сайт

.. для создания первого репо.Затем вы должны клонировать его:

git clone website website2
cd website2 

Инициализировать git-svn:

git svn init -s svn://server/website

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

git update-ref refs / remotes / trunk refs / remotes / origin / HEAD

А затем просто выполните команду git svn dcommit для перестройки git-svnrevmap.

git svn dcommit

Вы должны увидеть некоторые выходные данные, подобные этому:

git svn dcommit
Rebuilding .git/svn/refs/remotes/trunk/.rev_map.dbae88...
r1 = a9cf429caa11ba5433a6526c2d327de6db2605d1
r2 = 2811ffb78c0a9e0a74208758367044710c1c0159
r4 = 1b787f296aeb98806875ca4f2bde67131720cd57
r9 = 991400ef398fad17ca14253467997d4764561cff
r11 = c5984281dd185d3dbb3bf3fa26f168f34d4e4b53
r13 = aa7678d2f9b5f87152ab09a59ea11a4643e84b6c
r14 = 1c91c959e3bbd2d41dd001a670d01abef29ae1ad
Done rebuilding .git/svn/refs/remotes/trunk/.rev_map.dbae88...
Committing to svn://server/website/trunk ...

Для получения дополнительной информации взгляните на этот пост , особенно пункт 5.

0 голосов
/ 25 марта 2011

GIT-SVN SNIPPETS: http://marcocattai.posterous.com/git-svn-snippets

Надеюсь, они полезны.

...