2012-12-29 8 views
5

Angenommen, ich klicke ein Git-Repository aus dem Pfad /path/to/repo. Das ursprüngliche Repository wird eine Remote namens "Ursprung" sein. Ich kann Objekte vom Ursprung mit dem Befehl git fetch origin holen. Dadurch werden alle Objekte vom entfernten Ursprung abgerufen, einschließlich aller erstellten Zweige.Git: Was ist der Unterschied zwischen dem Abrufen von named remote und dem Abrufen von einer URL?

Was ist merkwürdig ist, dass, wenn ich explizit aus dem gleichen Repository mit dem Befehl git fetch /path/to/repo abrufen, scheint ich alle Commit-Objekte abrufen, aber keine der Zweige.

Warum ist das? Mache ich nicht in beiden Fällen genau dasselbe? Wie kann Git so anders sein?

+0

Eine Regel ** zieht ** aus einer URL, anstatt * fetching * von der URL –

Antwort

5

Named Remote ihre Konfiguration, wo sie ein Setup refspec Schema verwenden, wenn diese Fernbedienung abgerufen wird:

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = /path/to/repo 

So sind diese beiden Format sind äquivalent:

git fetch origin 
git fetch /path/to/repo +refs/heads/*:refs/remotes/origin/* 

Grundsätzlich gilt: git fetch <path> <source>:<destination>. Und das Ziel ist hier wichtig, weil dort der entfernte HEAD und der Verzweigungszeiger gespeichert sind.

Indem Sie git fetch /path/to/repo tun, setzen Sie keine refspec. Als solches werden nur die Commits abgerufen, nicht die Objekte, da git nicht angewiesen wurde, sie zu erhalten und zu speichern.

Es kann sein, dass einige Details oder Namenskonventionen hier falsch sind, fühlen Sie sich frei zu bearbeiten. Aber die globale Idee sollte

+0

Hinweis: Es werden keine Remote-Tracking-Zweige festgelegt, es wird jedoch 'FETCH_HEAD' festgelegt. Nur zu deiner Information. –

2

Der wesentliche Unterschied richtig sein, dass aus einer URL holen nicht speichert Zustand der Filialen in Remote-Repository in Remote-Tracking-Zweige (zB refs/heads/master dh master Niederlassung in Fern origin in refs/remotes/origin/master aka origin/master) aber nur in FETCH_HEAD.

URL anstelle Fern der Einrichtung über git remote add in Einmal verwendet wirdzieht dh:

$ git pull <URL> <branch or tag> 
Verwandte Themen