¿Cuáles son las mejores prácticas de gestión de configuration y control de fuente?

Estoy pensando en una list a la que podría referir a otros desarrolladores con cosas como:

  1. Un script de construcción, como makefile , buildá y probará todo el proyecto
  2. Todos los componentes necesarios para build el sistema necesitan ser controlados por la fuente

Alguien tiene tal list? En order de prioridad?


ACTUALIZACIÓN: agregó algunos detalles de FYI

El sistema en cuestión consiste en C ++ y makefiles, Java con ant que da como resultado WAR, así como componentes de powerbuilder y C # gui. Todo el código es forzosamente

Por lo tanto, estoy buscando prácticas recomendadas genéricas y específicas del idioma.

Para mí, la regla # 1 es esta:

La twig principal es sagrada: siempre debe ser edificable, capaz de pasar los BVT y ser básicamente utilizable.

Cualquier código que se permite entrar en la twig principal que causa una compilation o ruptura de BVT expone un error en el process. El process debería permitir comstackciones / testings de compilation para sistemas de twig individuales, o requerir que las twigs secundarias construyan y superen los BVT antes de fusionarse en la twig principal, u otras protecciones similares.

Eche un vistazo a las mejores prácticas de alto nivel en Administración de configuration de software .

Esto es altamente dependiente de en qué entorno estás construyendo?

  • ¿Es C / MakeFile?
  • ¿Es Java / JUnit / Ant?
  • ¿Es .NET / NUnit / NAnt?
  • ¿Es .NET / MSUnit / MSBuild?
  • Es Ruby …
  • Es Python …
  • Es PHP

Cada uno de estos difiere en enfoque y configuration. Por lo tanto, necesitamos conocer su configuration antes de que pueda ser ayudado.

Mi artículo número uno:

  • Actualiza a menudo, cometer a menudo,

o, como dice Jeff, es: Regístrese temprano, Regístrese con frecuencia .

El sistema debe comstackrse por sí mismo, probarse solo y download dependencies de compilation por sí mismo. Tengo un makefile descargando, construyendo y desplegando un entorno de time de ejecución que está "certificate" para mi versión troncal. Este file MAKE está comprometido también en el repository.

Restring cometer otra cosa muy importante y sobre todo pasada por alto (viene en un package de tres):

  • El código SQL que crea el layout de su database (¡ponga una versión en él!).
  • El código SQL que muestra su versión de layout de database (para actualizar)
  • El código SQL que networkinguce su versión de layout de database (para degradar)

Si pasa esas preguntas de la "Prueba de Joel", debe estar en el path correcto:

¿Usas control de fuente?
Haces contrucciones todos los dias.
¿Tienes una database de errores?
¿Tú arreglas los errores antes de escribir un nuevo código?

Mi número 1 es: ¿Puedes build en un solo paso?

La testing Joel

Todo el process de "get lo último" y "build" debe ser sencillo, fácil, rápido y confiable.

Si no, los desarrolladores tienden a omitir get lo último y seguir trabajando en sus copys obsoletas, y eso es algo que desea evitar.

Esto es más o less lo que Michael dijo, pero quiero enfatizar que más allá de que la twig sea sagrada y estable, todo el process debería ser rápido y fácil.

Algo así como la filosofía de Google de que las descargas / instalaciones deberían ser rápidas y fáciles

Siendo un gerente de SCM, la mejor respuesta que puedo darte sobre esta pregunta es "depende". La list y el order de importancia de los elementos de la list dependerán de los requisitos de su proyecto, el idioma que esté utilizando y el nivel de desarrollador.

Una cosa que es posible que desee considerar importante (o n. ° 1) en CUALQUIER list que prepare es que el tronco o la twig principal de su herramienta estén MUY controlados y solo unos pocos muy selectos tengan acceso para importar o confirmar cambios en eso. Esto ahorrará un montón de dolores de cabeza en el momento de la liberación.

Los elementos que pueden estar en cualquier list que juntas son:

  • Cuándo hacer el check-in (diario, semanal, más a menudo, con less frecuencia)
  • Cuando las construcciones están hechas (diariamente, semanalmente, etc.)
  • Uso de repositorys dobles (ingeniería vs producción)
  • Permitir binarys en el repository
  • Permitir software de terceros en el repository
  • Todos los elementos necesarios para build en repository
  • Cuando se realizan las importaciones o se compromete al tronco
  • Usa un file para exportar y build
  • Permitir el check-in con / sin información de informe de errores
  • Aplicar los estándares de comentarios de check-in

La list puede seguir y seguir dependiendo de sus requisitos específicos, pero creo que tiene una idea general de lo que hay aquí.