Se modifico la instalacion y desistalacion se creo .env para guardar credenciales del usuario
This commit is contained in:
108
README.md
108
README.md
@ -1,83 +1,77 @@
|
|||||||
<<<<<<< HEAD
|
# 🛠️ Git Subir – Automatización de Push con Gitea
|
||||||
# 🚀 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 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
|
## 📦 Instalación
|
||||||
|
|
||||||
- ✅ 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
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x instalar-subir.sh
|
chmod +x instalar-subir.sh
|
||||||
./instalar-subir.sh
|
./instalar-subir.sh
|
||||||
|
Durante la instalación se te pedirá:
|
||||||
|
|
||||||
Esto hará lo siguiente:
|
Usuario de Gitea
|
||||||
📁 Crea la carpeta ~/.scripts si no existe.
|
|
||||||
|
|
||||||
📄 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:
|
||||||
Uso:
|
|
||||||
Desde cualquier repositorio Git, simplemente ejecutá:
|
|
||||||
|
|
||||||
bash
|
bash
|
||||||
git subir
|
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
|
||||||
|
|
||||||
📦 Detectará 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.
|
Detecta conflictos y te pregunta si querés hacer merge automático
|
||||||
|
|
||||||
⚔️ 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:
|
|
||||||
|
|
||||||
|
🧹 Desinstalación
|
||||||
bash
|
bash
|
||||||
rm ~/.scripts/git-subir
|
chmod +x desinstalar-subir.sh
|
||||||
Y si querés quitar la carpeta del PATH, podés editar tu ~/.bashrc o ~/.zshrc y eliminar la línea:
|
./desinstalar-subir.sh
|
||||||
|
Esto elimina:
|
||||||
|
|
||||||
bash
|
El alias git subir
|
||||||
|
|
||||||
export PATH="$HOME/.scripts:$PATH"
|
El script principal
|
||||||
|
|
||||||
📬 Autor
|
Las credenciales guardadas
|
||||||
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
|
📁 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
13
desinstalar-subir.sh
Normal 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."
|
@ -1,100 +1,95 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
# ╔════════════════════════════════════════════════════╗
|
# 📁 Crear directorio de scripts
|
||||||
# ║ VERIFICACIÓN DE REPOSITORIO GIT ║
|
mkdir -p "$HOME/.scripts"
|
||||||
# ╚════════════════════════════════════════════════════╝
|
|
||||||
|
|
||||||
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
|
# 📜 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 ""
|
||||||
echo "🛑 Este comando debe ejecutarse dentro de un repositorio Git."
|
|
||||||
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BRANCH="main"
|
echo "✅ Instalación completa. Usá el comando: git subir"
|
||||||
|
|
||||||
# ╔════════════════════════════════════════════════════╗
|
|
||||||
# ║ 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
|
|
||||||
|
Reference in New Issue
Block a user