¿Cómo trato con los files de Visual Studio en Git?

Normalmente trabajo con .NET usando Git para el control de versiones. En mi equipo, trabajamos en paralelo y a menudo comprometemos nuestro código para integrarlo en la aplicación. Todo está bien PERO los files de solución y proyecto de Visual Studio. Encontramos dos forms:

  1. Nunca cometas esos files, todos tienen su propio
  2. Incluye esos files en el sistema de versiones

Ambas maneras tienen pros y contras, pero básicamente nos cuesta cada vez que sacamos de repo central. Aquí encontramos algunos problemas de repuesto: (en parentesis, la reference a la list anterior)

  • Tenemos que include los files de otros en el proyecto (1) o include nuestros más nuevos (2)
  • Si trabajamos en diferentes architectures (x86 / x64) tenemos que cambiar manualmente los files .csproj (2)
  • Se respondieron los mismos problemas para las references y los packages NuGet

y así. ¿Hay un flujo de trabajo adecuado que pueda usar?

Generalmente, la mejor práctica (como en esta respuesta ) es la de los files .sln y .csproj , pero la fusión requiere cierta atención.
Consulte " ¿Por qué se .csproj mis files .csproj después de una git rebase ? ".

*.csproj -text merge=union (vea abajo)
*.sln -text merge=union v

O puede renunciar a .csproj y regenerarlos localmente como en este tweet .
Otra razón para ignorar esos files csproj es si se regeneran, como en este context

yellowblood advierte ( en los comentarios ) sobre un problema grave de conflicto con el file csproj cuando se utiliza con la estrategia merge=union .
Eso se hace eco del artículo " Fusionar conflictos en files csproj ".
Es por eso que hay una sugerencia para que VS IDE admita patrones de files en los files del proyecto (para no modificar el file .csproj si se agrega un nuevo file .cs que se ajuste a ese patrón).

Se ha sugerido que si Visual Studio clasifica sus elementos primero, eso ayudaría a mitigar el problema.
Eso ayuda a networkingucir los conflictos incidentales causados ​​por el aparente tipo de elementos no deterministas de Visual Studio.
Pero no hace desaparecer el problema de los conflictos de fusión.

En nuestro proyecto los verificamos en el control de versiones. Comenzamos con .gitignore desde github y un file simple .gitattributes :

 # Auto detect text files and perform LF normalization * text=auto # Custom for Visual Studio *.cs diff=csharp 

Esto se debe a que la estrategia de fusión union puede ser peligrosa para estos files; consulte Combinar conflictos en files csproj para get detalles sobre por qué esto no siempre es seguro y probablemente no sea lo que usted desea.

Generalmente obtendrá conflictos de combinación todo el time, pero son realmente fáciles de manejar rápidamente en Visual Studio. Un caso de ejemplo es agregar un nuevo proyecto vacío a una solución y comprometerlo, y luego tener varios miembros del equipo agregar diferentes files al proyecto.

En teoría, podría tener definido un controller de combinación personalizado que maneje mejor las combinaciones de xml, pero aún no lo he visto nadie más.