sagen programmatisch Unterschied zwischen git-svn und git repos?
-
03-07-2019 - |
Frage
Ich habe einige Shell Zeug eingerichtet, dass Aliase dynamisch definiert je nachdem, welche Art von VC Repo die CWD enthält - so zum Beispiel ‚d‘ läuft ‚svn diff‘ oder ‚git diff‘, je nachdem. (Basierend auf diesem Blog-Eintrag wenn jemand interessiert ...)
Ich mag einige Aliase anders definieren, je nachdem, ob ich in einer Git-Repo im Vergleich zu einem git-svn Repo. Gibt es eine einfache Möglichkeit, den Unterschied zwischen den beiden zu sagen?
Lösung
Sie sollten ein bisschen vorsichtig sein, wenn die Entscheidung, welche genau Repositories sind git-svn-Repositories. Ein Repository kann mehr als eine SVN-Repository enthalten.
Kafkas Lösung funktioniert nur, wenn die SVN-Repository mit dem es oder --std-Layout-Option geklont wurde, in dem es eigentlich ein Zweig trunk
.
Codelogic Antwort wird nur funktionieren, wenn es eine SVN-Repository svn
genannt ist -. Es gibt keine Anforderung, dass das wahr ist
Der einfachste Weg, um zu überprüfen, ob es ist ein SVN-Remote in der Config ist:
$ git config --get-regexp ^svn-remote
Das wird jede konfigurierte git-SVN-Repository finden, was auch immer sie genannt werden. Es wird verlassen mit Status 0, wenn eine Übereinstimmung vorhanden ist, und 1, wenn es keine Übereinstimmung gibt.
Aber das bedeutet nicht, dass das SVN-Repository wirklich verwendet wird. Es könnte auch sein, dass jemand eine SVN-Repository importiert hat, verwendet jedoch als Submodul ist oder als Unterbaum verschmelzen, oder sogar gar nicht. Wenn Metadaten in der git-SVN-Repository eingeschaltet worden ist, können Sie sehen, ob SVN-Revision in der aktuellen HEAD verwendet wurde, um so etwas wie dies mit:
$ git rev-list -1 --grep='git-svn-id' HEAD
Aber das ist vielleicht ein bisschen zu verworren. Sie entscheiden.
Andere Tipps
Sie können sich wahrscheinlich die Ausgabe des git config
Befehls zwischen einem git und git-svn-Repo zu unterscheiden.
git config --get svn-remote.svn.url
sollte die SVN URL zurückkehren synchronisiert werden, wenn es einen gibt.
Es gibt auch einen Zweig genannt Stamm und und ein Zweig genannt Stamm @ [REV]. Aber ich denke, codelogics Ansatz ist einfacher und sauberer.