2010-02-20 7 views
8

Ich möchte einen Remote-Master-Zweig von einem neuen Remote-Repository verfolgen. Beide existieren bereits.Git-Setup Remote-Tracking-Zweig

Wie gehe ich in git darüber? Ich kann es nicht richtig verstehen. Ich habe versucht:

git remote add otherRepo git://... 
git branch -t myTrack otherRepo/master 

Allerdings bekomme ich folgende Fehlermeldung:

fatal: Not a valid object name: 'otherRepo/master'.

+3

Haben Sie 'git fetch otherRepo' vor dem Verzweigen versucht? 'git remote add' konfiguriert nur die Fernbedienung, es führt nicht automatisch einen Abruf durch. Wenn Sie es bereits abgerufen haben, sind Sie sicher, dass es einen Zweig namens Master hat? 'git branch -r' oder' git remote show -n otherRepo' (* nach dem Abrufen *), um zu prüfen, welche Zweige es hat. –

+0

@crhis: Danke, jetzt funktioniert es. Es scheint logisch, dass ich alle anderen Zweige von anderen repo auch holen muss, wie auch immer es hinzugefügt wird. Kann ich nur andereRepo/Master holen? Ich will den Zweig -r nicht überladen. –

Antwort

12

Wie in den Kommentaren behandelt: git remote add otherRepo … konfiguriert nur die Fernbedienung, es holt nichts davon ab. Sie müssen git fetch otherRepo ausführen, um die Zweige des Remote-Repositorys abzurufen, bevor Sie lokale Zweige basierend darauf erstellen können.


(zu weiteren Kommentar von OP reagiert)

Wenn Sie nur den Überblick über einen einzelnen Zweig von der Remote-Repository halten möchten, können Sie Ihre Remote-Eigentum holen neu konfigurieren (remote.otherRepo.fetch).

# done as a shell function to avoid repeating the repository and branch names 
configure-single-branch-fetch() { 
    git config remote."$1".fetch +refs/heads/"$2":refs/remotes/"${1}/${2}" 
} 
configure-single-branch-fetch "$remoteName" "$branch" 
# i.e. # configure-single-branch-fetch otherRepo master 

Nach diesem git fetch otherRepo wird die Remote-Repository master Zweig in den otherRepo/master ‚Remote-Tracking-Zweig‘ in Ihrem lokalen Repository nur holen.

Um Bereinigung der anderen ‚remote Tracking-Zweige‘, könnten Sie löschen sie alle und wieder holen nur die, die Sie wollen, oder Sie können selektiv alle löschen, außer nur die, die Sie wollen:

git for-each-ref --shell --format='git branch -dr %(refname:short)' refs/remotes/otherRepo | sh -nv 
# remove the -nv if the commands look OK, then 
git fetch otherRepo 

# OR 

git for-each-ref --shell --format='test %(refname:short) != otherRepo/master && git branch -dr %(refname:short)' refs/remotes/otherRepo | sh -nv 
# remove the -nv if the commands look OK 

Wenn Sie entscheiden, dass Sie mehrere entfernte Zweigstellen verfolgen möchten, aber nicht alle, können Sie mehrere Abrufkonfigurationen verwenden (mit git config --add remote."$remoteName".fetch … oder git config --edit, um die Zeile in der Konfigurationsdatei Ihres Repositorys direkt zu duplizieren und zu bearbeiten).

Wenn Sie auch verhindern möchten, dass Tags von der Remote abgerufen werden, konfigurieren Sie die Tagopt-Eigenschaft Ihrer Remote (remote.otherRepo.tagopt).

git config remote."$remoteName".tagopt --no-tags 
# i.e. # git config remote.otherRepo.tagopt --no-tags 
+0

danke für diese sehr vollständige antwort. Es scheint schrecklich, dass solch eine einfache Operation so komplex ist. Was auch immer –

4

könnten Sie

git checkout -b myTrack otherRepo/master 

versuchen, einen neuen Zweig myTrack Dies wird erstellen, die die otherRepo/Master-Zweig verfolgt.

+0

Funktioniert nicht, der angegebene Fehler lautet: fatal: git checkout: Das Aktualisieren von Pfaden ist nicht mit dem Wechseln von Zweigen kompatibel. Haben Sie vorgehabt, 'otherRepo/master' auszuchecken, was nicht als Commit gelöst werden kann? ' –

+0

Arbeitete für mich nach dem Remote-Hinzufügen und dem Fetch. – Von