Se modifico la instalacion y desistalacion se creo .env para guardar credenciales del usuario

This commit is contained in:
2025-08-16 02:55:51 -03:00
parent 0f767a4d41
commit 2d3ef2c612
3 changed files with 153 additions and 151 deletions

108
README.md
View File

@ -1,83 +1,77 @@
<<<<<<< HEAD
# 🚀 Comando `git subir`
# 🛠️ Git Subir Automatización de Push con Gitea
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 paquete te permite ejecutar `git subir` como un comando personalizado que:
- Detecta cambios sin commitear
- Realiza commit automático si lo deseás
- Maneja push con credenciales de Gitea
- Resuelve conflictos de merge automáticamente
- Valida credenciales antes de instalarse
---
## 🧩 Funcionalidades
- Verifica que estés dentro de un repositorio Git.
- 🔐 Solicita usuario y contraseña/token de Gitea.
- 📦 Detecta cambios sin commitear y ofrece hacer commit automático.
- 🔄 Maneja conflictos entre el repositorio local y remoto.
- 🔀 Realiza merge automático si hay conflictos.
- 🧠 Reintenta el `push` después de resolver conflictos.
- 🛠 Se instala globalmente como comando `git subir`.
---
## 🛠️ Instalación
### 1. Guardá el instalador
Copiá el script de instalación en un archivo llamado `instalar-subir.sh`.
### 2. Asigná permisos y ejecutalo
## 📦 Instalación
```bash
chmod +x instalar-subir.sh
./instalar-subir.sh
Durante la instalación se te pedirá:
Esto hará lo siguiente:
📁 Crea la carpeta ~/.scripts si no existe.
Usuario de Gitea
📄 Copia el script funcional como git-subir dentro de esa carpeta.
Contraseña o token
🔓 Le da permisos de ejecución.
Validación automática contra el servidor
🛣 Agrega ~/.scripts al PATH si no está.
Uso:
Desde cualquier repositorio Git, simplemente ejecutá:
🚀 Uso
Desde cualquier repositorio Git:
bash
git subir
El script:
El script te guiará paso a paso:
Detecta cambios sin commitear
🔐 Te pedirá tus credenciales de Gitea.
Te pregunta si querés hacer commit automático
📦 Detecta si hay cambios sin commitear y te ofrecerá hacer commit.
Intenta hacer git push con tus credenciales
🚀 Intentará hacer push al repositorio remoto.
Si falla, hace git pull --allow-unrelated-histories
🔄 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:
Detecta conflictos y te pregunta si querés hacer merge automático
🧹 Desinstalación
bash
rm ~/.scripts/git-subir
Y si querés quitar la carpeta del PATH, podés editar tu ~/.bashrc o ~/.zshrc y eliminar la línea:
chmod +x desinstalar-subir.sh
./desinstalar-subir.sh
Esto elimina:
bash
El alias git subir
export PATH="$HOME/.scripts:$PATH"
El script principal
📬 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
Las credenciales guardadas
>>>>>>> f0ba71ff0559f7673229e8b14ba5848b8c530500
📁 Archivos creados
~/.scripts/git-subir.sh: script principal
~/.scripts/.env: credenciales (modo seguro)
/usr/local/bin/git-subir: alias ejecutable
🔐 Seguridad
Las credenciales se guardan en modo 600 (solo lectura para el usuario).
No se comparten ni se suben a ningún repositorio.
Podés borrarlas en cualquier momento con el desinstalador.
🧩 Requisitos
Git instalado
Acceso a Gitea con token o contraseña
Permisos para escribir en /usr/local/bin
🧠 Autor
Este sistema fue diseñado para automatizar flujos Git en entornos con Gitea, optimizando la experiencia de push y manejo de conflictos.

13
desinstalar-subir.sh Normal file
View File

@ -0,0 +1,13 @@
#!/bin/bash
set -e
echo "🧹 Eliminando alias git-subir..."
sudo rm -f /usr/local/bin/git-subir
echo "🧹 Eliminando script principal..."
rm -f "$HOME/.scripts/git-subir.sh"
echo "🧹 Eliminando credenciales..."
rm -f "$HOME/.scripts/.env"
echo "✅ Desinstalación completa."

View File

@ -1,100 +1,95 @@
#!/bin/bash
set -e
# ╔════════════════════════════════════════════════════╗
# ║ VERIFICACIÓN DE REPOSITORIO GIT ║
# ╚════════════════════════════════════════════════════╝
# 📁 Crear directorio de scripts
mkdir -p "$HOME/.scripts"
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
echo ""
echo "🛑 Este comando debe ejecutarse dentro de un repositorio Git."
# 📜 Copiar script principal
cat <<'EOF' > "$HOME/.scripts/git-subir.sh"
#!/bin/bash
set -e
source "$HOME/.scripts/.env"
remote_url=$(git remote get-url origin | sed 's|https://||')
auth_url="https://$GITEA_USER:$GITEA_TOKEN@$remote_url"
function marco() {
echo -e "╔════════════════════════════════╗"
echo -e "║ $1"
echo -e "╚════════════════════════════════╝"
}
# 📦 Detectar cambios sin commitear
if ! git diff-index --quiet HEAD; then
echo "📦 Se detectaron cambios sin commitear:"
git status -s
read -p "¿Querés hacer commit automático de estos cambios? (s/n): " auto_commit
if [[ "$auto_commit" == "s" ]]; then
read -p "📝 Ingresá el mensaje de commit: " mensaje
git add .
git commit -m "$mensaje"
echo "✅ Commit realizado."
fi
fi
# 🚀 Intentar push
echo "🚀 Subiendo archivos al repositorio remoto..."
if ! git push "$auth_url"; then
echo "⚠️ Push fallido. Intentando pull con --allow-unrelated-histories..."
git pull "$auth_url" --allow-unrelated-histories || true
conflictos=$(git diff --name-only --diff-filter=U)
if [[ -n "$conflictos" ]]; then
echo "🚨 Conflictos detectados:"
echo "$conflictos"
read -p "¿Hacer merge automático? (s/n): " merge_auto
if [[ "$merge_auto" == "s" ]]; then
git add .
git commit -m "🔀 Merge automático"
else
echo "❌ Merge cancelado. Resolvé los conflictos manualmente."
exit 1
fi
fi
git push "$auth_url"
fi
echo "🎉 Push completado."
EOF
chmod +x "$HOME/.scripts/git-subir.sh"
# 🔗 Crear alias ejecutable
echo "Creando alias git-subir..."
cat <<EOF | sudo tee /usr/local/bin/git-subir > /dev/null
#!/bin/bash
exec "$HOME/.scripts/git-subir.sh" "\$@"
EOF
sudo chmod +x /usr/local/bin/git-subir
# 🔐 Credenciales
echo "🔐 Configurando credenciales de Gitea..."
read -p "Usuario de Gitea: " GITEA_USER
read -s -p "Contraseña o Token: " GITEA_TOKEN
echo ""
echo "🔎 Verificando credenciales..."
response=$(curl -s -u "$GITEA_USER:$GITEA_TOKEN" https://gitea.espaciomemoria.ar/api/v1/user)
if echo "$response" | grep -q '"login":"'"$GITEA_USER"'"'; then
echo "✅ Credenciales válidas."
echo "GITEA_USER=$GITEA_USER" > "$HOME/.scripts/.env"
echo "GITEA_TOKEN=$GITEA_TOKEN" >> "$HOME/.scripts/.env"
chmod 600 "$HOME/.scripts/.env"
else
echo "❌ Credenciales inválidas. Abortando instalación."
sudo rm -f /usr/local/bin/git-subir
rm -rf "$HOME/.scripts/git-subir.sh"
exit 1
fi
BRANCH="main"
# ╔════════════════════════════════════════════════════╗
# ║ INGRESO DE CREDENCIALES ║
# ╚════════════════════════════════════════════════════╝
echo ""
echo "🔐 Ingresá tu usuario de Gitea:"
echo "╔════════════════╗"
read -p "║ Usuario: " USER
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
echo "🛑 No se hizo commit. Continuando sin cambios."
fi
fi
# ╔════════════════════════════════════════════════════╗
# ║ INICIO DE SUBIDA DE ARCHIVOS ║
# ╚════════════════════════════════════════════════════╝
echo ""
echo "🚀 Subiendo archivos al repositorio remoto..."
echo ""
REPO_URL=$(git config --get remote.origin.url)
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
echo ""
echo "⚠️ Verificando conflictos..."
CONFLICTS=$(git diff --name-only --diff-filter=U)
if [ -n "$CONFLICTS" ]; then
echo ""
echo "🚨 Conflictos detectados:"
echo "$CONFLICTS"
read -p "¿Hacer merge automático? (s/n): " RESP
if [ "$RESP" == "s" ]; then
git add .
git commit -m "🔀 Merge automático"
git push origin $BRANCH
echo "🎉 Push completado después del merge."
else
echo "🛑 Merge cancelado. Resolvé manualmente."
fi
else
echo "❌ Pull falló por otro motivo."
fi
fi
fi
echo "✅ Instalación completa. Usá el comando: git subir"