должно сработать. Является ли?

ли способ добавить репозиторий Subversion в качестве подмодуля Git в мой репозиторий Git?

Что-то вроде:

git-svn submodule add https://svn.foo.com/svn/proj --stdlayout svn-project

гдеhttps://svn.foo.com/svn/proj указывает на хранилище Subversion.

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

Ответы на вопрос(6)

ГИТ-SVN не поддерживаетSVN: внешние, Но есть два других инструмента, которые могут вам помочь:

SubGit

SubGit это серверное решение, оно обеспечивает доступ Git к хранилищу Subversion и наоборот. Вы можете обратиться кdocumenation для более подробной информации, но в целом использовать SubGit довольно просто:

$ subgit configure --layout auto $SVN_URL $GIT_REPO

Приведенная выше команда обнаружит расположение ветвей в проекте SVN, а затем создаст пустой пустой Git-репозиторий, готовый для зеркалирования проекта SVN. Вас могут попросить ввести учетные данные, если они не сохранены в кэше учетных данных SVN в каталоге ~ / .subversion. Вы также можете настроить$GIT_REPO/subgit/authors.txt сопоставить имена авторов SVN с идентичностями Git.

$ subgit install $GIT_REPO
$ ... let initial translation complete ... 
$ TRANSLATION SUCCESSFUL

На данный момент у вас есть хранилище Subversion, подключенное к недавно созданному хранилищу Git. SubGit переводит ревизию SVN в коммит Git на каждомsvn commit и Git фиксируют ревизию SVN на каждомgit push.

Все, что вам нужно, - это сделать репозиторий Git доступным для коммиттеров. Взгляни наГИТ-HTTP-бэкенд для этого. Затем вы можете добавить созданный Git-репозиторий как обычный субмодуль. SubGit также доступен в качестве дополнения для Bitbucket Server, чтобы узнать больше проверитьВот, Таким образом, нет необходимости использовать какие-либо внешние инструменты, такие какГИТ-SVN или любой другой.

SubGit является проприетарным программным обеспечением, но оно бесплатно для небольших компаний (до 10 коммиттеров), научных проектов и проектов с открытым исходным кодом.

SmartGit

SmartGit заменяетГИТ-SVN на стороне клиента. Более подробную информацию о его функциях вы можете найтиВот.

В частности, SmartGit поддерживает какподмодули git а такжеSVN: внешниеВы можете смешать их в своем хранилище.

SmartGit является проприетарным программным обеспечением, но оно бесплатно для некоммерческого использования.

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

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

Решение Вопроса

и наоборот, плюс существующий URL Subversion в хранилище Subvresion и git + git.

Проверять, выписыватьсяПоршневое хранилище Github.

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

 Henrik02 нояб. 2009 г., 21:20
Поршень не выдержит, когда вам это понадобится больше всего;), поэтому я не рекомендую этого. Плюс больше нет никаких исправлений для поршня.
Решение Вопроса

хранилище git.

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

Затем вы можете добавить репозиторий git в качестве подмодуля в исходный проект.

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 и git submodule есть одно концептуальное отличие, которое может сбить вас с толку, если вы подойдете к этому с точки зрения подрывной деятельности. Подмодуль git привязан к предоставленной вами ревизии. Если «upstream» меняется, вам нужно обновить ссылку на ваш подмодуль.

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

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

... проект git будет по-прежнему использовать оригинальную ревизию, которую мы зафиксировали ранее. Для обновления до SVN HEAD, вам придется использовать

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
 richq22 дек. 2010 г., 10:58
@ xhan да, и я не рекомендую смешивать git-svn и подмодули в одном и том же хранилище. Клон, использующий git-svn, является лишь мостом для создания нативного клона git из репозитория svn.
 xhan22 дек. 2010 г., 14:43
извиняюсь. Я не нашел, чтобы вы использовали две папки, чтобы действовать как подмодули. хороший трюк
 xhan22 дек. 2010 г., 10:22
Вы пробовали эти коды, прежде чем публиковать здесь? подмодули не могут работать должным образом на git svn.
 MarcH26 мар. 2013 г., 10:05
Вероятно, это не значение по умолчанию, но вы можете привязать svn: externals к конкретной ревизии, как это делают подмодули git.
 Clayton Stanley07 янв. 2013 г., 23:39
Хорошая техника. Вам не нужен шаг 'git init --bare' на сервере, прежде чем отправлять туда репозиторий git-svn? Я должен был сделать это.

но немного другое. Я установил один из моих серверов для размещения этих 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.

 Andres Jaan Tack30 июл. 2010 г., 15:20
Можно подумать, что вы могли бы даже сделать это как закрепить коммит.

Ну естьgit-remote-testsvnтак что я думаю что-то вроде

git submodule add testsvn::http://www.telegraphics.com.au/svn/bzquips/trunk/ \
    module/bzquips

должно сработать. Является ли?

Ваш ответ на вопрос