2015-05-10 12 views
5

Ich habe versucht, Änderungen von stromaufwärts in meine Gabel zu ziehen. Ich versuchte git fetch https://github.com/someuser/someproject, aber es weigerte sich hartnäckig, etwas zu tun. Es sagte nur etwas völlig kryptisch und tat nichts, und zwar:Was ist der Unterschied zwischen "git fetch <url>" und "git hinzufügen Remote-Upstream <url>" gefolgt von "git fetch upstream"?

From https://github.com/someuser/someproject 
* branch   HEAD  -> FETCH_HEAD 

Aber der Moment, als ich die URL als benannte Fern, Dinge hinzugefügt geändert:

> git remote add upstream https://github.com/someuser/someproject.git 
> git fetch upstream 
remote: Counting objects: 340, done. 
remote: Compressing objects: 100% (268/268), done. 
remote: Total 340 (delta 145), reused 18 (delta 16), pack-reused 44 
... etc ... 

Also, was ist der Unterschied? Warum hat es nichts unternommen, wenn ich eine Fernbedienung angegeben habe, ohne sie vorher hinzuzufügen? Und was genau sagte es mir, als ich versuchte, von der URL zu holen?

+1

Sind Sie sicher, dass es nicht funktioniert hat? Hast du versucht, eine magische Referenz namens 'FETCH_HEAD' auszumachen oder zu verschmelzen? –

+0

@RetoAebersold Ja. Versuchte es noch einmal: clean clone, dann die fetch (momentane), dann habe ich versucht, "check " 'das ist da in upstream -" nicht übereinstimmen ". Dann habe ich das "remote add", "fetch upstream" (dieses Mal dauert eine Weile), dann 'checkout ' wieder - bekam einen abgetrennten Kopf wie erwartet. –

Antwort

1

Ich bin kein Experte auf diesem, also habe ich Google und the man pages verwendet, um zusammen zu helfen, was los ist.

This question sollte den FETCH_HEAD Aspekt der Dinge entmystifizieren. Es ist nicht wirklich möglich für mich, den Zustand Ihres Repos aus dem Lesen Ihrer Frage zu ersehen, aber vermutlich deutet Ihr FETCH_HEAD auf den letzten Commit in der HEAD im Remote-Repo, was auch immer das sein mag. Sie hatten wahrscheinlich bereits diese Commits auf Ihrem System, und so war alles git did update FETCH_HEAD. Wahrscheinlich möchten Sie stattdessen eine Verzweigung bereitstellen.

Wenn Sie eine Remote hinzufügen, erhalten Sie zusätzliche Funktionen wie eine Standardverzweigung und Remote-Tracking-Zweige. Ich glaube, dass Ihr zweiter Befehl anders funktioniert, weil git eine implizite Logik verwendet, um das zu tun, was typischerweise gewünscht wird. Das direkte Abrufen von einer URL ist eher eine fortgeschrittene Methode und Sie erhalten weniger Annahmen aus diesem Grund.

Moral der Geschichte, wenn Sie möchten, dass die Dinge nur funktionieren, fügen Sie eine Fernbedienung hinzu. Ansonsten seien Sie bereit, sich mit mehr der zugrunde liegenden Details auseinanderzusetzen.