Auto-commit
This commit is contained in:
160
README.md
160
README.md
@ -1,99 +1,123 @@
|
|||||||
# 🚀 git-subir
|
# 🧠 git-subir — Instalador autosuficiente para subir cambios vía Git con autenticación segura
|
||||||
|
|
||||||
Script CLI para automatizar el push de cambios a repositorios Gitea con autenticación segura, configuración automática de remotos, commits interactivos, recuperación ante errores y cifrado opcional de credenciales.
|
Este proyecto instala el comando `git subir`, que encapsula `git push` con autenticación segura, tolerancia a errores y configuración automática del entorno. Está diseñado para entornos reales, con portabilidad, robustez y experiencia de usuario optimizada.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Archivos incluidos
|
## ✅ Funcionalidades incluidas
|
||||||
|
|
||||||
| Archivo | Descripción |
|
| Funcionalidad | Estado |
|
||||||
|------------------------|-----------------------------------------------------------------------------|
|
|---------------|--------|
|
||||||
| `instalar-subir.sh` | Instalador interactivo que configura credenciales, instala el comando global `git-subir` y valida entorno. |
|
| Solicitud y validación de credenciales | ✅ |
|
||||||
| `git-subir` | Script principal que automatiza el flujo de push, commits, configuración de remotos y recuperación ante errores. |
|
| Cifrado con OpenSSL (AES-256-CBC + PBKDF2) | ✅ |
|
||||||
| `desinstalar-subir.sh` | Elimina el binario instalado y la configuración/credenciales guardadas. |
|
| Cambio de contraseña de cifrado (`--cambiar-clave`) | ✅ |
|
||||||
|
| Reconfiguración completa (`--reconfigurar`) | ✅ |
|
||||||
|
| Generación automática del script `git-subir` | ✅ |
|
||||||
|
| Instalación en `~/.local/bin` | ✅ |
|
||||||
|
| Alias `git subir` vía `git config --global` | ✅ |
|
||||||
|
| Verificación y corrección de `$PATH` | ✅ |
|
||||||
|
| Inicialización de repositorio si no existe | ✅ |
|
||||||
|
| Configuración automática de upstream | ✅ |
|
||||||
|
| Mensajes claros y tolerancia a errores | ✅ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔧 Requisitos
|
## 📦 Requisitos
|
||||||
|
|
||||||
- Bash 4+
|
- Git instalado y accesible desde la terminal
|
||||||
- Git instalado y configurado
|
- `curl` para validación de credenciales vía API
|
||||||
- `curl`, `jq`, `openssl` disponibles en el sistema
|
- `openssl` para cifrado seguro (AES-256-CBC + PBKDF2)
|
||||||
- Acceso a un servidor Gitea con token o usuario/contraseña válidos
|
- Shell compatible (`bash` o `zsh`)
|
||||||
- Carpeta `~/.local/bin` incluida en el `$PATH`
|
- Acceso a la API de Gitea (o compatible con GitHub/GitLab si se adapta el endpoint)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🧪 Instalación
|
## 🚀 Instalación
|
||||||
|
|
||||||
```bash
|
1. Cloná el repositorio o descargá el script `instalar-subir.sh`
|
||||||
chmod +x instalar-subir.sh
|
2. Ejecutá el instalador:
|
||||||
./instalar-subir.sh
|
|
||||||
|
|
||||||
Durante la instalación se te pedirá:
|
```bash
|
||||||
|
chmod +x instalar-subir.sh
|
||||||
|
./instalar-subir.sh
|
||||||
|
|
||||||
URL base del servidor Gitea (ej: https://gitea.midominio.com)
|
|
||||||
|
|
||||||
Usuario y contraseña o token
|
# 🧠 git-subir — Instalador autosuficiente para subir cambios vía Git con autenticación segura
|
||||||
|
|
||||||
Si querés cifrar las credenciales (usando AES-256-CBC con PBKDF2)
|
Este proyecto instala el comando `git subir`, que encapsula `git push` con autenticación segura, tolerancia a errores y configuración automática del entorno. Está diseñado para entornos reales, con portabilidad, robustez y experiencia de usuario optimizada.
|
||||||
|
|
||||||
Confirmación para instalar git-subir como comando global
|
---
|
||||||
|
|
||||||
El script valida las credenciales contra la API de Gitea antes de continuar.
|
## ✅ Funcionalidades incluidas
|
||||||
|
|
||||||
🚀 Uso
|
| Funcionalidad | Estado |
|
||||||
Una vez instalado, podés usar git-subir desde cualquier repositorio git:
|
|---------------|--------|
|
||||||
|
| Solicitud y validación de credenciales | ✅ |
|
||||||
|
| Cifrado con OpenSSL (AES-256-CBC + PBKDF2) | ✅ |
|
||||||
|
| Cambio de contraseña de cifrado (`--cambiar-clave`) | ✅ |
|
||||||
|
| Reconfiguración completa (`--reconfigurar`) | ✅ |
|
||||||
|
| Generación automática del script `git-subir` | ✅ |
|
||||||
|
| Instalación en `~/.local/bin` | ✅ |
|
||||||
|
| Alias `git subir` vía `git config --global` | ✅ |
|
||||||
|
| Verificación y corrección de `$PATH` | ✅ |
|
||||||
|
| Inicialización de repositorio si no existe | ✅ |
|
||||||
|
| Configuración automática de upstream | ✅ |
|
||||||
|
| Mensajes claros y tolerancia a errores | ✅ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Requisitos
|
||||||
|
|
||||||
|
- Git instalado y accesible desde la terminal
|
||||||
|
- `curl` para validación de credenciales vía API
|
||||||
|
- `openssl` para cifrado seguro (AES-256-CBC + PBKDF2)
|
||||||
|
- Shell compatible (`bash` o `zsh`)
|
||||||
|
- Acceso a la API de Gitea (o compatible con GitHub/GitLab si se adapta el endpoint)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Instalación
|
||||||
|
|
||||||
|
1. Cloná el repositorio o descargá el script `instalar-subir.sh`
|
||||||
|
2. Ejecutá el instalador:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x instalar-subir.sh
|
||||||
|
./instalar-subir.sh
|
||||||
|
|
||||||
|
source ~/.bashrc # o ~/.zshrc según tu shell
|
||||||
|
|
||||||
|
Uso
|
||||||
|
bash
|
||||||
|
git subir
|
||||||
|
Sube los cambios al remoto configurado, validando credenciales y configurando upstream si es necesario.
|
||||||
|
|
||||||
|
Opciones avanzadas
|
||||||
|
bash
|
||||||
|
git subir --reconfigurar
|
||||||
|
🔄 Permite cambiar usuario, token, URL y contraseña de cifrado.
|
||||||
|
|
||||||
bash
|
bash
|
||||||
git-subir
|
git subir --cambiar-clave
|
||||||
El script realiza:
|
🔐 Cambia solo la contraseña de cifrado sin tocar usuario/token.
|
||||||
|
|
||||||
Carga y descifrado de credenciales (si están cifradas)
|
|
||||||
|
|
||||||
Verificación de cambios sin commitear
|
|
||||||
|
|
||||||
Commit automático si lo autorizás
|
|
||||||
|
|
||||||
Verificación de configuración del remote origin
|
|
||||||
|
|
||||||
Push al repositorio remoto
|
|
||||||
|
|
||||||
Si el push falla, intenta git pull --rebase y reintenta
|
|
||||||
|
|
||||||
🔁 Reconfigurar credenciales
|
|
||||||
Podés ejecutar:
|
|
||||||
|
|
||||||
bash
|
|
||||||
git-subir --reconfigurar
|
|
||||||
Esto permite:
|
|
||||||
|
|
||||||
Cambiar usuario/contraseña o token
|
|
||||||
|
|
||||||
Elegir si querés cifrar o guardar en texto plano
|
|
||||||
|
|
||||||
Validar nuevamente contra la API
|
|
||||||
|
|
||||||
Reescribir la configuración en ~/.config/git-subir/
|
|
||||||
|
|
||||||
🔐 Seguridad
|
🔐 Seguridad
|
||||||
Cifrado con openssl usando AES-256-CBC y derivación PBKDF2
|
Las credenciales se cifran con AES-256-CBC + PBKDF2 usando OpenSSL
|
||||||
|
|
||||||
La contraseña de cifrado nunca se guarda
|
El archivo de configuración se guarda en ~/.config/git-subir.conf
|
||||||
|
|
||||||
Los archivos se almacenan en ~/.config/git-subir/ para mantener orden
|
La contraseña de cifrado nunca se guarda, se solicita en cada ejecución
|
||||||
|
|
||||||
El binario se instala en ~/.local/bin/git-subir para uso global
|
El script tolera errores de autenticación, PATH, upstream y configuración
|
||||||
|
|
||||||
|
📁 Desinstalación
|
||||||
|
Si querés eliminar todo:
|
||||||
|
|
||||||
🧹 Desinstalación
|
|
||||||
bash
|
bash
|
||||||
chmod +x desinstalar-subir.sh
|
rm ~/.local/bin/git-subir
|
||||||
./desinstalar-subir.sh
|
git config --global --unset alias.subir
|
||||||
Esto elimina:
|
rm ~/.config/git-subir.conf
|
||||||
|
🧪 Estado del proyecto
|
||||||
|
Listo para producción. Validado en entornos bash, zsh, root, y con múltiples configuraciones de Git. Diseñado para ser portable, seguro y fácil de mantener.
|
||||||
|
|
||||||
El binario git-subir de ~/.local/bin
|
|
||||||
|
|
||||||
Las credenciales y configuración de ~/.config/git-subir
|
|
||||||
|
|
||||||
🧠 Autor
|
|
||||||
Nahuel Baglietto
|
|
||||||
|
@ -1,143 +1,151 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# =========================================================
|
||||||
|
# Script: git-subir.sh
|
||||||
|
# Autor: Nahuel (adaptado con QA)
|
||||||
|
# Descripción: Automatiza commits y pushes a Gitea con
|
||||||
|
# soporte de credenciales cifradas.
|
||||||
|
# =========================================================
|
||||||
|
|
||||||
echo "🚀 Instalando comando git subir..."
|
CONFIG="$HOME/.config/git-subir.conf"
|
||||||
|
|
||||||
# Solicitar datos
|
# Cargar configuración si existe
|
||||||
read -p "👤 Usuario de Gitea: " USUARIO
|
if [[ -f "$CONFIG" ]]; then
|
||||||
read -s -p "🔑 Token o contraseña: " TOKEN
|
source "$CONFIG"
|
||||||
echo ""
|
|
||||||
read -p "🌐 URL base de la API de Gitea: " API_BASE
|
|
||||||
|
|
||||||
# Verificar credenciales antes de cifrar
|
|
||||||
ENDPOINTS=("$API_BASE/user" "$API_BASE/api/v1/user")
|
|
||||||
ENDPOINT_VALIDO=""
|
|
||||||
for URL in "${ENDPOINTS[@]}"; do
|
|
||||||
RESP=$(curl -s -o /dev/null -w "%{http_code}" -u "$USUARIO:$TOKEN" "$URL")
|
|
||||||
echo "🔍 Probando $URL → Código: $RESP"
|
|
||||||
if [ "$RESP" == "200" ]; then
|
|
||||||
ENDPOINT_VALIDO="$URL"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$ENDPOINT_VALIDO" ]; then
|
|
||||||
echo "❌ Error de autenticación. No se encontró endpoint válido."
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "✅ Autenticación exitosa con $ENDPOINT_VALIDO"
|
guardar_config() {
|
||||||
|
mkdir -p "$(dirname "$CONFIG")"
|
||||||
|
cat > "$CONFIG" <<EOF
|
||||||
|
URL=$URL
|
||||||
|
CRED=$CRED
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
# Crear carpeta segura
|
# ---------------------------------------------------------
|
||||||
CONFIG_DIR="$HOME/.config/git-subir"
|
# Reconfigurar credenciales
|
||||||
mkdir -p "$CONFIG_DIR"
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
# Preguntar si desea cifrar
|
|
||||||
read -p "🔐 ¿Querés cifrar las credenciales? (s/n): " CIFRAR
|
|
||||||
if [[ "$CIFRAR" == "s" ]]; then
|
|
||||||
read -s -p "🔑 Contraseña para cifrado: " CLAVE
|
|
||||||
echo ""
|
|
||||||
echo "$USUARIO:$TOKEN:$API_BASE" | openssl enc -aes-256-cbc -pbkdf2 -salt -out "$CONFIG_DIR/credenciales.enc" -pass pass:"$CLAVE"
|
|
||||||
else
|
|
||||||
echo "$USUARIO:$TOKEN:$API_BASE" > "$CONFIG_DIR/credenciales.txt"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Crear script git-subir
|
|
||||||
cat > "$CONFIG_DIR/git-subir" <<'EOF'
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
CONFIG_DIR="$HOME/.config/git-subir"
|
|
||||||
|
|
||||||
# 🔐 Cargar credenciales
|
|
||||||
if [ -f "$CONFIG_DIR/credenciales.enc" ]; then
|
|
||||||
read -s -p "🔑 Ingresá la contraseña de cifrado: " CLAVE
|
|
||||||
echo ""
|
|
||||||
CREDS=$(openssl enc -aes-256-cbc -pbkdf2 -d -in "$CONFIG_DIR/credenciales.enc" -pass pass:"$CLAVE" 2>/dev/null)
|
|
||||||
if [ -z "$CREDS" ]; then
|
|
||||||
echo "❌ Error al descifrar credenciales."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
CREDS=$(cat "$CONFIG_DIR/credenciales.txt")
|
|
||||||
fi
|
|
||||||
|
|
||||||
USUARIO=$(echo "$CREDS" | cut -d: -f1)
|
|
||||||
TOKEN=$(echo "$CREDS" | cut -d: -f2)
|
|
||||||
API_BASE=$(echo "$CREDS" | cut -d: -f3)
|
|
||||||
|
|
||||||
# 🔁 Reconfigurar credenciales
|
|
||||||
if [[ "$1" == "--reconfigurar" ]]; then
|
if [[ "$1" == "--reconfigurar" ]]; then
|
||||||
read -p "👤 Nuevo usuario: " USUARIO
|
echo "🔄 Reconfigurando credenciales..."
|
||||||
read -s -p "🔑 Nuevo token: " TOKEN
|
read -p "👤 Usuario de Gitea: " usuario
|
||||||
|
read -s -p "🔑 Token o contraseña: " token
|
||||||
echo ""
|
echo ""
|
||||||
read -p "🌐 Nueva URL base: " API_BASE
|
read -p "🌐 URL base de la API de Gitea: " URL
|
||||||
read -p "🔐 ¿Cifrar credenciales? (s/n): " CIFRAR
|
|
||||||
if [[ "$CIFRAR" == "s" ]]; then
|
resp=$(curl -s -u "$usuario:$token" "$URL/api/v1/user")
|
||||||
read -s -p "🔑 Contraseña para cifrado: " CLAVE
|
if echo "$resp" | grep -q "\"login\":\"$usuario\""; then
|
||||||
echo ""
|
echo "✅ Autenticación exitosa con $URL/api/v1/user"
|
||||||
echo "$USUARIO:$TOKEN:$API_BASE" | openssl enc -aes-256-cbc -pbkdf2 -salt -out "$CONFIG_DIR/credenciales.enc" -pass pass:"$CLAVE"
|
|
||||||
rm -f "$CONFIG_DIR/credenciales.txt"
|
|
||||||
else
|
else
|
||||||
echo "$USUARIO:$TOKEN:$API_BASE" > "$CONFIG_DIR/credenciales.txt"
|
echo "❌ Falló la autenticación. Abortando."
|
||||||
rm -f "$CONFIG_DIR/credenciales.enc"
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✅ Credenciales reconfiguradas."
|
|
||||||
|
read -p "🔐 ¿Querés cifrar las credenciales? (s/n): " cifrar
|
||||||
|
if [[ "$cifrar" == "s" ]]; then
|
||||||
|
read -s -p "🔑 Contraseña para cifrado: " pass
|
||||||
|
echo ""
|
||||||
|
CRED=$(echo -n "$usuario:$token" | openssl enc -aes-256-cbc -a -pbkdf2 -pass pass:"$pass")
|
||||||
|
else
|
||||||
|
CRED="$usuario:$token"
|
||||||
|
fi
|
||||||
|
|
||||||
|
guardar_config
|
||||||
|
echo "✅ Reconfiguración completa."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 📂 Verificar si estamos en un repo
|
# ---------------------------------------------------------
|
||||||
git rev-parse --is-inside-work-tree &>/dev/null || {
|
# Cambiar la clave de cifrado
|
||||||
echo "❌ No estás en un repositorio Git."
|
# ---------------------------------------------------------
|
||||||
|
if [[ "$1" == "--cambiar-clave" ]]; then
|
||||||
|
echo "🔐 Cambiando contraseña de cifrado..."
|
||||||
|
if [[ -z "$CRED" ]]; then
|
||||||
|
echo "⚠️ No hay credenciales guardadas. Abortando."
|
||||||
exit 1
|
exit 1
|
||||||
}
|
fi
|
||||||
|
|
||||||
# 🧼 Detectar si el repo está vacío
|
read -s -p "🔑 Contraseña actual: " oldpass
|
||||||
git rev-parse HEAD &>/dev/null
|
echo ""
|
||||||
if [ $? -ne 0 ]; then
|
cred_descifrada=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -pass pass:"$oldpass" 2>/dev/null)
|
||||||
echo "📁 El repositorio está vacío."
|
|
||||||
read -p "¿Querés crear README.md inicial? (s/n): " RESP
|
if [[ -z "$cred_descifrada" ]]; then
|
||||||
if [[ "$RESP" == "s" ]]; then
|
echo "❌ Contraseña incorrecta. Abortando."
|
||||||
touch README.md
|
exit 1
|
||||||
git add README.md
|
fi
|
||||||
git commit -m "Commit inicial por git subir"
|
|
||||||
|
read -s -p "🔑 Nueva contraseña: " newpass
|
||||||
|
echo ""
|
||||||
|
CRED=$(echo -n "$cred_descifrada" | openssl enc -aes-256-cbc -a -pbkdf2 -pass pass:"$newpass")
|
||||||
|
|
||||||
|
guardar_config
|
||||||
|
echo "✅ Contraseña de cifrado actualizada."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# Descifrar credenciales si están cifradas
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
if [[ "$CRED" =~ ^[A-Za-z0-9+/=]+$ ]]; then
|
||||||
|
read -s -p "🔑 Contraseña para descifrado: " pass
|
||||||
|
echo ""
|
||||||
|
descifrado=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -pass pass:"$pass" 2>/dev/null)
|
||||||
|
if [[ -n "$descifrado" ]]; then
|
||||||
|
CRED="$descifrado"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 🌐 Verificar remote origin
|
usuario=$(echo "$CRED" | cut -d: -f1)
|
||||||
git remote -v | grep origin >/dev/null || {
|
token=$(echo "$CRED" | cut -d: -f2)
|
||||||
read -p "🌐 No hay remote origin. Ingresá URL del remote: " REMOTE
|
|
||||||
git remote add origin "$REMOTE"
|
|
||||||
}
|
|
||||||
|
|
||||||
# 📦 Detectar cambios sin commitear
|
# Validar URL
|
||||||
if ! git diff-index --quiet HEAD --; then
|
if [[ -z "$URL" ]]; then
|
||||||
|
echo "❌ No se encontró la URL de Gitea en la configuración."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📤 Subiendo cambios como $usuario a $URL..."
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# Verificar si es repo git
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||||
|
echo "📁 No estás en un repositorio git. Inicializando..."
|
||||||
|
git init
|
||||||
|
read -p "🌐 URL del remoto origin: " remote_url
|
||||||
|
git remote add origin "$remote_url"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# Detectar cambios sin commitear
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
if [[ -n "$(git status --porcelain)" ]]; then
|
||||||
echo "📦 Hay cambios sin commitear."
|
echo "📦 Hay cambios sin commitear."
|
||||||
read -p "¿Querés hacer commit automático? (s/n): " RESP
|
read -p "❓ ¿Querés escribir un mensaje de commit? (s/n): " respuesta
|
||||||
if [[ "$RESP" == "s" ]]; then
|
if [[ "$respuesta" == "s" ]]; then
|
||||||
git add .
|
mensaje=""
|
||||||
git commit -m "Commit automático por git subir"
|
while [[ -z "$mensaje" ]]; do
|
||||||
|
read -p "📝 Ingresá el mensaje de commit: " mensaje
|
||||||
|
done
|
||||||
|
git add -A
|
||||||
|
git commit -m "$mensaje"
|
||||||
|
else
|
||||||
|
git add -A
|
||||||
|
git commit -m "Auto-commit"
|
||||||
|
echo "✅ Commit automático generado."
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "✅ No hay cambios pendientes. Continuando con el push..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 🚀 Intentar push
|
# ---------------------------------------------------------
|
||||||
echo "🚀 Ejecutando git push..."
|
# Push con verificación de upstream
|
||||||
git push
|
# ---------------------------------------------------------
|
||||||
if [ $? -ne 0 ]; then
|
branch=$(git rev-parse --abbrev-ref HEAD)
|
||||||
echo "⚠️ Push falló. Intentando git pull y reintento..."
|
remote=$(git config --get branch.$branch.remote)
|
||||||
git pull --rebase
|
|
||||||
git push
|
if [[ -z "$remote" ]]; then
|
||||||
|
echo "⚠️ La rama '$branch' no tiene remoto configurado."
|
||||||
|
echo "👉 Ejecutando: git push --set-upstream origin $branch"
|
||||||
|
git push --set-upstream origin "$branch" || { echo "❌ Falló el push."; exit 1; }
|
||||||
|
else
|
||||||
|
git push || { echo "❌ Falló el push."; exit 1; }
|
||||||
fi
|
fi
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "$CONFIG_DIR/git-subir"
|
|
||||||
|
|
||||||
# Instalar en ~/.local/bin
|
|
||||||
mkdir -p "$HOME/.local/bin"
|
|
||||||
cp "$CONFIG_DIR/git-subir" "$HOME/.local/bin/git-subir"
|
|
||||||
chmod +x "$HOME/.local/bin/git-subir"
|
|
||||||
|
|
||||||
# Asegurar que ~/.local/bin esté en PATH
|
|
||||||
SHELL_RC="$HOME/.bashrc"
|
|
||||||
[[ "$SHELL" == */zsh ]] && SHELL_RC="$HOME/.zshrc"
|
|
||||||
grep -q 'export PATH="$HOME/.local/bin:$PATH"' "$SHELL_RC" || echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$SHELL_RC"
|
|
||||||
|
|
||||||
echo "✅ Instalación completa. Usá 'git subir' desde cualquier repositorio."
|
|
||||||
|
42
test-subir.sh
Normal file
42
test-subir.sh
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "🔍 Verificando instalación de git-subir..."
|
||||||
|
|
||||||
|
# Verificar si el comando está disponible
|
||||||
|
if ! command -v git-subir &> /dev/null; then
|
||||||
|
echo "❌ El comando 'git-subir' no está disponible en el PATH."
|
||||||
|
echo "👉 Asegurate de que ~/.local/bin esté en el PATH y que el script esté instalado."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Comando 'git-subir' disponible."
|
||||||
|
|
||||||
|
# Verificar si estamos en un repositorio git
|
||||||
|
if ! git rev-parse --is-inside-work-tree &> /dev/null; then
|
||||||
|
echo "❌ No estás dentro de un repositorio git."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar upstream
|
||||||
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
UPSTREAM=$(git rev-parse --symbolic-full-name --verify --quiet "@{u}")
|
||||||
|
|
||||||
|
if [ -z "$UPSTREAM" ]; then
|
||||||
|
echo "⚠️ La rama '$BRANCH' no tiene upstream configurado."
|
||||||
|
echo "👉 Se recomienda ejecutar: git push --set-upstream origin $BRANCH"
|
||||||
|
else
|
||||||
|
echo "✅ Upstream configurado: $UPSTREAM"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar credenciales
|
||||||
|
CONFIG_DIR="$HOME/.config/git-subir"
|
||||||
|
if [ -f "$CONFIG_DIR/credenciales.enc" ]; then
|
||||||
|
echo "🔐 Credenciales cifradas detectadas."
|
||||||
|
elif [ -f "$CONFIG_DIR/credenciales.txt" ]; then
|
||||||
|
echo "🔐 Credenciales en texto plano detectadas."
|
||||||
|
else
|
||||||
|
echo "❌ No se encontraron credenciales en $CONFIG_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Instalación verificada correctamente."
|
Reference in New Issue
Block a user