git-push.sh: пуш в Gitea без ввода пароля (креды из .env)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
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