Compare commits
9 Commits
0f767a4d41
...
main
Author | SHA1 | Date | |
---|---|---|---|
7325e9c91f | |||
b2b35f41eb | |||
f05e3d20c5 | |||
68ea6dc88f | |||
f416ac1700 | |||
a8f6bf978e | |||
4e3ba2bb2a | |||
025b9f1541 | |||
2d3ef2c612 |
146
README.md
146
README.md
@ -1,83 +1,123 @@
|
|||||||
<<<<<<< HEAD
|
# 🧠 git-subir — Instalador autosuficiente para subir cambios vía Git con autenticación segura
|
||||||
# 🚀 Comando `git subir`
|
|
||||||
|
|
||||||
Este script automatiza el proceso de subir cambios a un repositorio Gitea, manejando credenciales, commits, conflictos y merges de forma inteligente. Se instala como un comando global llamado `git subir`, que podés usar desde cualquier repositorio Git.
|
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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🧩 Funcionalidades
|
## ✅ Funcionalidades incluidas
|
||||||
|
|
||||||
- ✅ Verifica que estés dentro de un repositorio Git.
|
| Funcionalidad | Estado |
|
||||||
- 🔐 Solicita usuario y contraseña/token de Gitea.
|
|---------------|--------|
|
||||||
- 📦 Detecta cambios sin commitear y ofrece hacer commit automático.
|
| Solicitud y validación de credenciales | ✅ |
|
||||||
- 🔄 Maneja conflictos entre el repositorio local y remoto.
|
| Cifrado con OpenSSL (AES-256-CBC + PBKDF2) | ✅ |
|
||||||
- 🔀 Realiza merge automático si hay conflictos.
|
| Cambio de contraseña de cifrado (`--cambiar-clave`) | ✅ |
|
||||||
- 🧠 Reintenta el `push` después de resolver conflictos.
|
| Reconfiguración completa (`--reconfigurar`) | ✅ |
|
||||||
- 🛠️ Se instala globalmente como comando `git subir`.
|
| 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 | ✅ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠️ Instalación
|
## 📦 Requisitos
|
||||||
|
|
||||||
### 1. Guardá el instalador
|
- 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)
|
||||||
|
|
||||||
Copiá el script de instalación en un archivo llamado `instalar-subir.sh`.
|
---
|
||||||
|
|
||||||
### 2. Asigná permisos y ejecutalo
|
## 🚀 Instalación
|
||||||
|
|
||||||
|
1. Cloná el repositorio o descargá el script `instalar-subir.sh`
|
||||||
|
2. Ejecutá el instalador:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x instalar-subir.sh
|
chmod +x instalar-subir.sh
|
||||||
./instalar-subir.sh
|
./instalar-subir.sh
|
||||||
|
|
||||||
Esto hará lo siguiente:
|
|
||||||
📁 Crea la carpeta ~/.scripts si no existe.
|
|
||||||
|
|
||||||
📄 Copia el script funcional como git-subir dentro de esa carpeta.
|
# 🧠 git-subir — Instalador autosuficiente para subir cambios vía Git con autenticación segura
|
||||||
|
|
||||||
🔓 Le da permisos de ejecución.
|
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.
|
||||||
|
|
||||||
🛣️ Agrega ~/.scripts al PATH si no está.
|
---
|
||||||
|
|
||||||
Uso:
|
## ✅ Funcionalidades incluidas
|
||||||
Desde cualquier repositorio Git, simplemente ejecutá:
|
|
||||||
|
|
||||||
|
| Funcionalidad | Estado |
|
||||||
|
|---------------|--------|
|
||||||
|
| 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
|
bash
|
||||||
git subir
|
git subir
|
||||||
|
Sube los cambios al remoto configurado, validando credenciales y configurando upstream si es necesario.
|
||||||
|
|
||||||
El script te guiará paso a paso:
|
Opciones avanzadas
|
||||||
|
bash
|
||||||
🔐 Te pedirá tus credenciales de Gitea.
|
git subir --reconfigurar
|
||||||
|
🔄 Permite cambiar usuario, token, URL y contraseña de cifrado.
|
||||||
📦 Detectará si hay cambios sin commitear y te ofrecerá hacer commit.
|
|
||||||
|
|
||||||
🚀 Intentará hacer push al repositorio remoto.
|
|
||||||
|
|
||||||
🔄 Si el push falla por historial diferente, hará pull con --allow-unrelated-histories.
|
|
||||||
|
|
||||||
⚔️ Si hay conflictos, te mostrará los archivos afectados y te preguntará si querés hacer un merge automático.
|
|
||||||
|
|
||||||
✅ Reintentará el push después de resolver conflictos.
|
|
||||||
Requisitos
|
|
||||||
Tener Git instalado.
|
|
||||||
|
|
||||||
Tener acceso a un repositorio remoto en Gitea.
|
|
||||||
|
|
||||||
Estar dentro de un repositorio Git local al ejecutar el comando.
|
|
||||||
|
|
||||||
🧼 Desinstalación
|
|
||||||
Si querés eliminar el comando:
|
|
||||||
|
|
||||||
bash
|
bash
|
||||||
rm ~/.scripts/git-subir
|
git subir --cambiar-clave
|
||||||
Y si querés quitar la carpeta del PATH, podés editar tu ~/.bashrc o ~/.zshrc y eliminar la línea:
|
🔐 Cambia solo la contraseña de cifrado sin tocar usuario/token.
|
||||||
|
|
||||||
|
🔐 Seguridad
|
||||||
|
Las credenciales se cifran con AES-256-CBC + PBKDF2 usando OpenSSL
|
||||||
|
|
||||||
|
El archivo de configuración se guarda en ~/.config/git-subir.conf
|
||||||
|
|
||||||
|
La contraseña de cifrado nunca se guarda, se solicita en cada ejecución
|
||||||
|
|
||||||
|
El script tolera errores de autenticación, PATH, upstream y configuración
|
||||||
|
|
||||||
|
📁 Desinstalación
|
||||||
|
Si querés eliminar todo:
|
||||||
|
|
||||||
bash
|
bash
|
||||||
|
rm ~/.local/bin/git-subir
|
||||||
|
git config --global --unset alias.subir
|
||||||
|
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.
|
||||||
|
|
||||||
export PATH="$HOME/.scripts:$PATH"
|
|
||||||
|
|
||||||
📬 Autor
|
|
||||||
Este script fue creado por Nahuel Baglietto para automatizar flujos de trabajo con Gitea. ¿Tenés sugerencias o querés mejorarlo? ¡Contribuciones bienvenidas!
|
|
||||||
=======
|
|
||||||
# git-operaciones
|
|
||||||
|
|
||||||
>>>>>>> f0ba71ff0559f7673229e8b14ba5848b8c530500
|
|
||||||
|
32
desinstalar-subir.sh
Executable file
32
desinstalar-subir.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "🧹 Desinstalando git subir..."
|
||||||
|
|
||||||
|
BIN="$HOME/.local/bin/git-subir"
|
||||||
|
CONFIG="$HOME/.config/git-subir.conf"
|
||||||
|
|
||||||
|
# Eliminar script
|
||||||
|
if [[ -f "$BIN" ]]; then
|
||||||
|
rm "$BIN"
|
||||||
|
echo "✅ Script eliminado: $BIN"
|
||||||
|
else
|
||||||
|
echo "⚠️ Script no encontrado en $BIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Eliminar alias
|
||||||
|
if git config --global --get alias.subir >/dev/null; then
|
||||||
|
git config --global --unset alias.subir
|
||||||
|
echo "✅ Alias 'git subir' eliminado"
|
||||||
|
else
|
||||||
|
echo "⚠️ Alias 'git subir' no estaba configurado"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Eliminar configuración
|
||||||
|
if [[ -f "$CONFIG" ]]; then
|
||||||
|
rm "$CONFIG"
|
||||||
|
echo "✅ Configuración eliminada: $CONFIG"
|
||||||
|
else
|
||||||
|
echo "⚠️ Archivo de configuración no encontrado en $CONFIG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🎉 Desinstalación completa."
|
@ -1,100 +1,189 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ╔════════════════════════════════════════════════════╗
|
echo "🚀 Instalando comando git subir..."
|
||||||
# ║ VERIFICACIÓN DE REPOSITORIO GIT ║
|
|
||||||
# ╚════════════════════════════════════════════════════╝
|
|
||||||
|
|
||||||
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
|
CONFIG="$HOME/.config/git-subir.conf"
|
||||||
|
BIN="$HOME/.local/bin/git-subir"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$CONFIG")"
|
||||||
|
mkdir -p "$(dirname "$BIN")"
|
||||||
|
|
||||||
|
# Solicitar credenciales
|
||||||
|
read -p "👤 Usuario de Gitea: " usuario
|
||||||
|
read -s -p "🔑 Token o contraseña: " token
|
||||||
echo ""
|
echo ""
|
||||||
echo "🛑 Este comando debe ejecutarse dentro de un repositorio Git."
|
read -p "🌐 URL base de la API de Gitea: " url
|
||||||
|
|
||||||
|
# Validar autenticación
|
||||||
|
resp=$(curl -s -u "$usuario:$token" "$url/api/v1/user")
|
||||||
|
if echo "$resp" | grep -q "\"login\":\"$usuario\""; then
|
||||||
|
echo "✅ Autenticación exitosa con $url/api/v1/user"
|
||||||
|
else
|
||||||
|
echo "❌ Falló la autenticación. Abortando."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BRANCH="main"
|
# Cifrado opcional
|
||||||
|
read -p "🔐 ¿Querés cifrar las credenciales? (s/n): " cifrar
|
||||||
# ╔════════════════════════════════════════════════════╗
|
if [[ "$cifrar" == "s" ]]; then
|
||||||
# ║ INGRESO DE CREDENCIALES ║
|
read -s -p "🔑 Contraseña para cifrado: " pass
|
||||||
# ╚════════════════════════════════════════════════════╝
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🔐 Ingresá tu usuario de Gitea:"
|
salt=$(openssl rand -hex 16)
|
||||||
echo "╔════════════════╗"
|
cred="$usuario:$token"
|
||||||
read -p "║ Usuario: " USER
|
cred_cifrada=$(echo -n "$cred" | openssl enc -aes-256-cbc -a -pbkdf2 -salt -pass pass:"$pass")
|
||||||
echo "╚════════════════╝"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "🔐 Ingresá tu contraseña o token de Gitea:"
|
|
||||||
echo "╔════════════════════════════════╗"
|
|
||||||
read -s -p "║ Contraseña/Token: " TOKEN
|
|
||||||
echo ""
|
|
||||||
echo "╚════════════════════════════════╝"
|
|
||||||
|
|
||||||
# ╔════════════════════════════════════════════════════╗
|
|
||||||
# ║ DETECCIÓN DE CAMBIOS SIN COMMITEAR ║
|
|
||||||
# ╚════════════════════════════════════════════════════╝
|
|
||||||
|
|
||||||
CHANGES=$(git status --porcelain)
|
|
||||||
|
|
||||||
if [ -n "$CHANGES" ]; then
|
|
||||||
echo ""
|
|
||||||
echo "📦 Se detectaron cambios sin commitear:"
|
|
||||||
echo "$CHANGES"
|
|
||||||
read -p "¿Querés hacer commit automático de estos cambios? (s/n): " COMMIT_RESP
|
|
||||||
|
|
||||||
if [ "$COMMIT_RESP" == "s" ]; then
|
|
||||||
echo ""
|
|
||||||
read -p "📝 Ingresá el mensaje de commit: " COMMIT_MSG
|
|
||||||
git add .
|
|
||||||
git commit -m "$COMMIT_MSG"
|
|
||||||
echo "✅ Commit realizado."
|
|
||||||
else
|
else
|
||||||
echo "🛑 No se hizo commit. Continuando sin cambios."
|
cred_cifrada="$usuario:$token"
|
||||||
fi
|
salt=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ╔════════════════════════════════════════════════════╗
|
# Guardar configuración
|
||||||
# ║ INICIO DE SUBIDA DE ARCHIVOS ║
|
cat > "$CONFIG" <<EOF
|
||||||
# ╚════════════════════════════════════════════════════╝
|
URL=$url
|
||||||
|
CRED=$cred_cifrada
|
||||||
|
SALT=$salt
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Generar script git-subir con commit interactivo
|
||||||
|
cat > "$BIN" <<'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
CONFIG="$HOME/.config/git-subir.conf"
|
||||||
|
mkdir -p "$(dirname "$CONFIG")"
|
||||||
|
source "$CONFIG"
|
||||||
|
|
||||||
|
guardar_config() {
|
||||||
|
cat > "$CONFIG" <<EOF2
|
||||||
|
URL=$URL
|
||||||
|
CRED=$CRED
|
||||||
|
SALT=$SALT
|
||||||
|
EOF2
|
||||||
|
}
|
||||||
|
|
||||||
|
# Reconfigurar credenciales
|
||||||
|
if [[ "$1" == "--reconfigurar" ]]; then
|
||||||
|
echo "🔄 Reconfigurando credenciales..."
|
||||||
|
read -p "👤 Usuario de Gitea: " usuario
|
||||||
|
read -s -p "🔑 Token o contraseña: " token
|
||||||
echo ""
|
echo ""
|
||||||
echo "🚀 Subiendo archivos al repositorio remoto..."
|
read -p "🌐 URL base de la API de Gitea: " URL
|
||||||
echo ""
|
resp=$(curl -s -u "$usuario:$token" "$URL/api/v1/user")
|
||||||
|
if echo "$resp" | grep -q "\"login\":\"$usuario\""; then
|
||||||
REPO_URL=$(git config --get remote.origin.url)
|
echo "✅ Autenticación exitosa con $URL/api/v1/user"
|
||||||
|
|
||||||
git config --global credential.helper store
|
|
||||||
echo "${REPO_URL/https:\/\//https://$USER:$TOKEN@}" > ~/.git-credentials
|
|
||||||
|
|
||||||
git push origin $BRANCH
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo ""
|
|
||||||
echo "⚠️ Push fallido. Intentando pull con --allow-unrelated-histories..."
|
|
||||||
git pull --no-rebase origin $BRANCH --allow-unrelated-histories
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo ""
|
|
||||||
echo "✅ Pull exitoso. Reintentando push..."
|
|
||||||
git push origin $BRANCH
|
|
||||||
else
|
else
|
||||||
|
echo "❌ Falló la autenticación. Abortando."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
read -p "🔐 ¿Querés cifrar las credenciales? (s/n): " cifrar
|
||||||
|
if [[ "$cifrar" == "s" ]]; then
|
||||||
|
read -s -p "🔑 Contraseña para cifrado: " pass
|
||||||
echo ""
|
echo ""
|
||||||
echo "⚠️ Verificando conflictos..."
|
SALT=$(openssl rand -hex 16)
|
||||||
CONFLICTS=$(git diff --name-only --diff-filter=U)
|
CRED=$(echo -n "$usuario:$token" | openssl enc -aes-256-cbc -a -pbkdf2 -salt -pass pass:"$pass")
|
||||||
|
else
|
||||||
|
CRED="$usuario:$token"
|
||||||
|
SALT=""
|
||||||
|
fi
|
||||||
|
guardar_config
|
||||||
|
echo "✅ Reconfiguración completa."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$CONFLICTS" ]; then
|
# Cambiar solo la clave de cifrado
|
||||||
|
if [[ "$1" == "--cambiar-clave" ]]; then
|
||||||
|
echo "🔐 Cambiando contraseña de cifrado..."
|
||||||
|
if [[ -z "$SALT" ]]; then
|
||||||
|
echo "⚠️ Las credenciales no están cifradas. No se puede cambiar la clave."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
read -s -p "🔑 Contraseña actual: " oldpass
|
||||||
echo ""
|
echo ""
|
||||||
echo "🚨 Conflictos detectados:"
|
cred_descifrada=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -salt -pass pass:"$oldpass" 2>/dev/null)
|
||||||
echo "$CONFLICTS"
|
if [[ -z "$cred_descifrada" ]]; then
|
||||||
read -p "¿Hacer merge automático? (s/n): " RESP
|
echo "❌ Contraseña incorrecta. Abortando."
|
||||||
if [ "$RESP" == "s" ]; then
|
exit 1
|
||||||
git add .
|
fi
|
||||||
git commit -m "🔀 Merge automático"
|
read -s -p "🔑 Nueva contraseña: " newpass
|
||||||
git push origin $BRANCH
|
echo ""
|
||||||
echo "🎉 Push completado después del merge."
|
SALT=$(openssl rand -hex 16)
|
||||||
|
CRED=$(echo -n "$cred_descifrada" | openssl enc -aes-256-cbc -a -pbkdf2 -salt -pass pass:"$newpass")
|
||||||
|
guardar_config
|
||||||
|
echo "✅ Contraseña de cifrado actualizada."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Descifrar credenciales si es necesario
|
||||||
|
if [[ -n "$SALT" ]]; then
|
||||||
|
read -s -p "🔑 Contraseña para descifrado: " pass
|
||||||
|
echo ""
|
||||||
|
CRED=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -salt -pass pass:"$pass" 2>/dev/null)
|
||||||
|
if [[ -z "$CRED" ]]; then
|
||||||
|
echo "❌ Contraseña incorrecta. Abortando."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
usuario=$(echo "$CRED" | cut -d: -f1)
|
||||||
|
token=$(echo "$CRED" | cut -d: -f2)
|
||||||
|
|
||||||
|
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."
|
||||||
|
read -p "¿Querés escribir el mensaje de commit? (s/n): " respuesta
|
||||||
|
if [[ "$respuesta" == "s" ]]; then
|
||||||
|
read -p "📝 Ingresá el mensaje de commit: " mensaje
|
||||||
else
|
else
|
||||||
echo "🛑 Merge cancelado. Resolvé manualmente."
|
mensaje="Commit automático desde git-subir"
|
||||||
fi
|
fi
|
||||||
|
git add -A
|
||||||
|
git commit -m "$mensaje"
|
||||||
else
|
else
|
||||||
echo "❌ Pull falló por otro motivo."
|
echo "✅ No hay cambios pendientes. Continuando con el push..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Verificar si la rama tiene upstream
|
||||||
|
branch=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
remote=$(git config --get branch.$branch.remote)
|
||||||
|
|
||||||
|
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"
|
||||||
|
else
|
||||||
|
git push
|
||||||
fi
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$BIN"
|
||||||
|
|
||||||
|
# Validar PATH
|
||||||
|
SHELL_RC="$HOME/.bashrc"
|
||||||
|
[[ "$SHELL" == */zsh ]] && SHELL_RC="$HOME/.zshrc"
|
||||||
|
grep -q "$HOME/.local/bin" <<< "$PATH" || echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$SHELL_RC"
|
||||||
|
|
||||||
|
# Configurar alias
|
||||||
|
git config --global alias.subir "!git-subir"
|
||||||
|
|
||||||
|
echo "✅ Alias 'git subir' configurado."
|
||||||
|
echo "👉 Ejecutá 'source $SHELL_RC' o reiniciá la terminal para aplicar el PATH."
|
||||||
|
|
||||||
|
# Verificación final
|
||||||
|
if command -v git-subir >/dev/null; then
|
||||||
|
echo "✅ El comando 'git-subir' está disponible."
|
||||||
|
else
|
||||||
|
echo "⚠️ El comando 'git-subir' aún no está disponible."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "🎉 Instalación completa."
|
||||||
|
echo "🛠️ Opciones disponibles para el comando:"
|
||||||
|
echo " git subir # Ejecuta git push con autenticación"
|
||||||
|
echo " git subir --reconfigurar # Cambia usuario, token, URL y clave"
|
||||||
|
echo " git subir --cambiar-clave # Cambia solo la contraseña de cifrado"
|
||||||
|
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