Если вы можете использовать символические ссылки (например, вы не используете Windows), то вы можете настроить core
и core.php
следующим образом:
# "base" repository layout:
core/
core.app
# each app repository layout:
base/
core/
core.php
core -> base/core/
core.php -> base/core.php
app/
В каждом репозитории приложений base/
каталог - это или подмодуль, который использует «базовый» репозиторий, или слияние поддеревьев «базового» репозитория.
Оба метода позволят вам начать вносить изменения в базовый код в контексте определенного приложения и позже.перенести эти изменения обратно в основной базовый репозиторий.При использовании подмодулей вы должны быть осторожны, чтобы всегда публиковать новые базовые коммиты, прежде чем публиковать любые коммиты приложений, которые ссылаются на эти новые базовые коммиты (это не проблема при использовании слияний поддеревьев, поскольку каждое приложение «плоское» и фактически имеет свою собственную копиюbase).
Сторонняя команда git subtree выглядит очень хорошим способом управления объединением поддеревьев, если вы решите использовать подмодули.
Поддерево
git init newapp
cd newapp
ln -s base/core
ln -s base/core.php
git add core core.php
git commit -m'point to base (to be added next)'
# hook up base
git subtree add --prefix=base git@git.example.com:me/app_base.git master
mkdir app
# edit app/bar.php
# update base
git subtree pull --prefix=base git@git.example.com:me/app_base.git master
.
|-- .git/
| |-- ...
| `-- ...
|-- app/
| `-- bar.php
|-- base/
| |-- core/
| | `-- foo.php
| `-- core.php
|-- core -> base/core/
`-- core.php -> base/core.php
Подмодуль
git init newapp
cd newapp
ln -s base/core
ln -s base/core.php
git add core core.php
git commit -m'point to base (to be added next)'
# hook up "base"
git submodule add git@git.example.com:me/app_base.git base
git commit -m'incorporate base'
mkdir app
# edit app/bar.php
# update base
(cd base && git fetch origin && git merge origin/master)
git add base
git commit -m'updated base'
.
|-- .git/
| |-- ...
| `-- ...
|-- .gitmodules
|-- app/
| `-- bar.php
|-- base/
| |-- .git/
| | |-- ...
| | `-- ...
| |-- core/
| | `-- foo.php
| `-- core.php
|-- core -> base/core/
`-- core.php -> base/core.php