Por qué Visual studio está confirmando archivos en mi.gitignore archivo?


Estoy usando Visual Studio 2013 Express usando Git en un proyecto.

Creé mi repositorio y copié los archivos del proyecto en él desde otro directorio. Luego revisé mis archivos .gitignore y .gitattributes. .gitignore estaba preconfigurado y buscaba cubrir todo lo que necesitaba ignorar para las confirmaciones en este punto.

Seleccioné la pestaña Cambios en Visual Studio en la pestaña "Team Explorer" y vi que todos mis archivos no estaban rastreados, como era de esperar. Luego hice clic en "Agregar todo". Supuse que VS lo haría solo agregue archivos que no coincidan con los de mi .gitignore a la lista "Cambios incluidos". En su lugar, todos los archivos se agregaron a la lista "Cambios incluidos".

Luego pensé que tal vez el archivo .gitignore se usaría al confirmar y que solo los archivos que no coincidan con los de .gitignore se confirmarían. Así que agregué un mensaje de confirmación y hice clic en "Confirmar".

Cuando selecciono "Ver historial" del menú desplegable " Acciones "en la pestaña" Cambios", se me presenta un panel a la izquierda de mi " Equipo Explorer " vista que muestra todas las confirmaciones que he realizado. Solo hay 1 commit. Cuando hago doble clic en esa confirmación, la pestaña" Team Explorer " muestra Commit 8db34b1c y todos los archivos de mi proyecto se enumeran allí en la vista de árbol con [add] después de su nombre.

Por ejemplo, App_Data/Movies.mdf y App_Data/Movies.ldf se enumeran a pesar de que mi .gitignore incluye las líneas

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

No entiendo cómo el .archivo gitignore se está utilizando aquí o lo que los "Cambios incluidos", "Cambios excluidos" o "Archivos sin seguimiento" las secciones significan.

Se agradecería una explicación del comportamiento y las secciones anteriores.

Editar--

Borré mi .git directory, creó un nuevo repositorio, copió mis archivos de proyecto de nuevo y luego tomó capturas de pantalla de lo que veo.

Aquí están las imágenes de mi.archivo gitignore y mi pestaña "Cambios".

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

Hay esta pregunta SO y esta pregunta msdn que muestra que otras personas parecen tener problemas como bien. Traté de borrar el .archivo xml añadido por VS en mi .git directory (como se indica en la pregunta msdn), pero eso no resolvió el problema para mí.

Editar 2 {

Esta es mi estructura de directorios actual:

/MvcMovie/
    |--.git/
    |
    |---MvcMovie/
    |       |--App_Data/
    |       |     |--Movies.mdf
    |       |     |--Movies.ldf
    |       |     
    |       |--App_Start/
    |       |--etc...
    |
    |--packages/
    |--.gitignore
    |--.gitattributes
    |--MvcMovie.sln
    |MvcMovie.v12.suo
Author: Community, 2014-03-10

5 answers

@dustinmoris tiene razón en su respuesta, pero la solución no es tan obvia inmediatamente como el procedimiento te llevaría a creer. Así que permítanme guiarlo explícitamente a través del proceso para asegurarse de que los archivos en su archivo .gitignore sean obedecidos por Visual Studio.

1. Cree Su Solución Y Agréguela A Source Control Creación de la Solución Visual Studio 2013

He creado una solución XAML de ejemplo MVVM Light y se puede ver que todos los archivos actualmente no rastreados que idealmente deberían ser añadido a la siguiente confirmación se muestran con un poco más verde junto a sus iconos.

Listado de directorio de soluciones

El problema es que el archivo MvvmLight.Win81_TemporaryKey.pfx está listado para ser agregado aunque todos los archivos de tipo .pfx están explícitamente llamados para ser ignorados en mi .gitignore.

gitignore

Esto es aún más obvio si selecciono la solución en el panel Team Explorer y luego selecciono el botón Changes. Veo una lista de todos los archivos pendientes de inclusión en la próxima confirmación.

Cambios en Team Explorer

Esto la lista contiene todos los archivos de la Solución, no solo el subconjunto especificado por el archivo .gitignore.

2. Cierre Visual Studio y Elimine el archivo ms-persist.xml

Está en un directorio oculto por lo que es un poco difícil de encontrar. Debe ubicarse en la siguiente ruta

Directorio de soluciones \.git \ ms-persist.xml

ms-persist.archivo xml

3. Vuelva A Abrir La Solución y Confirme Los Archivos

Usted notará que parece como si su la solución ya no está bajo control de código fuente porque todos los iconos han perdido sus signos más verdes, pero no te preocupes, está bien.

Solución listado de directorios después de eliminar ms-persist.XML

Diríjase al panel Team Explorer y luego seleccione el botón Changes. Una vez más, verá que el proyecto todavía está siendo rastreado por el control de código fuente, así como una lista de todos los archivos que se agregarán en la próxima confirmación. Más importante aún, notará que su lista .gitignore se adhirió correctamente a esta vez y todos los archivos especificados como ignorados no son más larga lista como cambios pendientes que se agregarán a la próxima confirmación. Como puede ver a continuación, el archivo MvvmLight.Win81_TemporaryKey.pfx ya no está programado para la próxima confirmación.

Cambios de confirmación corregidos

Espero que eso ayude a alguien. Después de toda esa molestia aquí está mi consejo honesto:

Aprenda y use la interfaz de línea de comandos ya que proporciona la gama de funcionalidades que ofrece git y tiene la misma interfaz en todos plataforma.

 21
Author: Joel B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:28

Si alguien se pregunta cómo arreglarlo. Esta es la solución: Ve a tu casa .carpeta git (puede estar oculta) y abre el ms-persist.xml y puede ver los archivos rastreados, elementos excluidos, etc.

Simplemente arregle manualmente lo que VS ha estropeado y reinicie el IDE y debería estar bien de nuevo!

No borre todo .carpeta git como se menciona a menudo en otros hilos SO!

Gracias al blog de Eric Nelson post: https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

 4
Author: dustinmoris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-20 20:13:45

AppData/*.mdf y AppData/*.ldf refiérase a los archivos .mdf y .ldf que existen en el directorio AppData que se encuentra en la raíz de su repositorio git.

Su directorio AppData realmente existe debajo del directorio MvcMovie. Puedes añadir:

MvcMovie/AppData/*.mdf
MvcMovie/AppData/*.ldf`

A su .gitignore para ignorar esos archivos específicos, o, si desea ignorar los directorios .mdf y .ldf en todos AppData carpetas en todo su repositorio:

**/AppData/*.mdf
**/Appdata/*.ldf
 2
Author: Edward Thomson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-10 06:53:26

Si cambia las especificaciones del archivo de base de datos SQL en el .gitignore a:

# SQL Server files
*.mdf
*.ldf

¿No ignoraría eso todos los archivos de base de datos SQL en todo el árbol de carpetas de la solución, sin importar en qué subcarpeta se encontró?

 0
Author: Cindy K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-30 22:12:18
  1. En Team Explorer, vaya a su solución y luego a la vista cambios.
  2. Seleccione los archivos tontos que desea excluir.
  3. Haga clic derecho y seleccione Ignore esta extensión. Team Explorer-Ignorar esta extensión
  4. Verá que se han realizado cambios en el .gitignore que ahora puedes comprometer.

.gitignore

*.ldf
*.mdf

O puede usar Ignorar este elemento local para ignorar solo ese elemento específico si no desea ignorar una extensión completamente.

 0
Author: Jess,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-22 13:08:28