DevOps & Development 4 min de lectura 26 de marzo de 2026

Cómo usar Git en Visual Studio y gestionar archivos ignorados

Aprende a interpretar git status, diff y a configurar correctamente tu .gitignore.

Solución en "Dos Clics" (TL;DR)

Guía sobre comandos esenciales de Git, resolución de problemas con archivos temporales de Visual Studio (.vs) usando .gitignore y estrategias de control de versiones frente a backups automáticos.

Integrar Git con herramientas de desarrollo como Visual Studio y sistemas de respaldo automatizados mediante scripts por lotes y Robocopy es una práctica común, pero suele generar fricciones si no se configuran adecuadamente las exclusiones de directorios y el flujo de trabajo.

1. El problema con los archivos temporales de Visual Studio en el repositorio

Durante una sesión de trabajo con Visual Studio en un entorno alojado directamente en el servidor web de IIS (por ejemplo, en la ruta C:\inetpub\wwwroot), ejecuté el comando de estado desde la terminal y obtuve indicios de modificaciones no rastreadas en los archivos de configuración local del entorno de desarrollo.

Terminal (CMD)
C:\inetpub\wwwroot>cd RegUCM

C:\inetpub\wwwroot\RegUCM>git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   .vs/RegUCM/v14/.suo

no changes added to commit (use "git add" and/or "git commit -a")

El archivo .suo dentro de la estructura .vs/ es un archivo binario de configuración de Visual Studio que cambia cada vez que abres el proyecto. Al ser de naturaleza binaria y cambiar constantemente, Git no puede mostrar diferencias de texto claras y genera ruido constante en el historial, arrojando mensajes de que los archivos binarios difieren al ejecutar comandos de comparación.

2. Comandos principales de Git para el diagnóstico

Para auditar el estado del repositorio y comprender qué información se está almacenando, es fundamental dominar un conjunto básico de comandos que permiten revisar los commits previos, los cambios pendientes y el historial en forma de grafo:

  • git status: Muestra el estado del árbol de trabajo, archivos modificados y pendientes de confirmar.
  • git log --oneline: Muestra el historial de commits resumido en una línea por cada cambio.
  • git log --graph --oneline --all: Visualiza una representación gráfica en forma de árbol de todas las ramas y commits.
  • git diff: Muestra las diferencias en los archivos que aún no se han agregado al área de preparación (staged).
  • git show [ID]: Permite inspeccionar los detalles y los cambios exactos introducidos en un commit específico.

Al revisar el registro de commits con git log, se evidenciaban tanto los commits manuales como los respaldos automatizados ejecutados mediante scripts:

Terminal (CMD)
commit 55b795fbdac3950dd25a275af75f7924dd741eca (HEAD -> master)
Author: German Palaviccini <german.palaviccini@ucm.edu.ni>
Date:   Mon Mar 23 14:52:58 2026 -0600

    Actualizacion de la lista de estudiantes inscritos, despues de modificar la inscripcion, esto unicamente para estudiantes de practicas;

commit 1c66e975a5dfd2e8cc896874fb7b485c3a7d3c5e
Author: German Palaviccini <german.palaviccini@ucm.edu.ni>
Date:   Mon Mar 23 10:00:01 2026 -0600

    Auto-backup: lun. 23/03/2026 10:00:01.33

commit fa6694232b5d365cbfa65eb0f2527df6d7e38176
Author: German Palaviccini <german.palaviccini@ucm.edu.ni>
Date:   Mon Mar 23 08:56:40 2026 -0600

    Backup inicial - Estructura base

3. El error común al configurar el archivo .gitignore

Intenté solucionar el problema creando un archivo .gitignore y ejecutando el comando de limpieza para remover la carpeta temporal del índice de Git, pero obtuve un error de ruta debido a la ubicación desde donde ejecutaba el comando:

Terminal (CMD)
C:\inetpub\wwwroot>git rm -r --cached .vs
fatal: pathspec '.vs' did not match any files
Error detectado: El repositorio Git principal se encontraba en la raíz C:\inetpub\wwwroot\.git, mientras que la carpeta temporal residía dentro de la subestructura del proyecto (RegUCM/.vs). Además, hay que recordar que el archivo .gitignore no es retroactivo: si los archivos ya habían sido rastreados previamente por Git, el archivo de exclusión por sí solo no los eliminará del control de versiones. Es obligatorio desvincularlos manualmente.

La ubicación correcta del archivo de exclusión y el comando de limpieza debían apuntar a la ruta exacta donde se encontraba el directorio indeseado:

Terminal (CMD)
C:\inetpub\wwwroot>git rm -r --cached RegUCM/.vs
rm 'RegUcm/.vs/RegUcm/v14/.suo'

4. Estrategia de respaldos: Git combinado con tareas automatizadas

En este escenario particular, el repositorio no se está utilizando bajo el flujo tradicional de desarrollo colaborativo, sino como un mecanismo de copias de seguridad incrementales/diferenciales combinado con comandos de sincronización (como Robocopy) y una tarea programada en Windows que se ejecuta cada 30 minutos.

Esto plantea una duda natural sobre la granularidad de los cambios: si edito el proyecto continuamente durante ese intervalo de tiempo, ¿se pierden los pasos intermedios o se agrupan en un solo bloque?

Consejo Práctico: Git no registra cada pulsación o guardado de archivo en tiempo real, sino que almacena estados completos (snapshots) en el momento exacto en que se ejecuta el git commit. Por lo tanto, todas las modificaciones realizadas durante la ventana de 30 minutos se agruparán en un único commit automático al correr la tarea programada. No se pierde información del estado final de los archivos, pero se sacrifica el detalle cronológico de los pasos intermedios, a menos que se complemente con commits manuales desde la interfaz de Visual Studio (Team Explorer) al concluir tareas específicas.
La historia detrás de la nota

Combinar automatización a nivel de servidor con control de versiones exige entender los límites de los archivos temporales y la diferencia entre un respaldo por snapshots y un control de código fuente granular.