Вложенные репозитории git?
могу ли я вложить репозитории git? У меня есть:
/project_root/
/project_root/my_project
/project_root/third_party_git_repository_used_by_my_project
имеет ли смысл git init / добавить / project_root, чтобы облегчить управление всем локально или мне нужно управлять my_project и сторонним отдельно?
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