8 Stimmen

Git-Zweig zur Fernverfolgung einrichten

Ich möchte einen entfernten Master-Zweig von einem neuen entfernten Repository aus verfolgen. Beide existieren bereits.

Wie kann ich das in Git machen? Ich scheine es nicht richtig hinzubekommen. Ich habe es versucht:

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

Ich erhalte jedoch die folgende Fehlermeldung:

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

3 Stimmen

Haben Sie die git fetch otherRepo bevor Sie einen Abzweig versuchen? git remote add konfiguriert nur die Fernbedienung, es wird nicht automatisch ein Abruf durchgeführt. Wenn Sie es bereits geholt haben, sind Sie sicher, dass es einen Zweig namens master hat? git branch -r o git remote show -n otherRepo ( nach dem Abholen ), um zu prüfen, welche Zweige er hat.

0 Stimmen

@crhis: Danke, jetzt funktioniert es. Es scheint logisch, dass ich auch alle anderen Zweige von otherRepo holen muss, aber das fügt hinzu. Kann ich nur otherRepo/Master holen? Ich möchte branch -r nicht überladen.

12voto

Chris Johnsen Punkte 199970

Wie in den Kommentaren beschrieben: git remote add otherRepo … konfiguriert nur die Fernbedienung, es holt nichts von ihr ab. Sie müssen Folgendes ausführen git fetch otherRepo um die Zweige des entfernten Repositorys zu holen, bevor Sie lokale Zweige auf der Grundlage dieser Zweige erstellen können.


(als Antwort auf einen weiteren Kommentar von OP)

Wenn Sie nur einen einzigen Zweig des entfernten Repositorys verfolgen wollen, können Sie die fetch-Eigenschaft ( 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

Hiernach, git fetch otherRepo holt nur den Inhalt des entfernten Repositorys master Verzweigung in die otherRepo/master Remote-Tracking-Zweig' in Ihrem lokalen Repository.

Um die anderen "entfernten Verfolgungszweige" zu bereinigen, können Sie alle löschen und nur den gewünschten Zweig erneut abrufen, oder Sie können selektiv alle Zweige außer dem gewünschten Zweig löschen:

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 mehr als einen entfernten Zweig verfolgen wollen, aber nicht alle, können Sie mehrere Fetch-Konfigurationen haben (mit git config --add remote."$remoteName".fetch … oder durch die Verwendung von git config --edit um die Zeile in der Konfigurationsdatei Ihres Repositorys direkt zu duplizieren und zu bearbeiten).

Wenn Sie auch das Abrufen von Tags von der Gegenstelle vermeiden wollen, konfigurieren Sie die Eigenschaft tagopt Ihrer Gegenstelle ( remote.otherRepo.tagopt ).

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

0 Stimmen

Danke für diese sehr ausführliche Antwort. Es scheint schrecklich, dass ein so einfacher Vorgang so komplex gemacht wird. Was auch immer

4voto

Rouan van Dalen Punkte 748

Sie könnten versuchen

git checkout -b myTrack otherRepo/master 

Dadurch wird ein neuer Zweig myTrack erstellt, der den anderenRepo/master-Zweig verfolgt.

0 Stimmen

Funktioniert nicht, die Fehlermeldung lautet: fatal: git checkout: updating paths is incompatible with switching branches. Wollten Sie 'otherRepo/master' auschecken, das nicht als Commit aufgelöst werden kann? `

0 Stimmen

Bei mir hat es funktioniert, nachdem ich das Remote Add und das Fetch durchgeführt habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X