Вложенные репозитории git?



могу ли я вложить репозитории git? У меня есть:



 /project_root/
/project_root/my_project
/project_root/third_party_git_repository_used_by_my_project


имеет ли смысл git init / добавить / project_root, чтобы облегчить управление всем локально или мне нужно управлять my_project и сторонним отдельно?

412   6  
git

6 ответов:

вы можете искать функцию Git под названием подмодулей. Эта функция позволяет управлять зависимыми репозиториями, вложенными в основной репозиторий.

Поместите свои сторонние библиотеки в отдельный репозиторий и используйте подмодули, чтобы связать их с основным проектом. Вот проход-через:

http://git-scm.com/book/en/Git-Tools-Submodules

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

просто для полноты:

есть еще одно решение, я бы рекомендовал:поддерево слияния.

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

$ git remote add -f OtherRepository /path/to/that/repo
$ git merge -s ours --no-commit OtherRepository/master
$ git read-tree --prefix=AnyDirectoryToPutItIn/ -u OtherRepository/master
$ git commit -m "Merge OtherRepository project as our subdirectory"`

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

$ git pull -s subtree OtherRepository master

Я использую этот метод уже много лет, он работает : -)

более подробно об этом способе, включая сравнение его с субмодулями, можно найти в этом git howto doc.

git-поддерево поможет вам работать с несколькими проектами в одном дереве и держите отделимую историю для них.

вы могли бы добавить

/project_root/third_party_git_repository_used_by_my_project

до

/project_root/.gitignore

это должно предотвратить включение вложенного РЕПО в родительское РЕПО, и вы можете работать с ними независимо.

но: если пользователь запускает git clean-dfx в Родительском РЕПО, он удалит игнорируемое вложенное РЕПО. Другой способ-это символическая ссылка на папку и игнорировать символическую ссылку. Если вы затем запустите git clean, символическая ссылка будет удалена, но "вложенное" РЕПО останется нетронутым, поскольку оно действительно находится в другом месте.

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

Я бы также проверил версию сторонней библиотеки, которую я использую, в репозиторий проекта, используя его.

Comments

    Ничего не найдено.