Wie setze ich den Upstream-Zweig in git-svn?

9

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?

%Vor%     
michas 06.03.2014, 15:44
quelle

3 Antworten

2

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 :

%Vor%

- 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.

Aktualisierung November 2015

Ich reproduziere das immer noch auf git version 2.1.4 . Wer sollte sich die Mühe machen, einen Fehlerbericht einzureichen?

    
ulidtko 12.08.2014 17:47
quelle
1

git-svn speichert die Konfigurationsdaten in .git/config , zum Beispiel in einem meiner Repos ist die Konfiguration wie folgt:

%Vor%

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:

  1. Ich überprüfe, ob die config richtig konfiguriert ist mit allen branches und tags .
  2. Ich mache eine git svn fetch , auf diese Weise holt git alle Daten im Repo für alle Zweige
  3. Ich überprüfe, ob alle branches / tags als Ausgabe von git branch -a vorhanden sind, zum Beispiel:

    %Vor%
  4. Ich erstelle ein lokales Git branch , um ein entferntes mit:

    zu verfolgen %Vor%

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.

    
Atropo 06.03.2014 17:54
quelle
0

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:

%Vor%

hat die Rebase trotzdem gezwungen und danach wurde der Upstream korrekt eingestellt.

    
Zitrax 20.08.2015 13:14
quelle

Tags und Links