git-push.sh: пуш в Gitea без ввода пароля (креды из .env)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -56,16 +56,16 @@
|
||||
|
||||
## Git
|
||||
|
||||
Репозиторий инициализирован, первый коммит на ветке `main`. Remote: `origin` → Gitea (при необходимости измените URL).
|
||||
Репозиторий на ветке `main`, remote `origin` → Gitea.
|
||||
|
||||
Чтобы отправить код на сервер (после создания репозитория MAX в Gitea при необходимости):
|
||||
**Пуш без ввода пароля:** скрипт **`./git-push.sh`** читает `GITEA_USER`, `GITEA_PASSWORD`, `GITEA_URL` из `.env` и пушит в `origin main`. Пароль в URL после push убирается.
|
||||
|
||||
```bash
|
||||
cd /dev/MAX
|
||||
git push -u origin main
|
||||
./git-push.sh
|
||||
```
|
||||
|
||||
Логин/пароль Gitea запросит при первом push.
|
||||
Можно сказать «запуш» — тогда будет выполнен этот скрипт (с текущими изменениями нужно сначала сделать `git add` и `git commit`).
|
||||
|
||||
## Лицензия / конфиденциальность
|
||||
|
||||
|
||||
48
git-push.sh
Executable file
48
git-push.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# Пуш в Gitea без ввода пароля. Читает GITEA_USER, GITEA_PASSWORD, GITEA_URL из .env.
|
||||
# Использование: ./git-push.sh или ./git-push.sh origin main
|
||||
|
||||
set -e
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
if [[ ! -f .env ]]; then
|
||||
echo "Файл .env не найден." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
GITEA_USER= GITEA_PASSWORD= GITEA_URL=
|
||||
while IFS= read -r line; do
|
||||
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
[[ -z "$line" || "$line" =~ ^# ]] && continue
|
||||
if [[ "$line" =~ ^GITEA_USER=(.*)$ ]]; then
|
||||
GITEA_USER="${BASH_REMATCH[1]}"
|
||||
elif [[ "$line" =~ ^GITEA_PASSWORD=(.*)$ ]]; then
|
||||
GITEA_PASSWORD="${BASH_REMATCH[1]}"
|
||||
elif [[ "$line" =~ ^GITEA_URL=(.*)$ ]]; then
|
||||
GITEA_URL="${BASH_REMATCH[1]}"
|
||||
fi
|
||||
done < .env
|
||||
|
||||
[[ -z "$GITEA_USER" || -z "$GITEA_URL" ]] && { echo "В .env задайте GITEA_USER и GITEA_URL." >&2; exit 1; }
|
||||
GITEA_URL="${GITEA_URL%/}"
|
||||
|
||||
# Путь репо из текущего remote (например negodiy/MAX.git)
|
||||
REMOTE_PATH=$(git remote get-url origin 2>/dev/null | sed -n 's|.*://[^/]*/||p')
|
||||
[[ -z "$REMOTE_PATH" ]] && REMOTE_PATH="negodiy/MAX.git"
|
||||
|
||||
# URL-кодирование пароля (безопасно для спецсимволов)
|
||||
ENCODED_PASS=$(printf '%s' "$GITEA_PASSWORD" | python3 -c "import sys, urllib.parse; print(urllib.parse.quote(sys.stdin.read(), safe=''))" 2>/dev/null || echo "$GITEA_PASSWORD")
|
||||
|
||||
HOST="${GITEA_URL#*://}"
|
||||
ORIGIN_PLAIN="${GITEA_URL}/${REMOTE_PATH}"
|
||||
# Протокол (http или https) + :// + user:pass@ + host/path
|
||||
ORIGIN_WITH_CREDS="${GITEA_URL%%://*}://${GITEA_USER}:${ENCODED_PASS}@${HOST}/${REMOTE_PATH}"
|
||||
|
||||
git remote set-url origin "$ORIGIN_WITH_CREDS"
|
||||
if (($#)); then
|
||||
git push "$@"
|
||||
else
|
||||
git push -u origin main
|
||||
fi
|
||||
git remote set-url origin "$ORIGIN_PLAIN"
|
||||
echo "Готово. Пароль из remote убран."
|
||||
Reference in New Issue
Block a user