2009-02-20 3 views
154

У меня есть два SVN-проекта, которые используются в другом репозитории SVN с использованием svn:externals.SVN: эквивалент externals в Git?

Как я могу иметь такую ​​же структуру макета репозитория в Git?

+7

У кого-то есть новый ответ на этот вопрос за последние 4 года, или это мир git сегодня? – DougW

+3

@ DougW Да, у меня есть [новый ответ ниже] (http://stackoverflow.com/a/18088319/6309): 'git submodule' теперь может эмулировать' svn: external' (с марта 2013 года). – VonC

ответ

116

Git имеет два подхода, аналогичные, но не совсем эквивалентные СВНА: Externals:

  • Subtree сливается вставить код внешнего проекта в отдельный подкаталог внутри вашей репо. У этого есть detailed process to set up, а затем он очень прост для других пользователей, поскольку он автоматически включается, когда репозиторий проверен или клонирован. Это может быть удобным способом включения зависимости в ваш проект.
    Легко вытащить изменения из другого проекта, но сложно представить изменения обратно. И если другой проект должен слиться с вашим кодом, истории проектов объединяются, и два проекта фактически становятся единым целым.

  • Git submodules (manual) ссылку на конкретный совершить в хранилище другого проекта, так же, как SVN: внешние с -r аргументом. Субмодули просты в настройке, но все пользователи должны управлять подмодулями, которые не включаются автоматически в кассы (или клоны).
    Несмотря на то, что легко отправить изменения обратно в другой проект, это может вызвать проблемы, если репо изменилось. Поэтому, как правило, нецелесообразно передавать изменения обратно в проект, который находится в активной разработке.

+16

FYI, теперь можно указать конкретные изменения с помощью svn: externals сейчас (с 1.5 или 1.6 я верю?) –

+5

Поскольку ссылки в ответе устарели, вот некоторые свежие: [Subtree Merge @ Github: help] (http://help.github.com/subtree-merge/); [Работа с субмодулями @ Github: help] (http://help.github.com/submodules/); [Руководство пользователя Submodules @ Git] (http://schacon.github.com/git/user-manual.html#submodules) – Bart

+6

FYI, git-подмодули могут автоматически управляться и выполняться. git создает файл .gitmodules, который может/должен выполняться так же, как и файл .gitignore. См. [Http://git-scm.com/book/en/Git-Tools-Submodules] для получения дополнительной информации. – mikijov

6

Вы должны смотреть в Git submodules. Это должно позволить почти точно, что вы ищете.

+0

@JonathonReinhart - я сделал редактирование – Sonny

27

Как я упоминаю в «Git submodule new version update», вы можете достичь той же функции внешнего SVN с Git 1.8.2 подмодулями:

git config -f .gitmodules submodule.<path>.branch <branch> 

Это достаточно для подмодуля следовать ветви (как в LATEST фиксации удаленной ветви подмодуля upstream repo). Все, что вам нужно сделать, это:

git submodule update --remote 

Это обновит подмодуль.

Подробнее ... «git submodule tracking latest».

Чтобы преобразовать существующий подмодуль в один отслеживания филиала: увидеть все действия, описанные в «Git submodules: Specify a branch/tag».

+0

Можете ли вы выполнить частичную проверку, например, с помощью 'svn: externals'? – nowox

+0

@nowox Да, у вас может быть разреженная проверка (git 1.7+ https://stackoverflow.com/a/2372044/6309), связанная с подмодулями (https://stackoverflow.com/a/17693008/6309) – VonC

+0

, к сожалению, все редкие ответы, связанные с проверкой, никогда не приводят никакого примера :(Я попытаюсь написать пример Gist для этого ... – nowox

1

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

Смежные вопросы