Bei der Arbeit an einem gewöhnlichen Git-Repository verfolgt ein lokaler Zweig normalerweise einen entsprechenden entfernten Upstream-Zweig. Auf diese Weise kann ich leicht sehen, ob ich vor oder hinter meinem vorgelagerten Zweig bin und daher, wenn ich drücken oder ziehen muss, um sie synchron zu bringen. Auch mein Prompt zeigt diesen Zustand sofort an, was sehr praktisch ist.
Jetzt arbeite ich an einem SVN-Repository mit git-svn
. Ich habe --prefix=svn
für den Klon verwendet, daher git branch -r
lists svn/trunk
als Remote-Zweig, aber (obwohl git svn rebase
ohne Probleme funktioniert) ist es nicht als ein Upstream-Zweig für meinen Master-Zweig konfiguriert.
Ich habe versucht, die Tracking-Informationen manuell festzulegen, aber es ist fehlgeschlagen:
%Vor%Gibt es eine Möglichkeit, einen Svn Upstream-Zweig zu verfolgen?
Gibt es einen anderen einfachen Weg zu wissen, ob ich diesem Zweig voraus bin? (Die Betrachtung von gitk --all
ist derzeit die einzige Möglichkeit, die mir bekannt ist.)
Gibt es überhaupt eine Möglichkeit, meine (bash __git_ps1
) Eingabeaufforderung dazu zu bringen, diese Informationen anzuzeigen?
Dies scheint ein Fehler in git 1.9 zu sein, da --set-upstream-to
genau so funktioniert hat, wie Sie es erwähnt haben.
Und strace
zeigt korrektes Lokalisieren und Lesen des Refektors an, wird aber ignoriert aus irgendeinem Grund.
Meine Problemumgehung für dieses Problem ist die manuelle Bearbeitung von .git/config
:
- welcher sollte gleichbedeutend sein mit:
%Vor% & amp; & amp; git config branch.master.rebase true
(was du sowieso mit svn willst)
- ist aber nicht, wegen eines Fehlers! "Natürlich ist mein refs/svn/trunk
ein Zweig!" Sie sagen, und bearbeiten Sie die Konfiguration direkt (mit nur ein wenig sanfter Kraft).
Ihr Svn-Trunk könnte in git anders benannt werden, je nachdem, wie Sie den Repo geklont haben ( -s
, -T
, --prefix
-Optionen auf git svn clone
). Mach einfach einen git branch -avv
und finde den richtigen. Zum Beispiel ist ein möglicher Name refs/remotes/git-svn
; oder refs/svn/trunk
wie oben; oder noch etwas anderes.
Ich reproduziere das immer noch auf git version 2.1.4
. Wer sollte sich die Mühe machen, einen Fehlerbericht einzureichen?
git-svn
speichert die Konfigurationsdaten in .git/config
, zum Beispiel in einem meiner Repos ist die Konfiguration wie folgt:
Im Abschnitt [svn-remote "svn"]
können Sie alle git-svn
-Konfigurationen sehen. Im Abschnitt branches
sehen Sie alle Zweige in der entfernten svn
repo.
Wenn ich einem Zweig svn
in meinem lokalen git
repo folgen muss, mache ich normalerweise diese Schritte:
config
richtig konfiguriert ist mit allen branches
und tags
. git svn fetch
, auf diese Weise holt git alle Daten im Repo für alle Zweige Ich überprüfe, ob alle branches
/ tags
als Ausgabe von git branch -a
vorhanden sind, zum Beispiel:
Ich erstelle ein lokales Git branch
, um ein entferntes mit:
Auf diese Weise folgt der neu erstellte alpha-1
Zweig dem remotes/tags/alpha-1
und Sie können die Befehle rebase
und dcommit
ausführen.
Das war immer noch ein Problem für mich mit Git 1.9.5.
Und ich habe keine der hier genannten Lösungen zum Funktionieren bekommen, aber das hat funktioniert:
%Vor% Danach zeigt git svn dcommit -n
an, dass es tatsächlich zu dieser SVN-Verzweigung committen wird.
Update : Ich hatte wieder das selbe Problem und diesmal hat das obige nicht funktioniert. Ich habe gerade die Nachricht erhalten: Current branch master is up to date.
Allerdings mit:
hat die Rebase trotzdem gezwungen und danach wurde der Upstream korrekt eingestellt.