Действительно ли возможно иметь репозиторий Подверсии как подмодуль Мерзавца?

152
задан BuZZ-dEE 26 May 2015 в 20:58
поделиться

4 ответа

Нет. Ваш лучший выбор состоял бы в том, чтобы настроить зеркало репозитория SVN в специализированном репозитории мерзавца.

git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin git@example.com:project.git
git push origin master

Тогда можно добавить репозиторий мерзавца как подмодуль к исходному проекту

cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"

существует одно концептуальное различие между svn:externals и подмодулем мерзавца, который может сбить Вас с толку, если Вы приближаетесь к этому с точки зрения подрывной деятельности. Подмодуль мерзавца привязан к пересмотру, что Вы даете его. Если "восходящие" изменения, то необходимо обновить ссылку подмодуля.

Поэтому, когда мы повторно синхронизируем с восходящей подрывной деятельностью:

cd /path/to/mysvnclone
git svn rebase
git push

... проект мерзавца будет все еще использовать исходный пересмотр, который мы фиксировали ранее. Для обновления ГОЛОВЕ svn необходимо было бы использовать

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
127
ответ дан Zloj 23 November 2019 в 22:12
поделиться

Поршень переписывается для поддержки этого и обратного, плюс существующий URL Подрывной деятельности в Subvresion репозитории и git+git.

Выезд поршень репозиторий GitHub .

, К сожалению, это, кажется, не было выпущено.

0
ответ дан Otto 23 November 2019 в 22:12
поделиться

I just went through this. I'm doing something similar to rq, but slightly different. Я настраиваю один из своих серверов для размещения этих git-клонов необходимых мне репозиториев svn. В моем случае мне нужны только версии, доступные только для чтения, и мне нужно чистое репо на сервере.

На сервере, который я запускаю:

GIT_DIR=<projectname>.git git init
cd <projectname>.git/
GIT_DIR=. git svn init svn://example.com/trunk
GIT_DIR=. git svn fetch
git gc

Это устанавливает мое чистое репо, затем у меня есть скрипт cron для его обновления:

#!/usr/bin/python

import os, glob

GIT_HOME='/var/www/git'

os.chdir(GIT_HOME)
os.environ['GIT_DIR']='.'
gits = glob.glob('*.git')
for git in gits:
  if not os.path.isdir(git):
    continue
  os.chdir(os.path.join(GIT_HOME, git))
  if not os.path.isdir('svn/git-svn'):
    #Not a git-svn repo
    continue

  #Pull in svn updates
  os.system('git svn fetch && git gc --quiet')
  #fix-svn-refs.sh makes all the svn branches/tags pullable
  os.system('fix-svn-refs.sh')
  #Update the master branch
  os.system('git fetch . +svn/git-svn:master && git gc --quiet')`

Для этого также требуется fix-svn-refs.sh из http://www.shatow.net/fix-svn-refs.sh В основном это было вдохновлено: http://gsocblog.jsharpe.net/archives/12

Я не уверен, зачем здесь git gc , но я не смог чтобы выполнить git pull без него.

Итак, после всего этого вы можете использовать подмодуль git, следуя инструкциям rq.

8
ответ дан 23 November 2019 в 22:12
поделиться

В дополнение к тому, что сказал rq, другим методом может быть использование стороннего проекта "externals" (http://nopugs.com/ext-tutorial), который лучше имитирует работу внешних ссылок svn. С помощью externals вы можете отслеживать как git, так и svn репозитории, и это выглядит проще для продвижения ваших изменений вверх по течению в эти репозитории. Однако это требует от участников проекта загрузки и установки отдельного пакета.

Я еще не использовал подмодули или внешние модули; однако я потратил несколько часов на чтение обо всех альтернативах, и похоже, что внешние модули будут лучше подходить для моих нужд. Эти и другие пользовательские методы отлично обсуждаются в главе 15 книги "Контроль версий с помощью Git" Джона Лолигера (http://oreilly.com/catalog/9780596520120), которую я настоятельно рекомендую.

4
ответ дан 23 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: