El control de versiones debe contener el código y la configuración necesarios para compilar la aplicación.
Esto significa que:
Las cosas temporales que se introdujeron por un corto período de tiempo (el tiempo requerido para determinar la ubicación de un error, o para experimentar con una característica de un idioma, por ejemplo) no deberían estar en un control de versión: guárdelo hasta que lo necesite luego, simplemente elimínelo cuando haga el commit .
Los archivos locales que son propios de una máquina en particular se pueden guardar en una rama.
Evitaría mantenerlos solo localmente, ya que es demasiado doloroso rehacer todo esto cuando le roban su computadora portátil o un virus lo obliga a reinstalar el sistema operativo (y, por cierto, descubre que su última copia de seguridad se realizó hace dos años) .
Por otro lado, tenga cuidado con la estructura del archivo: la configuración local está bien, hasta que se vuelva abrumadora y lo obligue a hacer un solo cambio en cada archivo de cada uno de los 42 desarrolladores que participan en el proyecto.
Esté atento a la oportunidad de eliminar las particularidades entre las máquinas. Puede significar:
Otorgando acceso a un servidor SQL de desarrollo para reemplazar instancias locales en máquinas de desarrolladores,
Usando servicios de distribución de paquetes como Pypi o npm para paquetes públicos y sus contrapartes privadas para paquetes internos,
Solicite a los miembros del equipo que instalen las mismas versiones de software,
Hacer actualizaciones de software lo más transparente posible,
O haga posible implementar el sistema operativo y el software necesario en una máquina con un solo clic (más el tiempo para que cada desarrollador instale su Vim vs. Emacs preferido, Chrome vs. Firefox, etc.)
Asi que:
Archivos de proyecto Es posible que sea necesario editar las rutas para reflejar el diseño en la PC actual.
¿Por qué no usar el mismo diseño en cada PC? Las rutas dentro del proyecto deben estar relacionadas con el archivo del proyecto, lo que significa que no importa dónde se encuentre el proyecto. Es mejor que las versiones de software y bibliotecas sean las mismas para evitar errores crípticos que solo aparecen en algunas máquinas y que son imposibles de reproducir para otros miembros del equipo.
Ejemplo:
En un proyecto creado con Visual Studio, puede encontrar:
Los archivos mismos. Las rutas son relativas, no importa si en mi máquina, el proyecto está ubicado H:\Development\Hello World Project\mientras otros miembros del equipo lo registraron C:\Work\HelloWorld\.
Las dependencias, es decir, bibliotecas internas y de terceros. NuGet debe manejar ambos tipos, lo que hace que todas las discusiones relacionadas con conflictos sean obsoletas. Si no tiene la misma versión de la biblioteca que tengo, solicite a NuGet que actualice las dependencias. Tan simple como eso (cuando funciona bien, que no siempre es el caso).
Tenga en cuenta que también es crucial mantener las bibliotecas internas en un NuGet privado. Tener un montón de bibliotecas almacenadas en una carpeta compartida o enviadas por correo electrónico a través de un equipo conduce a la anarquía y a los servidores depresivos de CI.
La configuración. Es crucial que el equipo comparta la misma configuración. Si la mitad del equipo decide tratar las advertencias como errores y la mitad del equipo mantiene las advertencias como están, los miembros de la primera parte del equipo pasarán su tiempo eliminando las advertencias generadas por los desarrolladores de la segunda parte del equipo.
La configuración relacionada con las utilidades. Esos son complicados, porque algunos miembros del equipo pueden haber instalado algunas utilidades, mientras que otros no.
Se recomienda encarecidamente tener instalado el mismo conjunto de herramientas. Si algunos programadores quieren usar StyleCop, pero otros no, el equipo no hará el trabajo. Si algunos usan contratos de Código pero otros no, tendrán los mismos problemas.
Makefiles Por ejemplo, la optimización puede necesitar desactivarse durante la depuración, pero no para el servidor CI.
Mantenga varios makefiles en el control de versiones. No es inusual construir una versión de depuración en el servidor CI también y enviarla a un cliente que experimente un error complicado.
Hacks feos y sucios. Por ejemplo, devuelve 7 en el medio de una función, para probar algo, dependiendo de la función, y se sospecha que se rompe al valor de 7.
Evitaría ese código en primer lugar. Para probar algo, use pruebas unitarias. Si realmente toma unos segundos intercambiar algún código con el fin de depurar , entonces hágalo, pero de todos modos eliminará este código en unos minutos, por lo que no hay necesidad de confirmarlo.
Como lo describe, debe escribir una prueba. Por ejemplo, si quiere estar seguro de que:
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
lanza una excepción cuando temperaturees inferior a AbsoluteZeroconstante, no debes jugar con el código en sí. En su lugar, cree una prueba unitaria que:
- auto-documentar su código,
- aumentar la confiabilidad de su código,
- asegúrese de que los encargados del mantenimiento puedan confiar en las pruebas de regresión al modificar el método anterior,
- Servir a otros desarrolladores de su equipo que puedan necesitar hacer la misma prueba.