2009-04-17 12 views
8

Quiero configurar mi computadora para que digamos que cada media hora confirma automáticamente el programa en el que estoy trabajando. Estoy usando un repositorio svn, así que incluso si fuera solo un script que ejecutaba 'svn ci' cada 30 minutos, estaría bien. El problema es que no sé cómo hacer eso.¿Cómo hacer que Subversion (o cualquier programa) realice commits periódicos?

¿Podría alguien por favor decirme, o dirigirme a algo, que me permita trabajar en esta confirmación periódica?

Gracias de antemano.

EDIT: Perdón, parece que he confundido a la gente sobre por qué querría hacer esto. La única razón por la que quiero hacer esto es porque un profesor mío quiere que sepamos cómo nuestro código se desarrolla con el tiempo y pensé que sería una gran idea usar svn para este propósito. No importa si el último compromiso funciona o no. Solo tiene que mostrar los cambios que he realizado en el código a lo largo del tiempo.

+0

¿Quieres comprobar en el código automáticamente cada 30 minutos? ¿Porqué querrías eso? –

+0

Explicación dada. –

+0

Sus confirmaciones regulares también mostrarán una línea de tiempo de cómo se desarrolló el código, y también incluirá comentarios útiles. Si solo quiere una instantánea de todo lo que cambia, solo use algo como el historial local de Eclipse o Time Machine en la Mac. – Thilo

Respuesta

5

No ensuciaría su sistema de versiones de control con tales series de confirmaciones automáticas. Pero estoy de acuerdo con la idea de usar un sistema de versión de control para proporcionar esa información.

Luego, mi sugerencia es: use un repositorio para su software y otro para almacenar el auto confirma. Cuando finalice el trabajo, combine todas las confirmaciones automáticas en el repositorio principal en solo una confirmación lógica.

con Git, Me gustaría hacer esto:

  1. Repo 'foo': el repositorio principal
    1. refs/heads/...: la ubicación de sus ramas de desarrollo
    2. árbitros/sessions/...: la ubicación de su trabajo con commits sucios.
  2. su copia de trabajo:
    1. "git init"
    2. "git remote add git foo: // foo/...; git fetch foo"
  3. crear la rama : "git checkout -b foo bar/maestro"
  4. etiqueta el comienzo de la rama: "git tag barbegin"
  5. activar la secuencia de comandos:. "aunque es verdad; hacer git add -A; git commit -m autocomm' eso'; hecho"
  6. No utilizaría una tarea programada, por lo que se puede activar/desactivar las autocommits fácilmente.
  7. hacer su trabajo
  8. después de realizar su trabajo, desactive el guión
  9. cometen los cambios pendientes
  10. ahora , que tiene una gran cantidad de automóviles se compromete en la barra de rama, y ​​hemos marcado el primer commit de la rama con barbegin
  11. publicar su automóvil se compromete:
    1. "git tag barend"
    2. "git push foo barbegin: refs/sesiones/su nombre de usuario/ID de sesión/comienzan"
    3. "git push foo barend: refs/sesiones/su id de usuario/la sesión/Identificación del fin"
  12. ahora, se han publicado su trabajo y su profesor puede acceder a él
  13. para la actualización de su repositorio foo:
    1. "git rebase -i --onto barbegin barbegin" y proceder como se describe here
    2. lo haría aplastar todos los comunicados es: "al final, solo puede haber uno".
    3. "git barra de empuje foo: master" # cometer un solo serán empujados
  14. de limpieza:
    1. "git tag barbegin -d"
    2. "git tag barend -d"
    3. "git branch -d bar"

Después de todo esto, creo que no i útil información puede ser recopilada con ese tipo de datos. Entonces, trataría de evitar este flujo de trabajo. Pero si realmente lo necesitara, lo haría de esa manera.

1

Si está ejecutando un estilo de UNIX, considere crear un trabajo cron para ejecutar comandos en un intervalo regular.

6

Puede probar un trabajo cron que ejecute un script de shell. ¿En qué SO estás?

Pero tengo curiosidad por saber por qué querrías hacer esto. Sus confirmaciones deben consistir en piezas de funcionalidad o correcciones de errores, y no en un intervalo de tiempo. Es probable que se comprometa en medio de un cambio (en un grupo de archivos) que hará que sus revisiones sean inútiles.

+0

Ejecuto Ubuntu Linux (GNU/Linux) si quieres ser exigente. Y expliqué en la edición que es el conferencista el que quiere que veamos cambios a lo largo del tiempo (aunque no recomendó svn; esa fue mi idea). Sé que esta es una mala práctica de programación, pero creo que hará lo que yo quiera. Buscando trabajos cron ahora. –

+0

En una nota similar: en lugar de utilizar SVN incorrectamente, también podría simplemente enviar todos los archivos a un servidor FTP en intervalos regulares. – Joey

+0

No es una subversión incorrecta. ¿Cómo verá los cambios a lo largo del tiempo si usa FTP? –

5

No creo que establecer compromisos en un horario programado sea una idea particularmente buena. Especialmente si comienza a realizar pruebas y una integración continua. Comprometerse en intervalos establecidos romperá la construcción porque no hay garantía de que haya completado el conjunto de cambios en el marco de tiempo.

Una mejor manera, si desea autocomprometir es hacer la parte de confirmación del proceso de compilación. Simplemente haga que el último paso del proceso de compilación se comprometa con el repositorio. De esta forma, si falla la construcción, no cometerás basura.

Totalmente posible con todos los sabores de la marca y sé que Visual Studio tiene eventos de compilación previa y posterior que pueden configurarse para hacer algo como esto. Así que estoy bastante seguro de que la mayoría de los IDE modernos pueden manejar esto.

Como una consideración especial para este problema en particular:
Mueva el gancho de compromiso al comienzo del proceso para que pueda rastrear también cuando se cometer un error real y cómo se corrigen los errores.

+0

+! este es un pronombre demostrativo vago. No creo que "cron" sea una buena idea. Es difícil decir dónde termina su publicación dado el orden de clasificación. – ojblass

+0

Estaba respondiendo a la pregunta en cuestión, no a ninguna de las respuestas. Pero veo lo que quieres decir. –

+0

Se me ha explicado por qué me gustaría esto. No es una buena práctica de codificación, pero mostraría un buen cambio en el escenario del tiempo. –

12

Contrariamente a la opinión popular aparente, creo que este es un gran uso de svn, en el contexto de la tarea.

Herramientas como kdesvn (o incluso mejor, tortoisesvn, pero eso solo en Windows) pueden darle una gran idea de lo que está sucediendo con sus vistas de registro, diffs y culpar visuales.

Si está utilizando ubuntu, ejecute este script bash desde una consola que está separada de la que está trabajando.

#!/bin/bash 
while [ 1 ] 
do 
     # Do the commit 
     svn ci --message "Automated commit" ~/yourworkingcopy 

     # Wait until next commit time 
     sleep 1800 
done 
+0

+ 1 para la secuencia de comandos. Gracias. –

2

me gustaría utilizar Subversion, pero yo en su lugar sólo entrar en el hábito de trabajar en los cambios individuales, y los comitting a un repositorio.

De esta manera el profesor, si quiere, puede mirar no sólo lo cambiado, pero qué se cambió. Esto sería mucho más útil, me imagino.

Cuestiones relacionadas