Подтвердить что ты не робот

Клонирование хранилища git -svn с метаданными svn

Я клонировал свой основной репозиторий с помощью git-svn clone svn://url/trunk --stdlayout. Теперь я хочу клонировать репозиторий с помощью метаданных svn. Так что я смогу git-svn rebase на главном сервере.

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

4b9b3361

Ответ 1

В docs. Что вам нужно сделать:

git config --replace-all remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
git fetch

чтобы получить мета-ветки svn. Тогда вы сможете git-svn rebase не извлекать все с нуля.


Цитата из документов:

Исходный git svn-клон может быть вполне (особенно для больших Репозитории Subversion). Если несколько люди (или один человек с несколькими машины) хотят использовать git svn для взаимодействовать с тем же Subversion репозиторий, вы можете сделать начальный gitsvn клон к репозиторию на сервере и каждый человек будет клонировать это хранилище с git клоном:

# Do the initial import on a server
        ssh server "cd /pub && git svn clone http://svn.example.com/project
# Clone locally - make sure the refs/remotes/ space matches the server
        mkdir project
        cd project
        git init
        git remote add origin server:/pub/project
        git config --replace-all remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
        git fetch
# Prevent fetch/pull from remote git server in the future,
# we only want to use git svn for future updates
        git config --remove-section remote.origin
# Create a local branch from one of the branches just fetched
        git checkout -b master FETCH_HEAD
# Initialize 'git svn' locally (be sure to use the same URL and -T/-b/-t options as were used on server)
        git svn init http://svn.example.com/project
# Pull the latest changes from Subversion
        git svn rebase

Ответ 2

Супер-быстрый простой клоун-копий между удаленными машинами

Из docs:

'git clone' не клонирует ветки под refs/remotes/hierarchy или любые метаданные '' w20 > svn '' или config. Таким образом, репозитории, созданные и управляемые с помощью 'git svn', должны использовать 'rsync' для клонирования, если клонирование должно выполняться вообще.

Скопировать-клонирование на том же компьютере можно просто выполнить с помощью cp -rp <src> <dst> и с удаленной машины с помощью scp -rCp <src> <dst>.

Однако удаленный случай может быть очень медленным (10 минут даже в сети Ethernet) из-за большого количества маленьких файлов, которые он должен скопировать.

Используя cpio, вы можете избежать этих накладных расходов, то есть (в зависимости от полосы пропускания) это займет всего несколько секунд (для 100 МБ git repo при соединении 50 Мбит/с).

ssh -C <user>@<host> "cd <path to parent dir of repo>; \
find <repo directory name> -depth -print | cpio -oa" | cpio -imd

Например

ssh -C [email protected] "cd ~alex/repos/; \
find WonderProject -depth -print | cpio -oa" | cpio -imd

выводит новый git repo 'WonderProject' в текущем рабочем каталоге на локальной машине.


(обратите внимание, что в документации, на которую я ссылаюсь, почти отрицается существование раздела @Elazar, поэтому я не дискредитирую @Elazar отличное решение, но ищу более краткий памятный)