2011-01-11 3 views

ответ

55

Похоже, вы хотите использовать Git submodules.

Git решает эту проблему с использованием подмодулей. Субмодули позволяют хранить репозиторий Git в качестве подкаталога другого репозитория Git. Это позволяет вам клонировать другой репозиторий в свой проект и сохранять свои коммиты отдельно.

+5

Не совсем: он не будет толкать *** все *** содержание репо: только A плюс ссылка на B. Но я не критикую ваш ответ, я торопился писать почти так же, -прочитайте вопрос OP;) – VonC

+0

Это в значительной степени прецедент для подмодулей. REPO-A и REPO-B рассматриваются как git-репозиции сами по себе, со своими собственными фиксациями, происхождением, историей и т. Д. –

+0

, поэтому, если я читаю это право, могу ли я самостоятельно проверить субмодуль-репо полностью за пределами тот, на котором я его нашел? Как я могу использовать уже существующее репо и ссылаться на него как подмодуль в другом проекте? – JohnO

47

Я всегда использовал символические ссылки для поддержки двух отдельных и разных репозиториев.

+3

за то, что кажутся запутанными подмодулями git и git sub-tree, это правильный ответ. –

+0

Это также очень полезно для сборки одного приложения из нескольких удаленных репозиториев. – GeraldScott

+7

Чтобы поддерживать два отдельных и разных репозитория, было бы неплохо сохранить репо B в репо A и просто добавить repo B в repo A '.gitignore'? –

15

Да, вы можете сделать то, что вы просите, с иерархией файлов, которую вы нарисовали. Repo-B будет независимым и не будет знать о Repo-A. Repo-A будет отслеживать все изменения в собственных файлах и файлах Repo-B.

Однако я бы не рекомендовал это делать. Каждый раз, когда вы меняете файлы и фиксируете их в Repo-B, вам придется совершать транзакции в Repo-A. Ветвление в Repo-B будет беспорядочно с Repo-A, и ветвление в Repo-A будет неустойчивым (проблемы с удалением папок и т. Д.). Подмодули - это, безусловно, путь.

+26

Не можете ли вы добавить REPO-B в /REPO-A/.gitignore? – mikkelbreum

+2

@mikkelbreum У меня была такая же идея. В настоящее время мы используем subverion для нашего основного проекта и используем git repo в одной из подпапок. С SVN я просто добавил папку с git repo в свойство svn: ignore, и я спрашивал себя, могу ли я сделать то же самое с git. – 2ndkauboy

+1

Ну, я не понимаю, почему добавление вложенного git-репо в список игнорирования родительского репо не должно работать. Но в то же время у меня такое чувство, что должен быть некоторый улов, о котором я не думал, поскольку этот подход редко можно увидеть, и многие люди препятствуют вложенным репозиториям git. – mikkelbreum

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