Pregunta

Si nuestra organización fueron a cambiar a partir de una central de servidor VCS como subversion para distribuida VCS como git, ¿cómo puedo asegurarme de que todo mi código es seguro de un fallo de hardware?

Con un centro servidor de VCS solo tengo una copia de seguridad del repositorio de todos los días.Si estamos usando un DVCS entonces habría cargas de código de ramas en todos los equipos de desarrollador, y si el hardware falla (o un dev fuera a perder su ordenador portátil o lo han robado) entonces no tendríamos ninguna copia de seguridad.

Tenga en cuenta que yo no la considero una buena opción para "hacer que los desarrolladores de inserción de las ramas a un servidor" -- que es tedioso y los desarrolladores terminan por no hacerlo.

Es allí una manera común en torno a este problema?

Algunas aclaraciones:

Con una nativa-central-servidor VCS, a continuación, todo tiene que estar en el servidor central, excepto el desarrollador de la mayoría de los cambios recientes.Así, por ejemplo, si un desarrollador decide rama para hacer una corrección, que la rama está en el servidor central y disponibles para la copia de seguridad inmediatamente.

Si estamos usando un DVCS, a continuación, el desarrollador puede hacer una sucursal local (y de hecho muchas ramas locales).Ninguna de esas ramas están en el servidor central y disponibles para la copia de seguridad hasta que el desarrollador piensa, "oh, sí, yo debería presionar a que el servidor central".

Así que la diferencia que yo estoy viendo (me corrigen si estoy equivocado!):La mitad implementado características y correcciones de errores probablemente no disponible para la copia de seguridad en el servidor central, si estamos usando un DVCS, pero con una normal VCS.Cómo puedo hacer que el código de seguridad?

¿Fue útil?

Solución

Creo que usted encontrará que en la práctica de los programadores prefieren usar un repositorio central de empujar y tirar entre uno y otro de los repositorios locales.Una vez que has clonado en un repositorio central, mientras se trabaja en cualquiera de seguimiento de las ramas, la captura y empujando son triviales comandos.Añadir la mitad de una docena de mandos a distancia para todos sus compañeros de' los repositorios locales es un dolor y que estos repositorios pueden no ser siempre accesible (apagado, en un ordenador portátil de la casa tomada, etc.).

En algún momento, si están todos trabajando en el mismo proyecto, todo el trabajo debe estar integrado.Esto significa que usted necesita una integración de la rama donde todos los cambios que vienen juntos.Esto, naturalmente, debe ser un lugar accesible para todos los desarrolladores, es que no nos pertenecen, por ejemplo, en el desarrollador principal de la computadora portátil.

Una vez hayas creado un repositorio central puede utilizar un cvs/svn estilo de flujo de trabajo para revisar y actualizar.cvs update se convierte en git fetch y reajuste si usted tiene cambios locales o simplemente git pull si no.cvs commit se convierte en git commit y git push.

Con esta configuración se encuentran en una posición similar con su totalmente centralizado VCS sistema.Una vez que los desarrolladores de presentar sus cambios (git push), que tienen que hacer para que sea visible para el resto del equipo, que están en el servidor central y se hará copia de seguridad.

Lo que tiene la disciplina en ambos casos es la prevención de los desarrolladores de mantenimiento de larga ejecución de los cambios de la base de datos central.La mayoría de nosotros probablemente hemos trabajado en una situación en la que un desarrollador está trabajando en función de " x " que necesita un cambio fundamental en algunos de código del núcleo.El cambio hará que todos los demás a la necesidad de reconstruir completamente, pero la función no está listo para la corriente principal, sin embargo, tan solo se mantiene comprobado hasta un punto adecuado en el tiempo.

La situación es muy similar en ambas situaciones, aunque hay algunas diferencias prácticas.El uso de git, porque se llega a realizar el local se compromete y se puede gestionar de la historia local, la necesidad de empujar el repositorio central no puede ser sentida como mucho por el desarrollador individual como con algo como cvs.

Por otro lado, el uso de locales compromete puede ser utilizado como una ventaja.Empujar a todos los locales se compromete a un lugar seguro en el repositorio central no debe ser muy difícil.Las ramas locales pueden ser almacenados en un promotor específico de la etiqueta del espacio de nombres.

Por ejemplo, para Joe Bloggs, Un alias puede ser hecho en su repositorio local para realizar algo como lo siguiente en respuesta a (por ejemplo) git mybackup.

git push origin +refs/heads/*:refs/jbloggs/*

Este es un comando que puede ser utilizado en cualquier momento (como el final del día) para asegurarse de que todos sus cambios locales son una copia de seguridad.

Esto ayuda con todo tipo de desastres.Joe la máquina de golpes y él puede usar otra máquina y la captura se guarda compromete y continuar desde donde lo dejó.Joe enfermo?Fred puede obtener de Joe ramas para agarrar a los que "deben tener" revisión que hizo ayer, pero no tuve oportunidad de poner a prueba contra el maestro.

Para volver a la pregunta original.No hay necesidad de ser una diferencia entre los dVCS y centralizado de la VCS?Usted dice que la mitad implementado características y correcciones de errores no va a terminar en el repositorio central en el dVCS caso, pero yo afirmaría que no hay diferencia.

He visto muchos casos donde una mitad de una característica implementada permanece en uno de los desarrolladores de trabajo cuadro cuando se utiliza centralizado VCS.Se toma una política que permite a la mitad por escrito las características de ser facturado a la corriente principal o una decisión tiene que ser hecha para crear una rama central.

En los dVCS la misma cosa puede suceder, pero la misma debe ser tomada.Si no es importante, pero incompleta trabajo, tiene que ser guardados de forma centralizada.La ventaja de git es que la creación de esta rama central es casi trivial.

Otros consejos

Creo que es una falacia que el uso de un distribuida VCS necesariamente significa que usted debe utilizar en un completamente distribuido de la moda.Es completamente válido para establecer un común repositorio git y decirle a todo el mundo que el repositorio es la oficial.Para el desarrollo normal de flujo de trabajo, los desarrolladores se tire de los cambios del repositorio común y la actualización de sus propios repositorios.Sólo en el caso de dos desarrolladores que colaboran activamente con una característica específica puede que tenga que tirar de los cambios directamente de uno a otro.

Con más de un par de desarrolladores que trabajan en un proyecto, en serio tedioso tener que recordar a tirar de los cambios de todos los demás.¿Qué haría usted si usted no tener un repositorio central?

En el trabajo tenemos una solución de copia de seguridad que realiza copias de seguridad de todos los directorios de trabajo diario, y escribe todo el lote a un DVD semanal.Así que, aunque tenemos un repositorio central, cada uno es la copia de seguridad.

No es infrecuente el uso de una "central" de servidor como una autoridad en DVCS, que también proporciona el lugar para hacer sus copias de seguridad.

Me parece que esta pregunta sea un poco extraño.Asumiendo que usted está utilizando una no-distribuido sistema de control de versiones como CVS, usted tendrá un repositorio en el servidor central y los trabajos en curso de los desarrolladores de servidores.Cómo hacer copia de seguridad del repositorio?Cómo hacer copia de seguridad de los desarrolladores de trabajo en progreso?La respuesta a esas preguntas es exactamente lo que tienes que hacer para manejar su pregunta.

El uso de control de versiones distribuido, repositorios de los desarrolladores de servidores son un trabajo en progreso.¿Quieres una copia de seguridad?A continuación, copia de seguridad!Es tan simple como eso.

Tenemos un automatizado sistema de copia de seguridad que se agarra a cualquier directorios fuera de nuestras máquinas que se especifique, así que me agregue cualquiera de los repositorios y las copias de trabajo en mi máquina para que el pasado, incluyendo tanto git y los repositorios CVS.

Por cierto, si usted está usando un control de versiones distribuido en una empresa de la liberación de un producto, entonces usted se tener un repositorio central.Es la que la liberación de.Es posible que no esté en un servidor especial;podría ser en algún desarrollador de la unidad de disco duro.Pero el repositorio de liberación de la es el repositorio central.(Supongo que si no has liberado, sin embargo, puede que no tenga uno, sin embargo.) Yo siento que todos los proyectos tienen uno o más repositorios centrales.(Y realmente si tienen más de uno, se trata de dos proyectos y uno de ellos es un tenedor.) Esto va para los de código abierto.

Incluso si usted no tiene un repositorio central, la solución es la misma:copia de seguridad de trabajo de desarrollador de las máquinas.Usted debe haber estado haciendo eso de todos modos.El hecho de que el trabajo en progreso está en los repositorios distribuidos, en lugar de CVS copias de trabajo, o directamente nonversioned directorios es inmaterial.

Usted podría tener un revelador de los directorios de inicio de montaje remoto de los dispositivos en la red local.A continuación, usted sólo tiene que preocuparse de hacer la red de almacenamiento seguro.O tal vez usted podría usar algo como DropBox a la copia local de tu repo en otros lugares a la perfección.

Todos los desarrolladores en su equipo puede tener sus propias sucursales en el servidor (puede ser por boleto o simplemente por dev, etc).De esta manera no se rompen la construcción en la rama master, pero aún así llegar a empujar su trabajo en progreso para el servidor que se copia de seguridad.

Mi propia git_remote_branch la herramienta puede ser útil para ese tipo de flujo de trabajo (tenga en cuenta que se requiere de Ruby).Ayuda a la manipulación de sucursales remotas.

Como una nota del lado, hablando acerca de la repo de seguridad en su servidor puede configurar un post-commit gancho que hace un simple git clone o git push a otra máquina...Usted obtener hasta la fecha de copia de seguridad después de cada confirmación!

Podemos utilizar rsync para hacer copias de seguridad de los desarrolladores individuales .git directorios de un directorio en el servidor.Esta es la instalación mediante contenedor de secuencias de comandos de alrededor de git clone, y el post-commit etc.los ganchos.

Porque es hecho en el post-* ganchos, los desarrolladores no necesitan recordar para hacerlo manualmente.Y debido a que el uso de rsync con un tiempo de espera, si el servidor se cae o si el usuario está trabajando de forma remota, que todavía puede trabajar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top