Есть ли способ "настойчиво" синхронизировать репозиторий git с SVN?
Из того, что я мог найти в Интернете, кажется, что использование git svn
не "сохраняется".
Значение, если я git svn clone
репозиторий, затем нажмите, чтобы выполнить мастер и отменить новую копию в отдельной папке, новая копия вообще не знает о svn и не может использоваться для синхронизации с SVN без повторного использования svn clone
.
Есть ли способ решить эту проблему?
Ответы
Ответ 1
Клон по существу просто инициализирует новый репозиторий git, устанавливает удаленный origin
, запускает 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
, после чего вам обычно нужно немного переустановить...
Ответ 2
Я нахожу, что самый простой способ - это git svn init
клон с теми же параметрами, которые вы использовали для создания первого git -svn clone, за которым следуют 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 -svn revmap.
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.
Ответ 3
GIT -SVN SNIPPETS: http://marcocattai.posterous.com/git-svn-snippets
Надеюсь, они полезны.