2012-03-28 16 views

Antwort

2

Pre-und Post-Commit-Haken verhalten sich anders (die Dokumentation im SVN red book über den Haken sehen und vor allem der Teil über implementing the hooks):

  • pre-commit: Überprüfen Sie, ob die begehen darf. Der Pre-Commit-Hook ist also nicht in der Lage, irgendetwas innerhalb des Commits zu ändern.
  • Post-Commit: Benachrichtigt über eine erfolgreiche Festschreibung.

Also keine Erwähnung der Chance, etwas zu ändern. Stattdessen gibt es einen Absatz im Abschnitt „Umsetzung der Haken“:

Während Hook-Scripts fast alles tun kann, gibt es eine Dimension in die Hook-Skript Autoren zurückhalten sollte: nicht ändern eine Transaktionscommit Verwenden von Hook-Skripten. Es könnte verlockend sein, Hook-Skripts zu verwenden, um Fehler, Mängel oder Richtlinienverstöße automatisch zu korrigieren, die in den Dateien vorliegen, die committed werden, so kann Probleme verursachen. Subversion behält clientseitige Caches bestimmter Bits von Repository-Daten bei, und wenn Sie eine Commit-Transaktion auf diese Weise ändern, werden diese Caches unmerklich veraltet. Diese Inkonsistenz kann zu einem überraschenden und unerwarteten Verhalten führen. Anstatt die Transaktion zu ändern, sollten Sie einfach die Transaktion im Pre-Commit-Hook validieren und die Festschreibung ablehnen, wenn sie die gewünschten Anforderungen nicht erfüllt. Als Bonus erfahren Ihre Benutzer den Wert von sorgfältigen, Compliance-orientierten Arbeitsgewohnheiten.

Also würde ich sagen, es ist nicht möglich oder zumindest empfohlen, das zu tun.

0

Während Mliebelt den richtigen Text zitierte, machte er schlechte Schlussfolgerung. Sogar zweimal:

  • Es wird in getan wird post-commit Haken
  • Es ist unmöglich, in Haken

    Wenn

Zweite Anweisung zu tun Haken post-commit wird umschreiben Datei nicht in diesem Commit enthalten, wird es einwandfrei funktionieren, die nichts brach.

erste Anweisung

Diese Lösung ist für eine Vielzahl von Gründen eindeutig schlecht:

  • Sie in Repository enthalten (um später darauf zu verweisen) Daten, die von Repositorys ist abhängig Datenänderungen, aber: jede Änderung der Daten in dieser Datei ändert auch den Status der Repository-Daten. Klassische Teufelskreis
  • erhöhen Sie Menge erforderlich Revisionen zweimal: nach jedem „Daten-Revision“ Sie müssen perform „Tracking-Revision“
  • Sie VCS wollen beschäftigt war, um andere Probleme, mehr anwendbar zu bauen -Bereitstellung von Werkzeugen für VCS diese Daten mit genug ist

Repository (oder Arbeitskopie) per se haben Informationen über die letzte Revision darin (svn info, svnversion, svn log -r HEAD), die Speicherung in Daten verletzt Ockhams Raroz. Sie haben nur Daten zu extrahieren, wenn Sie Daten für die Verwendung eines externen Repositorys veröffentlichen.

Welche Werkzeuge und wie zu benutzen ist schwer abhängig ab: Bereitstellung Workflow, OS (Sie haben nicht gaffen-grep-sed auf gewöhnlichen Win-Box), um nur einige Hinweise:

  • SubWCRev (Win (nur) von TortoiseSVN kann Arbeitskopien prüfen und Vorlagendateien verarbeiten, indem spezielle Schlüsselwörter von SubWCRev durch tatsächliche Werte ersetzt werden. SubWCRev hat Schwesterprojekte für Linux-world. Die Verwendung dieser Tools setzt voraus, dass die Template-Datei irgendwo gespeichert wird (innerhalb oder außerhalb des Repos) und das verarbeitete Ergebnis innerhalb der vorbereiteten Version speichert
  • svnversion und svnlook können in jedem Betriebssystem verwendet werden (für WC-Pfad und Repository-Pfad entsprechend)
  • )

Und endlich

  • Sie können innerhalb fi Verwendung Subversion Keywords Revisionsnummer innerhalb Repo, vergessen einfach nicht $ verwendet, dass die $ Revision für die Speicherung, le spiegelt Revision der letzten Änderungen in dieser Datei und Format nach der Expansion vordefinierten
0

Was Entwickler über erfordern die Datei selbst zu aktualisieren und dann ein pre-commit mit Skript Commits zu verweigern, wenn das Update nicht korrekt ist? Vielleicht ist die Einfügung einer Revisionsnummer eine Verantwortung, die besser in den eigenen Editor integriert wird oder Prozesse/Deploy-Skripts erstellt.

2

Klingt so, als ob Sie eine Build-Lösung benötigen, anstatt einen Pre-Commit-Hook. Mit einem Build-System wie Apache Ant können Sie die neueste Revisionsnummer aus dem Repository abrufen, wenn Sie Ihre Lösung für die Live-Umgebung vorbereiten.

Edit: Um Ihre Frage tatsächlich zu beantworten "ist es möglich mit einem pre/post-commit-hook dies zu tun?" Ja, es ist technisch möglich, aber wie bereits vorgeschlagen, sollte es vermieden werden.

Verwandte Themen