Come rendere Subversion (o qualsiasi altro programma) eseguire commit periodici?

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

  •  09-09-2019
  •  | 
  •  

Domanda

Voglio configurare il mio computer in modo che dicono ogni mezz'ora si impegna automaticamente il programma sto lavorando. Sto usando un repository svn quindi, anche se era solo uno script che correva 'svn ci' ogni 30 minuti, che sarebbe a posto. Il problema è che non so come fare.

Qualcuno potrebbe dirmi o indicarmi qualcosa, che mi permetteva di ottenere questo periodica commettono roba di lavoro?

Grazie in anticipo.

EDIT: Scusate sembra che io ho gente confusa sul motivo per cui vorrei fare questo. L'unico motivo che voglio fare questo è perché un docente di mine noi vuole sapere come il nostro codice si sviluppa nel tempo e ho pensato che sarebbe una grande idea di usare svn per questo scopo. Non importa se l'ultima commettere opere oppure no. Ha solo per mostrare i cambiamenti che ho apportate al codice nel corso del tempo.

È stato utile?

Soluzione

Non vorrei sporca il sistema di controllo di versione con una tale serie di auto si impegna. Ma sono d'accordo con l'idea di utilizzare un sistema di controllo di versione per fornire tali informazioni.

Quindi, il mio suggerimento è: utilizzare un repository per il software e un altro per il deposito impegna l'auto. Quando il lavoro è fatto, unire tutti i commit di auto nel repository principale in una sola commettere logica.

Con git, vorrei fare questo:

  1. Repo 'foo': il repository principale
    1. refs / teste / ...: la posizione dei rami di sviluppo
    2. refs / sessioni / ...:. La posizione del vostro lavoro con commit sporchi
  2. La copia di lavoro:
    1. "git init"
    2. "git add remoto foo git: // foo / ...; git fetch foo"
  3. creare il ramo: "git checkout -b foo bar / master"
  4. tag l'inizio del ramo: "git tag barbegin"
  5. attivare lo script: "while true; do git add -A; git commit -m 'autocommit'; done".
  6. Non vorrei usare un job cron, in modo da poter attivare / disattivare le autocommits facilmente.
  7. fare il tuo lavoro
  8. dopo che il lavoro fatto, disattivare lo script
  9. modifiche impegnarsi in sospeso
  10. Ora, si ha un sacco di auto si impegna in bar ramo, e vi hanno etichettato l'iniziale commit del ramo con barbegin
  11. pubblicare la vostra auto si impegna:
    1. "git tag Barend"
    2. "git push foo barbegin: refs / sessioni / l'id utente / l'id di sessione / inizio"
    3. "git push foo Barend: refs / sessioni / l'id utente / l'id di sessione / fine"
  12. ora, hai pubblicato il tuo lavoro e il tuo docente può accedervi
  13. per l'aggiornamento repository foo:
    1. "git rebase -i --onto barbegin barbegin" e procedere come descritto qui
    2. Mi schiaccio tutti i commit: "alla fine, non ci può essere un solo"
    3. .
    4. "git barra di spinta foo: master" # sola commettere sarà spinto
  14. Pulizia:
    1. "tag git barbegin -d"
    2. "tag git Barend -d"
    3. "git branch -d bar"

Dopo tutto questo, penso che nessuna informazione utile possono essere raccolte con questo tipo di dati. Quindi, vorrei cercare di evitare questo flusso di lavoro. Ma se realmente necessario, avrei fatto in quel modo.

Altri suggerimenti

Contrariamente all'opinione popolare apparente, credo che questo sia un grande uso di svn, nel contesto della cessione.

strumenti come kdesvn (o, meglio ancora, TortoiseSVN, ma questo è solo su Windows) potrebbe dare grande intuizione in quello che sta succedendo con i loro punti di vista di log, diff e la colpa immagini.

Se stai usando Ubuntu, eseguire questo script bash da una console che è separata a quello su cui stai lavorando.

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

        # Wait until next commit time
        sleep 1800
done

Si potrebbe provare un job cron che esegue uno script di shell. Quale sistema operativo stai?

Ma io sono curioso di sapere il motivo per cui ci si vuole fare questo. I vostri commit dovrebbero consistere in pezzi di funzionalità o di correzioni di bug, e non sulla base di un intervallo di tempo. È molto probabile che impegnarsi nel bel mezzo di un cambiamento (su un gruppo di file), che renderà le vostre revisioni inutili.

Non credo che l'impostazione commit su un programma a tempo è particolarmente buona idea. Soprattutto se si avvia sempre in testing e l'integrazione continua. Impegnandosi a intervalli prestabiliti si romperà la build perché non v'è alcuna garanzia che avrete completato l'insieme di modifiche nel lasso di tempo.

Un modo migliore, se si vuole auto-commit è quello di rendere la parte del processo di generazione impegnarsi. Basta fare l'ultimo passo del processo di generazione di un commit al repository. In questo modo, se la build non riesce, non sarà commettere spazzatura.

Completamente possibile con tutte le versioni di marca e so che Visual Studio ha pre e post costruire eventi che possono essere impostati per fare qualcosa di simile. Quindi sono abbastanza sicuro che la maggior parte IDE moderno in grado di gestire questo.

Come una considerazione speciale per questo problema in particolare:
Spostare il commit hook per l'inizio del processo in modo da poter tenere traccia di quando si fa confusione regalmente come bene e come si arriva a correggere gli errori.

Vorrei usare Subversion, ma vorrei invece solo prendere l'abitudine di lavorare su singole modifiche, e quelli comitting in un repository.

In questo modo il docente, se vuole, può guardare non solo cosa è cambiato, ma perché è cambiato. Questo sarebbe molto più utile immagino.

Se si esegue su un sapore di UNIX è consigliabile creare un cron lavoro per eseguire i comandi a intervalli regolari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top