core/browser → dist/browser, core/server → dist/server. Продукты тянут каждую в свой prefix; ветки производные и руками не правятся. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LeBkZLiQrvdECf5nfgiMz
55 lines
2.7 KiB
Bash
Executable File
55 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
||
# Готовит ветки, из которых продукты тянут ядро через `git subtree pull`.
|
||
#
|
||
# sh scripts/release.sh (или npm run release)
|
||
#
|
||
# У ядра две половины и два адресата, а `git subtree` работает с одним prefix
|
||
# за раз — поэтому каждая половина выделяется в свою ветку с собственной
|
||
# историей:
|
||
#
|
||
# core/browser → ветка dist/browser → <панель>/frontend/src/core
|
||
# core/server → ветка dist/server → <панель>/backend/core
|
||
#
|
||
# `git subtree split` переписывает историю выбранного каталога так, будто он
|
||
# всегда был корнем репозитория. Ветки полностью производные: их не правят
|
||
# руками и не мержат обратно — правится core/, после чего скрипт гоняется снова.
|
||
#
|
||
# Почему subtree, а не копирование: копия затирает любую локальную правку и не
|
||
# оставляет истории, поэтому «ядро в панели разошлось» выясняется постфактум.
|
||
# subtree делает настоящий merge — расхождение видно конфликтом в момент
|
||
# обновления, а правку, сделанную в продукте, можно отдать обратно в ядро
|
||
# (`git subtree push --prefix=<путь> <ядро> <ветка>`).
|
||
set -eu
|
||
|
||
here=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||
root=$(dirname "$here")
|
||
cd "$root"
|
||
|
||
if [ -n "$(git status --porcelain)" ]; then
|
||
echo "release: рабочее дерево грязное — закоммить или спрячь правки" >&2
|
||
git status --short >&2
|
||
exit 1
|
||
fi
|
||
|
||
split() { # split <каталог> <ветка>
|
||
printf 'release: %s → %s\n' "$1" "$2"
|
||
git subtree split --prefix="$1" -b "$2" -q
|
||
printf ' %s\n' "$(git log -1 --format='%h %s' "$2")"
|
||
}
|
||
|
||
split core/browser dist/browser
|
||
split core/server dist/server
|
||
|
||
cat <<TXT
|
||
|
||
Готово. В продукте, где панель лежит подкаталогом:
|
||
|
||
# первый раз
|
||
git subtree add --prefix=<панель>/frontend/src/core $root dist/browser --squash
|
||
git subtree add --prefix=<панель>/backend/core $root dist/server --squash
|
||
|
||
# дальше
|
||
git subtree pull --prefix=<панель>/frontend/src/core $root dist/browser --squash
|
||
git subtree pull --prefix=<панель>/backend/core $root dist/server --squash
|
||
TXT
|