Ich verwende git-svn, um mit einem vorhandenen SVN-Repository zu interagieren, das einige C ++ - Projekte enthält. subwcrev.exe wird als Pre-Build-Ereignis verwendet, um einige Zeichenfolgen in einem C ++ - Header (svnversion.h) zu aktualisieren. Diese Zeichenfolgen werden hardcompiled, um einige Versionsinformationen für die resultierende Binärdatei zu erstellen.
Da subwcrev die Verwendung von .svn-Metadaten erfordert, wird das Pre-Build-Ereignis fehlschlagen, wenn es auf der Arbeitskopie git-svn verwendet wird. Also habe ich das folgende Bash-Skript entwickelt, das ich als Post-Commit- und Post-Checkout-Hooks für mein Git-Repository verwende. Das Skript versucht dasselbe wie subwcrev zu tun, basierend auf der Ausgabe von git svn info (zwischengespeichert in einer lokalen Datei).
%Vor%Was ich nicht wirklich emulieren kann, ist die automatische Erkennung von lokalen nicht festgeschriebenen Änderungen (basierend auf der letzten ausgecheckten SVN-Revision), die subwcrev so nützlich macht.
Ich ersetze $WCREV$
durch die Revisionsnummer des SVN-Repositorys (wie subwcrev es tun würde), aber dieses Mal füge ich meinen abgekürzten Git-Commit-Hash hinzu, um den von mir kompilierten Code zu identifizieren. Meine Frage ist nun: Gibt es eine Möglichkeit, in einem Shell-Skript zu unterscheiden, ob mein aktueller HEAD von der letzten abgerufenen SVN-Revision abweicht, so dass ich den -${gitcommit}
-Teil weglassen und $WCMODS$
auf false setzen konnte?
Wenn es so etwas wie einen post-"git svn dcommit"
Hook gäbe, wäre auch mein Problem gelöst, denn dann würde dieser spezielle Hook die svnversion.h anders erstellen. Kann ein solcher Haken irgendwie hinzugefügt werden?
Es sieht also so aus, als müssten Sie den Inhalt der git svn info
-Abfrage selbst parsen, um zu bekommen, was normalerweise in WCREV gespeichert ist. Die Beispielergebnisse sehen für mich so aus:
Nun zum zweiten Teil Ihrer Frage, ob Sie feststellen können, ob Ihr git HEAD mit dem letzten svn checkout übereinstimmt, müssen Sie den Befehl git diff git-svn
command verwenden. "git-svn" hier ist der Name des Zweigs, den das Programm git-svn verwaltet, und wenn alles auf dem neuesten Stand ist, sind die Ergebnisse leer.