Клонирование хранилища git -svn с метаданными svn
Я клонировал свой основной репозиторий с помощью git-svn clone svn://url/trunk --stdlayout
. Теперь я хочу клонировать репозиторий с помощью метаданных svn. Так что я смогу git-svn rebase
на главном сервере.
Заметьте, я не хочу нажимать фиксации между двумя git-svn
клонами, я просто хочу добавить все метаданные git-svn
во вновь клонированный репозиторий, чтобы новый клон мог общаться с основным сервер subversion.
Ответы
Ответ 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 отличное решение, но ищу более краткий памятный)