Wie kann Subversion (oder ein Programm) periodische Commits ausführen?

8

Ich möchte meinen Computer so konfigurieren, dass er jede halbe Stunde automatisch das Programm schreibt, an dem ich gerade arbeite. Ich benutze ein SVN-Repository, selbst wenn es nur ein Skript wäre, das 'svn ci' alle 30 Minuten ausführt, wäre das in Ordnung. Das Problem ist, dass ich nicht weiß, wie das geht.

Könnte jemand mir bitte etwas sagen oder mich zu etwas führen, das mich dazu bringen könnte, dieses periodische Commit-Zeug zu benutzen?

Vielen Dank im Voraus.

EDIT: Es tut mir leid, dass ich Leute verwirrt habe, warum ich das machen möchte. Der einzige Grund, warum ich das machen möchte, ist, weil ein Dozent von mir möchte, dass wir wissen, wie sich unser Code im Laufe der Zeit entwickelt, und ich dachte, dass es eine großartige Idee wäre, svn für diesen Zweck zu verwenden. Es spielt keine Rolle, ob das letzte Commit funktioniert oder nicht. Es muss nur die Änderungen zeigen, die ich im Laufe der Zeit am Code vorgenommen habe.

    
Robert Massaioli 17.04.2009, 03:38
quelle

7 Antworten

5

Ich würde Ihr Control-Versions-System mit solchen Serien von Auto-Commits nicht verschmutzen. Aber ich stimme der Idee zu, ein Kontrollversionssystem zu verwenden, um diese Information zur Verfügung zu stellen.

Dann ist mein Vorschlag: Verwenden Sie ein Repository für Ihre Software und ein anderes, um die automatischen Commits zu speichern. Wenn die Arbeit abgeschlossen ist, führen Sie alle automatischen Commits im Haupt-Repository in nur einem logischen Commit zusammen.

Mit git würde ich das tun:

  1. Repo 'foo': das Haupt-Repository
    1. refs / heads / ...: Der Standort Ihrer Entwicklungszweige
    2. refs / sessions / ...: Der Ort Ihrer Arbeit mit schmutzigen Commits.
  2. Ihre Arbeitskopie:
    1. "git init"
    2. "git remote foo hinzufügen git: // foo / ...; git fetch foo"
  3. Erstellen Sie den Zweig: "git checkout -b bar foo / master"
  4. Markieren Sie den Beginn der Branche: "git tag grillgin"
  5. Aktivieren Sie das Skript: "while true; do git add -A.; git commit -m 'autocommit'; done"
  6. Ich würde keinen Cron-Job verwenden, damit Sie die Autocommits einfach aktivieren / deaktivieren können.
  7. mach deinen Job
  8. nachdem Sie Ihre Arbeit erledigt haben, deaktivieren Sie das Skript
  9. ausstehende Änderungen bestätigen
  10. Jetzt haben Sie viele automatische Commits in der Zweigleiste, und Sie haben das erste Commit der Zweigstelle mit barbegin
  11. getaggt
  12. Veröffentlichen Sie Ihre automatischen Commits:
    1. "git tag barend"
    2. "git push foo barbegin: refs / sessions / deine Benutzerkennung / die Sitzungs-ID / begin"
    3. "git push foo barend: refs / sessions / Ihre Benutzer-ID / die Session-ID / end"
  13. Nun haben Sie Ihre Arbeit veröffentlicht und Ihr Dozent kann darauf zugreifen
  14. zum Aktualisieren Ihres foo-Repositorys:
    1. "git rebase -i --onto grillgine barbegin" und weiter wie beschrieben hier
    2. Ich würde alle Commits quetschen: "Am Ende kann es nur einen geben".
    3. "git push foo bar: master" # nur ein Commit wird gedrückt
  15. Reinigung:
    1. "git tag -d barbegin"
    2. "git tag -d barend"
    3. "git branch -d bar"

Nach alldem denke ich, dass mit solchen Daten keine nützlichen Informationen gesammelt werden können. Also würde ich versuchen, diesen Workflow zu vermeiden. Aber wenn es wirklich nötig wäre, würde ich das tun.

    
Daniel Fanjul 17.04.2009, 11:44
quelle
12

Entgegen der allgemein verbreiteten Meinung, denke ich, ist dies eine große Verwendung von svn, im Zusammenhang mit der Aufgabe.

Werkzeuge wie kdesvn (oder besser noch, tortoisesvn, aber das ist nur unter Windows) könnten Ihnen einen guten Einblick geben, was mit ihren Log-Ansichten, Diffs und visuellen Fehlern passiert.

Wenn Sie ubuntu verwenden, führen Sie dieses Bash-Skript von einer Konsole aus, die von der Konsole getrennt ist, an der Sie gerade arbeiten.

%Vor%     
Jim T 17.04.2009 08:27
quelle
6

Sie könnten einen Cron-Job versuchen, der ein Shell-Skript ausführt. Auf welchem ​​Betriebssystem arbeiten Sie?

Aber ich bin neugierig, warum Sie das tun wollen. Ihre Commits sollten aus Funktionen oder Fehlerbehebungen bestehen und nicht auf einem Zeitintervall basieren. Sie werden wahrscheinlich mitten in einer Änderung (bei einer Gruppe von Dateien) festschreiben, was Ihre Revisionen nutzlos macht.

    
Brian Kelly 17.04.2009 03:42
quelle
5

Ich denke nicht, dass das Festlegen von Commits nach einem Zeitplan sehr sinnvoll ist. Vor allem, wenn Sie in die Testphase und kontinuierliche Integration einsteigen. Das Commit in festgelegten Intervallen unterbricht den Build, da es keine Garantie gibt, dass Sie den Changeset im Zeitrahmen abgeschlossen haben.

Ein besserer Weg, wenn Sie automatisch committen wollen, ist das Commit-Teil des Build-Prozesses selbst zu machen. Machen Sie den letzten Schritt des Build-Prozesses zu einem Commit für das Repository. Auf diese Weise, wenn der Build fehlschlägt, werden Sie keinen Müll übergeben.

Völlig möglich mit allen Varianten von make und ich weiß, dass Visual Studio Pre- und Postbuild-Events hat, die so eingestellt werden können. Ich bin mir ziemlich sicher, dass die meisten modernen IDEs damit umgehen können.

Als besondere Berücksichtigung speziell für dieses Problem:
Bewegen Sie den Commit Hook an den Anfang des Prozesses, damit Sie verfolgen können, wann Sie auch königlich vermasseln und wie Sie die Fehler beheben.

    
Benjamin Autin 17.04.2009 03:45
quelle
2

Ich würde Subversion verwenden, aber ich würde mich stattdessen einfach daran gewöhnen, an einzelnen Änderungen zu arbeiten und diese an ein Repository zu übergeben.

Auf diese Weise kann der Dozent, wenn er will, nicht nur sehen, was sich geändert hat, sondern warum er sich geändert hat. Das wäre viel nützlicher, würde ich mir vorstellen.

    
quelle
2

Du kannst dieses Rezept ausprobieren: Ссылка

    
Jiri 10.02.2011 14:00
quelle
1

Wenn Sie mit einem UNIX-Stil arbeiten, sollten Sie einen Cron -Auftrag erstellen, um Befehle bei a auszuführen regelmäßiges Intervall.

    
ojblass 17.04.2009 03:41
quelle

Tags und Links