Guía rápida para usar git-ftp para desplegar proyectos mediante FTP/FTPS usando el historial de Git.
La idea es simple:
git commit
↓
git ftp push
↓
FTP/FTPS
↓
Hosting actualizadogit-ftp compara el último commit desplegado con el estado actual de Git y sube únicamente los cambios necesarios.
1. Instalación
Windows
Requiere Python 3.10+.
Comprobar Python:
python --versionInstalar:
python -m pip install --upgrade git-ftpVerificar:
git ftp --versionmacOS
Con Homebrew:
brew install git-ftpVerificar:
git ftp --version2. Configuración inicial
Ejecutar los comandos desde la raíz del proyecto Git.
URL FTP
Ejemplo:
git config --local git-ftp.url "ftpes://ftp.example.com:21/ruta/remota"Para FTPS explícito normalmente se utiliza:
ftpes://Puerto habitual:
21Importante: ruta FTP
La ruta debe tener en cuenta el home/root del usuario FTP.
Por ejemplo, si el hosting indica:
Usuario: youruser
Home: /home/yourusery el proyecto está físicamente en:
/home/youruser/accounts.example.com/accountsla ruta que debe utilizarse desde la sesión FTP puede ser:
/accounts.example.com/accountsy NO:
/home/youruser/accounts.example.com/accountsEl home del usuario FTP actúa como raíz de su sesión.
3. Configurar usuario
git config --local git-ftp.user "usuario_ftp"Ejemplo:
git config --local git-ftp.user "youruser"Configurar contraseña
git config --local git-ftp.password "CONTRASEÑA"Esto se guarda en la configuración local de Git:
.git/configNo forma parte del repositorio Git.
4. FTPS y error de certificado
Si el servidor utiliza FTPS pero el certificado no coincide con el hostname utilizado, Windows puede mostrar un error como:
TLS verification failed
SEC_E_WRONG_PRINCIPALSi se confirma que el servidor es confiable y se necesita omitir la validación:
git config --local git-ftp.insecure trueDespués ya no es necesario añadir:
--insecureen cada comando.
También puede utilizarse temporalmente:
git ftp catchup --insecureo:
git ftp push --insecurePreferencia
Si el hosting proporciona un hostname cuyo certificado coincide correctamente, es preferible utilizar ese hostname y mantener la validación TLS.
--insecure debe utilizarse conscientemente porque desactiva la verificación del certificado.
5. .gitignore vs .git-ftp-ignore
Son archivos diferentes.
.gitignore
Controla qué archivos Git ignora.
.git-ftp-ignore
Controla qué archivos git-ftp excluye del deployment.
Ejemplo:
/vendor/
/node_modules/
.env
/cache/
keys/private.key
keys/public.key
package-lock.json
*.log
.DS_Store
/public/avatars/*
!/public/avatars/.gitkeepSi un archivo ya está trackeado por Git, que aparezca posteriormente en .gitignore no hace que deje de estar trackeado.
Por eso hay que comprobar qué archivos realmente están bajo control de Git antes de asumir que .gitignore los excluirá del deployment.
6. Proyecto existente en el hosting
Si el proyecto ya está desplegado manualmente y el estado del hosting corresponde al commit actual:
NO utilizar:
git ftp initporque init está pensado para iniciar el deployment.
Utilizar:
git ftp catchupEsto registra el commit actual como el último deployment sin volver a subir todo el proyecto.
Ejemplo:
Hosting:
versión actual
Git:
commit 15ea909
git ftp catchupResultado:
Last deployment changed from to 15ea909...A partir de ese momento git-ftp conoce el punto desde el que debe calcular los cambios.
7. Ver qué archivos cambió el último commit
Para ver únicamente los archivos modificados por el último commit:
git diff --name-only HEAD~1 HEADPara ver también el tipo de cambio:
git diff --name-status HEAD~1 HEADEjemplo:
M src/Views/admin/audit/index.blade.php
A src/Views/admin/audit/show.blade.php
D src/Views/OldController.phpDonde:
M = Modified
A = Added
D = Deleted8. Ver qué va a subir Git FTP
Antes de hacer un deployment real:
git ftp push --dry-runEste comando no modifica el servidor.
Muestra los archivos que git-ftp considera necesarios sincronizar.
Ejemplo:
1 file to sync:
[1 of 1] Buffered for upload 'src/Views/admin/audit/index.blade.php'.Es una excelente práctica utilizarlo antes de un deployment importante.
9. Deployment
Después de realizar cambios:
git add .
git commit -m "feat: nueva funcionalidad"Comprobar primero:
git ftp push --dry-runSi todo es correcto:
git ftp pushEjemplo:
1 file to sync:
[1 of 1] Buffered for upload 'src/Views/admin/audit/index.blade.php'.
Uploading ...
Last deployment changed from ... to ...10. ¿Qué ocurre si hay varios commits?
git-ftp no sube los commits individualmente.
Por ejemplo:
Último deployment
↓
commit A
↓
commit B
↓
commit C
↓
commit D ← HEADAl ejecutar:
git ftp pushGit-FTP calcula los cambios acumulados y sincroniza el servidor con el estado final de HEAD.
Por lo tanto, no importa si hiciste:
1 commito:
10 commitsentre deployments.
El objetivo es que producción termine exactamente en el estado correspondiente al commit actual.
11. Archivos eliminados
Si un archivo que estaba desplegado deja de existir en Git, git-ftp también puede detectar la eliminación y eliminarlo del servidor durante la sincronización.
Por eso es importante revisar:
git ftp push --dry-runantes de deployments importantes.
12. Configuración actual
Para consultar la configuración FTP del proyecto:
git config --local --list | grep git-ftpEn PowerShell:
git config --local --list | Select-String "git-ftp"También puedes consultar valores individualmente:
git config --local --get git-ftp.url
git config --local --get git-ftp.user
git config --local --get git-ftp.insecure13. Flujo diario recomendado
Una vez configurado todo, el flujo normal es simplemente:
git add .
git commit -m "feat: descripción del cambio"
git ftp push --dry-run
git ftp pushO, cuando el cambio es trivial y ya estás completamente seguro:
git add .
git commit -m "fix: corregir validación"
git ftp push14. Configuración de ejemplo
git config --local git-ftp.url "ftpes://ftp.example.com:21/app"
git config --local git-ftp.user "usuario"
git config --local git-ftp.password "contraseña"
git config --local git-ftp.insecure trueDespués, si el servidor ya contiene exactamente la versión actual:
git ftp catchupY posteriormente:
git ftp push --dry-run
git ftp pushResumen
| Acción | Comando |
|---|---|
| Instalar en Windows | python -m pip install --upgrade git-ftp |
| Instalar en macOS | brew install git-ftp |
| Ver versión | git ftp --version |
| Configurar URL | git config --local git-ftp.url "..." |
| Configurar usuario | git config --local git-ftp.user "..." |
| Configurar contraseña | git config --local git-ftp.password "..." |
| Ignorar error TLS | git config --local git-ftp.insecure true |
| Adoptar servidor existente | git ftp catchup |
| Ver archivos del último commit | git diff --name-only HEAD~1 HEAD |
| Ver cambios del último commit | git diff --name-status HEAD~1 HEAD |
| Simular deployment | git ftp push --dry-run |
| Deploy real | git ftp push |
Regla de oro
Si el hosting ya tiene el proyecto:
git ftp catchupSi ya está configurado:
git ftp push --dry-run
git ftp pushY nunca ejecutar git ftp init sobre un proyecto que ya está correctamente desplegado, salvo que se tenga claro que se quiere inicializar un nuevo deployment.