Как включить внешний репозиторий SVN в мой проект Git? - PullRequest
3 голосов
/ 17 марта 2011

Я использую git в качестве программного обеспечения для контроля версий проекта.Мой проект должен использовать стороннюю библиотеку кодов, которая использует SVN для своей программы контроля версий.(В этом случае сторонний код представляет собой PHP-фреймворк с именем Yii , но это не очень важно для вопроса).

Есть ли способ настроить внешнюю зависимость в gitэто может помочь получить код из внешнего SVN хранилища и поддерживать его в актуальном состоянии?

Если бы мой проект использовал SVN, его было бы тривиально настроить, потому что я просто сделал бы:

> svn propset svn:externals yii-1.1.6 https://yii.googlecode.com/svn/tags/1.1.6/framework

... затем, когда бы я ни делал svn checkout (или svn update), я высасывал базу кода yii в локальную папку с именем "yii-1.1.6".Можно ли сделать что-то похожее в git?У кого-нибудь есть пример в публичном репозитории github, который я могу скопировать?Я уверен, что это должно быть общая потребность?

Ответы [ 3 ]

6 голосов
/ 17 марта 2011

Вы можете сделать клон git-svn вашего svn-репо, а затем включить это репо в основное Git-репо, объявив его как подмодуль .

Просто помните: подмодули git не совместимы с подмодулями svn , так как они всегда ссылаются на фиксированную версию. См:

* * 1010 " Почему подмодули git несовместимы с внешними svn? " " подмодуль git svn external "

Однако, как я упоминал в «git submodule отслеживании последних », вы можете начиная с git 1.8.2 (март 2013 г.) отслеживать последние ветки репо через субмодуль .

$ git submodule add -b <branch> <repository> [<path>]
$ git submodule update --remote ...
3 голосов
/ 26 мая 2011

Вы также можете просто извлечь SVN стороннюю библиотеку в свое дерево и затем добавить ее (включая все подкаталоги .svn) в ваш основной проект.

Вид грязный, но также простой и понятный.

Когда вам нужно обновить, просто выполните svn update и git commit.

0 голосов
/ 13 мая 2012

У меня точно такая же ситуация на работе.Я использую SmartGit.У меня есть файл .gitsvnextmodules в корне репозитория Git (зафиксирован в Git).

[submodule "anyString"]
        path = path/to/svn/submodule
        url = https://url.of.svn/repository/blah
        revision = 1234
        branch = branches/branch #or it can be "trunk"
        fetch = trunk:refs/remotes/svn/trunk
        branches = branches/*:refs/remotes/svn/*
        tags = tags/*:refs/remote-tags/svn/*
        remote = svn
        type = dir

SmartGit отображает его как подмодуль, указывающий на «https://url.of.svn/repository/blah/branches/branch" (объединенные значения URL-адресов + ветви) в редакции 1234 (если онане указан, используется версия HEAD). fetch + branch + tags как в спецификации .git / config.

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

[submodule "alternativeSubmodule"]
        path = path/to/svn/submodule
        url = https://url.of.svn/repository/blah/branches/branch
        revision = 1234
        branch = /
        fetch = :refs/remotes/svn/git-svn
        remote = svn
        type = dir

Подробнее в .gitsvnextmodules спецификация .

Для этой конфигурации SmartGit работает сподмодуль аналогично тому, как он работает с обычными подмодулями Git.

...