Como fazer Subversion (ou qualquer outro programa) realizar commits periódicas?

StackOverflow https://stackoverflow.com/questions/758916

  •  09-09-2019
  •  | 
  •  

Pergunta

Eu quero configurar meu computador para que dizer a cada meia hora se compromete automaticamente o programa que eu estou trabalhando. Eu estou usando um repositório SVN por isso mesmo que era apenas um script que correu 'svn ci' a cada 30 minutos que ficaria bem. O problema é que eu não sei como fazer isso.

Poderia alguém por favor me diga, ou dirigir-me a algo, que me deixaria este periódica cometer trabalho material?

Agradecemos antecipadamente.

EDIT: Desculpe, parece que eu ter confundido as pessoas a respeito de porque eu iria querer fazer isso. A única razão que eu quero fazer isso é porque um professor meu nos quer saber como o nosso código desenvolve ao longo do tempo e pensei que seria uma ótima idéia usar o SVN para esta finalidade. Não importa se o mais recente cometer obras ou não. Ele só tem que mostrar as mudanças que eu fiz para o código ao longo do tempo.

Foi útil?

Solução

Eu não faria isso suja o seu sistema de controle de versão com tais série de commits automóveis. Mas concordo com a idéia de usar um sistema de controle de versão para fornecer essa informação.

Então, minha sugestão é: usar um repositório para o seu software e outro para armazenar os commits automóveis. Quando o trabalho é feito, fundir todas as submissões de automóveis no repositório principal em apenas um cometer lógico.

Com git, eu faria isso:

  1. Repo 'foo': o principal repositório
    1. refs / heads / ...: a localização de seus ramos de desenvolvimento
    2. refs / sessões / ...:. A localização do seu trabalho com os commits sujos
  2. A sua cópia de trabalho:
    1. "git init"
    2. "git add remoto foo git: // foo / ...; git fetch foo"
  3. criar ramo: "git checkout -b bar foo / master"
  4. marca o início do ramo: "tag barbegin git"
  5. ativar o script: "while true; fazer git add -A; git commit -m 'autocommit'; feito".
  6. Eu não usaria um trabalho cron, para que possa activar / desactivar os autocommits facilmente.
  7. fazer o seu trabalho
  8. após o seu trabalho, desativar o script
  9. confirmar as alterações pendentes
  10. Agora, você tem um monte de auto commits em bar ramo, e você tiver marcado comprometer a inicial do ramo com barbegin
  11. publicar seus commits auto:
    1. "git tag barend"
    2. "git barbegin impulso foo: refs / sessões / sua identificação de usuário / a id de sessão / começar"
    3. "git barend impulso foo: refs / sessões / sua identificação de usuário / a id de sessão / fim"
  12. Agora, você publicou seu trabalho e seu professor pode acessá-lo
  13. para atualização seu repositório foo:
    1. "git rebase -i --onto barbegin barbegin" e proceda conforme descrito aqui
    2. Eu esmagar todas as submissões:. "No final, só pode haver um"
    3. "git barra de empurrar foo: mestre" # único cometer será empurrado
  14. limpeza:
    1. "tag git barbegin -d"
    2. "tag git barend -d"
    3. "git bar -d ramo"

Depois de tudo isso, eu acho que nenhuma informação útil podem ser reunidos com esse tipo de dados. Então, eu tentaria evitar este fluxo de trabalho. Mas, se realmente necessário, eu faria dessa forma.

Outras dicas

Ao contrário da opinião popular de que aparentemente, eu acho que este é um grande uso de SVN, no contexto da atribuição.

Ferramentas como kdesvn (ou melhor ainda, tortoisesvn, mas isso é apenas no Windows) pode dar-lhe uma grande visão sobre o que está acontecendo com suas opiniões de log, diffs e visuais culpa.

Se você estiver usando o Ubuntu, execute esse script bash a partir de um console que de separar ao que você está trabalhando.

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

        # Wait until next commit time
        sleep 1800
done

Você poderia tentar um trabalho cron que executa um script shell. Qual OS você está?

Mas estou curioso para saber por que você iria querer fazer isso. Seus commits deve ser composto de peças de funcionalidade ou correções de bugs, e não com base em um intervalo de tempo. É provável que você cometer no meio de uma mudança (em um grupo de arquivos) que irá processar suas revisões inútil.

Eu não acho que a criação commits em um horário cronometrado é particularmente uma boa idéia. Especialmente se você começar a entrar em testes e integração contínua. Cometer em intervalos definidos irá quebrar a construir, porque não há garantia de que você terá completado o conjunto de alterações no espaço de tempo.

A melhor maneira, se você quiser auto-commit é fazer com que a parte do próprio processo de construção cometer. Basta fazer a última etapa do processo de construção de uma confirmação para o repositório. Dessa forma, se a construção falhar, você não vai cometer lixo.

Totalmente possível com todos os sabores da marca e eu sei que Visual Studio tem pré e pós eventos de compilação que podem ser configurados para fazer algo assim. Então, eu tenho certeza que a maioria das IDEs modernos podem lidar com isso.

Como uma consideração especial para este problema em particular:
Mova o gancho comprometer com o início do processo para que você possa controlar quando você asneira regiamente bem e como você vem para corrigir os erros.

Gostaria de usar Subversion, mas, ao invés, é só pegar o hábito de trabalhar em mudanças individuais e comitting aqueles para um repositório.

Desta forma, o professor, se ele quiser, pode olhar não só o mudado, mas por isso mudou. Isso seria muito mais útil que eu poderia imaginar.

Se você estiver executando em um sabor de UNIX considere criar um cron trabalho para executar comandos em um intervalo regular.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top