Wie kann ich die HEAD-Version meines Remote / Tracking-Zweiges auschecken?

7

Wie kann ich die HEAD-Version meines Remote / Tracking-Zweigs auschecken? Grundsätzlich möchte ich einen 'svn checkout' in git machen.

Ich denke, die nächste Sache, die ich finde, ist "git fetch", aber von der man-Seite weiß ich nicht, wie ich eine bestimmte Datei damit auskomme?

    
hap497 30.09.2009, 23:13
quelle

2 Antworten

15

Zunächst ein Hinweis: Remote-Repository kann mehr als einen Zweig haben; HEAD bedeutet auch (für lokale Entwicklung und lokale Zweige) aktuell ausgecheckte Verzweigung, und für remote die Remote-Tracking-Verzweigung (symbolische Referenz) remote/HEAD bedeutet Standard-Verzweigung auf Remote. So etwas wie "HEAD of Branch" gibt es nicht; HEAD ist ein Zeiger zum Verzweigen (oder manchmal zu einem Commit).

Zweitens funktioniert Git (wie Novelocrat schrieb ) auf ganzer Baum-Ebene (alle Dateien im Repository). In Git checkst du einen Zweig (obwohl du auch eine Dateiversion von einem Zweig in ein Arbeitsverzeichnis auschecken kannst, es ist weniger Commkon-Betrieb).

In Git können Sie ein neues Commit nur oberhalb einer lokalen Verzweigung erstellen. Sie können keine Commits direkt in Remote-Tracking-Zweigen erstellen, da diese den Zweigen des Remote-Repository folgen sollen (und Sie würden Ihre Arbeit beim Abrufen verlieren).

Daher einfach " git checkout origin " (unter der Annahme, dass remote origin heißt), was eine Abkürzung für " git checkout origin/HEAD " ist, was normalerweise " git checkout origin/master " ist, würde einen Status der Fernüberwachung auschecken Verzweigen Sie in unbenannte Verzweigungen, sogenannte distanzierte HEADs. Dies ist eine gute Lösung, wenn Sie nur den Remote-Tracking-Zweigstatus anzeigen / durchsuchen möchten.

Wenn Sie " git checkout --track origin/master " verwenden, wird die lokale Zweigstelle master erstellt, die Zweigstelle verfolgen (verfolgen) soll origin/master . Beachten Sie, dass git-clone automatisch eine solche lokale Verzweigung (normalerweise master ) für den Standardzweig ( origin/HEAD ) von remote origin (normalerweise origin/master ) einrichtet, so dass Sie dies nicht tun müssten. Dann einfach " git pull ", wenn auf Zweig master (falls benötigt), und versuchen Sie, Ihre lokalen Änderungen mit den Änderungen in den jeweiligen Zweig im Remote-Repository zusammenführen. Wenn es keine Änderungen in remote gab, ist der Status "aktuell" und Ihr lokaler Zweig ändert sich nicht. Wenn es in Ihrem lokalen Zweig keine Änderungen gab, die sich jedoch in der Ferne befanden, wird der lokale Zweig einfach in den Status der Fernüberwachungsverzweigung versetzt, der als "Schnellvorlauf" bezeichnet wird. Sie können sich " git pull " hier als sehr, sehr grobes Äquivalent von " svn update " vorstellen.

Sie können Ihre lokale Zweigstelle auch dazu zwingen, mit < git reset --hard origin > zum Status des Remote-Tracking-Zweigs zurückzuspringen. Beachten Sie, dass --hard hier bedeutet, das Überschreiben des Arbeitsverzeichnisses zu erzwingen, so dass nicht korrigierte Änderungen verloren gehen würden! Verwenden Sie vorsichtig.

Wenn Sie schließlich einzelne Dateien aus dem Remote-Tracking-Zweig auschecken möchten (dh in der Arbeitsverzeichnisversion der Datei wie in der Remote-Tracking-Verzweigung), können Sie einfach den ' pathspec 'Form von git-checkout, nämlich " git checkout origin -- file ". Wenn Sie nur sehen möchten, wie die Datei im Remote-Tracking-Zweig aussieht, verwenden Sie " git show origin:path/to/file ".

HTH

    
Jakub Narębski 01.10.2009 00:42
quelle
4

Git hat keine Idee, eine einzelne Datei abzurufen. Es verschiebt immer Commits über das Netzwerk.

Sobald Sie git clone eines Remote-Repositorys erstellt haben, können Sie git checkout remotename/branch veranlassen, die neuesten Dateiversionen für diesen Zweig in Ihrer Arbeitskopie auszugeben. Wenn Sie sie ändern möchten, sollten Sie git checkout -b <yourbranchname> remotename/branch verwenden, um eine lokale Verzweigung zu starten. Dies könnte besser als

getan werden %Vor%

Damit Ihre lokale Zweigstelle die entfernte Zweigstelle "verfolgt" und standardmäßig von dieser Zweigstelle aus pusht und zieht.

    
Novelocrat 30.09.2009 23:34
quelle

Tags und Links