2010-01-06 2 views
13

Kann ich Haken für "Pull"/"Push" ing von/zu einem git-svn verwalteten Repository?Hooks für git-svn

Die Situation ist, dass ich einen Projekt-Host auf Google Code habe, und git verwenden, um die lokale Arbeitskopie zu verwalten. Ich möchte ein paar Haken so einzustellen, dass wenn/out Datenprüfung in vom/zum SVN-Repository mit git svn fetch und git svn dcommit ich dem Fest einige Änderungen machen kann. Da ich nicht das SVN-Repository Host kann ich nicht Haken auf der Server-Seite eingestellt.

Gibt es einen Haken ich verwenden könnte? Oder gibt es eine Möglichkeit, eine gewöhnliche Verzweigung zu "markieren", so dass git pull und git push auf dieser Verzweigung stattdessen ein/aus einem SVN-Repository ein-/auschecken, also könnten die normalen Git-Hooks verwendet werden?

Vielen Dank im Voraus.

Antwort

9

Wie durch this thread veranschaulicht, können Sie Haken auf der Subversion-Seite haben, die Ihre git svn dcommit basierend auf einigen Kriterien tatsächlich ablehnen kann.

Aber wenn Sie Git Haken auf der Git-Seite benötigen, würde ich empfehlen, ein Zwischenprodukt bare Git repository (blank für einfachen Push/Pull).
An diesem nackten Repo, können Sie jeden Haken, die Sie brauchen, wie in „how do I deploy multiple branches to different directories via git push?“ (nicht über SVN aber nur hier zum Detail eine ähnliche Einrichtung eines zusätzlichen Repo)

  • gezeigt, wenn die Zwischen Repo Ihre validieren drücken, könnte es die git svn dcommit auslösen.
  • es kann auch, auf einem git fetch Anfrage, lösen eine git svn fetch und validieren, bevor Sie Ihre eigenen git fetch erlaubt vorwärts zu bewegen. (2 Jahre später)

David Souther schlägt eine Lösung in his blog (April 2012)

Die Lösung, die ich habe, ist ein Repository mit geteiltem Kopf zu haben. Meistens wird das Zwischenrepository ein leeres Arbeitsverzeichnis haben. Wenn ein Stoß geschieht, wird es Master überprüfen, überprüfen Sie die Build-und Push-to-svn, bevor sie an den leeren Zweig zurück.

Wir werden ein intermediate Git Repo mit zwei Zweigen einrichten.

  • Meister wird immer noch zum SVN-Repo-Punkt,
  • und die neue Niederlassung stage werden uns das Arbeitsverzeichnis sauber und synchron mit nachgeschalteter Änderungen halten lassen.

prüfen his gist aus.

+0

Brilliant! Ein Zwischenspeicher wird mein Problem lösen. Aber ich möchte die Frage für ein paar Tage offen lassen, um zu sehen, ob es eine elegantere Lösung gibt :) – iamamac

+0

@lamamac: absolut. Das ist, was ein Kopfgeld ist;) – VonC

+0

"es kann auch, auf einem Git fetch Anfrage, triggern ein Git Svn holen und validieren" - Welchen Haken würdest du dafür verwenden - ich kann nichts Offensichtliches in githooks sehen, das würde auf dem Server ausgelöst werden, wenn der Client versucht, zu ziehen. – Greg

0

Es ist ein git-remote-cvs remote helper in Arbeit; Vermutlich wird jemand dasselbe für svn tun. Normale Hooks für Remote-Operationen sollten vor und nach dem Aufruf dieser Helfer aufgerufen werden.

3

https://github.com/hkjels/.dotfiles/blob/master/zsh/git-svn.zsh

Wenn Sie zsh verwenden, ich glaube, das ist ein guter Begleiter für git-svn ist. Setzen Sie Ihre Hooks einfach in .git/hooks und setzen Sie den Befehl mit svn- voran.

ZB ".git/hooks/post-svn-rebase"

Das Skript ermöglicht auch die Verwendung von Alias-Namen

+0

Jemand hat diese Bash-Version basierend auf diesem zsh-Skript hier erstellt: https://github.com/rkitover/git-svn-hooks – tutuDajuju