Ocasionalmente en un proyecto disponemos de información sensible o archivos que no queremos subir al proyecto. Como por ejemplo logs, configuración de base de datos o archivos con claves de APIs entre otros. Desgraciadamente si no configuramos bien el .gitignore o si lo añadimos a posteriori git automaticamente realizara el seguimiento de este archivo.
¿Cómo hacer para que git se olvide de el permanentemente?
Es decir, para que el archivo no nos aparezca en el «git status» y lógicamente al hacer git commit no lo agregue al proyecto más… El comando básicamente es este:
1 2 |
git rm --cached <archivo> git commit -am "Mensaje aleatorio" |
Aunque este archivo deja de ser «cometido» por git seguirá presente dentro de nuestro proyecto local y repositorio. El problema, al menos por mi parte, cuando quieres actualizar el proyecto en otro lugar con «git pull» vas a obtener este mensaje:
1 2 3 |
error: Your local changes to the following files would be overwritten by merge: storage/file.log Please, commit your changes or stash them before you can merge. |
Para solucionar esto ultimo puedes como te dicen arriba, actualizando los cambios con un commit si tienes cambios por guardar, apilar los cambios «git stash» o haciendo esta ñapa y sobreescribiendo los ficheros:
1 2 |
git fetch --all git reset --hard origin/master |
Si estas trabajando en otra rama debes sustituir «master» con la tuya. Creo que no hay que decir que perderás los datos que no hayas guardado en el proyecto local. Básicamente «git fetch» descarga el repositorio sin mezclar nada y el comando «git reset» digamos que sobreescribe los archivos con lo que hay en el repositorio.
Eliminar la carpeta node_modules
Una de las «típicas» es olvidar «ignorar» la carpeta node_modules, dentro del proyecto. Lo que ocasiona que subes todo lo innecesario al repositorio, la solución es esta:
1 2 3 4 5 |
#añadir 'node_modules' a .gitignore git rm -r --cached node_modules git commit -m 'Remove the now ignored directory node_modules' git push origin master |
Moraleja del asunto…
Pues que este post lo escribo básicamente para mi, por no configurar correctamente el archivo .gitignore desde un principio. Si se utiliza un IDE como Netbeans que añade archivos automáticamente al proyecto es bastante fácil olvidarse. Ademas esto es un resumen en Español de estas dos discusiones en Stackoverflow: parte 1 y parte 2. Como podéis comprobar no soy el único «noob» en esto. Por último recomiendo a todos los que queráis aprender Git y Github de una forma amena os recomiendo este curso de Codeschool (Ingles), yo ya lo tengo acabado.