Was ist das Git-Äquivalent von svn status -u
oder ausführlicher svn status --show-updates
. Die svn status --show-updates
Befehl zeigt die Aktualisierungen, die der svn update
Befehl vom Server mitbringen wird.
Gracias.
Was ist das Git-Äquivalent von svn status -u
oder ausführlicher svn status --show-updates
. Die svn status --show-updates
Befehl zeigt die Aktualisierungen, die der svn update
Befehl vom Server mitbringen wird.
Gracias.
Mir fällt keine Möglichkeit ein, dies zu tun, ohne die Aktualisierungen tatsächlich abzurufen (vielleicht kann das jemand anders). Angenommen, Sie befinden sich auf dem Standardzweig "master" und der Upstream, aus dem diese hypothetischen Aktualisierungen kommen, ist der standardmäßige entfernte "origin", versuchen Sie....
git fetch
git log --name-only ..origin/master
Beachten Sie die doppelten Punkte kein einzelner Punkt oder eine Elipse 1 .
Dies gibt Ihnen eine Liste von Protokolleinträgen für Änderungen, die nur Upstream sind, mit den betroffenen Dateinamen, Sie können die Parameter für git log ändern, um mehr oder weniger Informationen zu erhalten.
Beachten Sie, dass das "Abrufen" dieser Aktualisierungen in Git nicht dasselbe ist wie das Anwenden dieser Aktualisierungen auf Ihren lokalen Zweig. Sie wissen zweifellos bereits, wie man das mit git pull macht.
1 Und woher kommen die doppelten Punkte? name1..name2
gibt einen Bereich an. Wenn name1
weggelassen wird, HEAD
verwendet wird. Diese Syntax bezieht sich auf alle Commits, die von name2
zurück zu, aber nicht einschließlich, HEAD
. [ "Von unten nach oben gehen" ]
Beide Martinho Fernandes y tialaramex die Antworten korrekt beschreiben, was Sie tun müssen. Lassen Sie mich beschreiben warum es ist, wie es ist.
Subversion es zentralisiert Versionskontrollsystem. Das bedeutet, dass es nach dem Client-Server-Prinzip funktioniert: Der Server speichert alle Daten über die Version (Repository), der Client hat nur das Arbeitsverzeichnis (Dateien) sowie einige Verwaltungs- und Hilfsdaten. Das bedeutet, dass der Client für die meisten Befehle den Server kontaktieren muss. Das bedeutet auch, dass es viele Befehle gibt, die nach dem Status des Projektarchivs auf dem Server oder der Serverkonfiguration fragen, wie z.B. " svn status --show-updates
" in Frage.
(Nebenbei bemerkt: eine der Hilfsdaten, die Subversion auf dem Client speichert, sind die "unberührten" Versionen der Dateien, was bedeutet, dass die Überprüfung von Änderungen, die Sie vorgenommen haben, keine Verbindung zum Server erfordert (was langsam ist)... aber es bedeutet auch, dass der SVN-Checkout größer sein kann als das Git-Repository).
"svn update" (erforderlich vor der Übergabe, wenn das Repository Änderungen im angegebenen Zweig enthält) lädt die letzte Version von der Gegenstelle herunter y führt die von Ihnen vorgenommenen Änderungen mit den Änderungen aus der Ferne zusammen (versucht, diese zusammenzuführen). IMHO ist dieser Update-before-commit-Workflow nicht sehr zielführend.
Git es distribué Versionskontrollsystem. Das bedeutet, dass es nach dem Peer-to-Peer-Prinzip funktioniert: Jeder "Client" verfügt über alle Daten zu den Versionen (vollständiges Repository). Das zentrale Repository ist nur aufgrund sozialer Konventionen und nicht aufgrund technischer Beschränkungen zentral. Das bedeutet, dass bei der Kontaktaufnahme mit anderen entfernten Repositorien die Anzahl der "fernausgeführten" Befehle sehr gering ist. Sie können mit "git ls-remote" (und "git update show") nach Referenzen (heads aka. branches und tags) fragen, Sie können mit "git fetch" (oder "git remote update") / "git push" Daten abrufen (pull) oder veröffentlichen (push), und wenn der Server so konfiguriert ist, dass er dies zulässt, können Sie mit "git archive --remote" einen Schnappschuss des Zustands des entfernten Repositorys erhalten.
Um also Commits zu untersuchen, die sich im entfernten Repository befinden, aber nicht in Ihrem Repository vorhanden sind, müssen Sie Daten auf Ihren Rechner herunterladen. Aber "git pull" ist eigentlich nichts anderes als "git fetch", das die Daten herunterlädt, und "git merge", das sie zusammenführt (mit ein bisschen Zucker, um Commit-Nachrichten vorzubereiten und den Zweig auszuwählen, der zusammengeführt werden soll). Sie können dann "git fetch" (oder "git remote update") verwenden, die neuen Commits mit "git log" und "gitk" untersuchen (wobei Sie nicht auf feste Ausgaben beschränkt sind), und dann, wenn alles in Ordnung ist, die Änderungen mit "git merge" zusammenführen.
Dies ist nicht spezifisch für Git, sondern für alle verteilten Versionskontrollsysteme, auch wenn die Art und Weise, wie SCM abgeholte, aber nicht zusammengefasste Daten präsentiert, unterschiedlich sein kann (Git verwendet Remote-Tracking-Zweige im 'remote/<remotename>/*'-Namensraum, Mercurial verwendet, soweit ich weiß, unbenannte Köpfe).
HTH
Ihre Antwort ist im Wesentlichen eine Rationalisierung, warum svn status -u
erfordert zwei git-Befehle, die eigentlich verschiedene Befehle sein können ( get remote update
, git fetch
, usw.). Die Grundlage Ihrer Argumentation ist jedoch falsch. Sie sagen: "Jeder 'Client' hat alle Daten über Versionen (vollständiges Repository). Das zentrale Repository ist nur aufgrund sozialer Konventionen und nicht aufgrund technischer Beschränkungen zentral". Dies trifft in der Praxis nicht zu, denn die lokalen Repos sind im Allgemeinen veraltet, verglichen mit dem zentralen Repository des Unternehmens oder was auch immer.
@EML Ihr Kommentar ist falsch. 1) Sie sagten, diese Antwort sei eine Rationalisierung mit einem negativen Ton, was Unsinn ist. Dieser Kommentar war sinnlos, aufrührerisch und fehlgeleitet. 2) Die Grundlage dieser Antwort ist korrekt und genau. Der ganze Sinn von git fetch
ist, das Gegenteil von dem zu tun, was Sie versuchen, als Mangel von Git zu beschreiben, also liegen Sie leider völlig falsch. Wenn Sie erwarten, dass Sie Aktualisierungen sehen, ohne etwas zu aktualisieren, verwenden Sie das Tool falsch. git fetch
lädt, wie in der Antwort erläutert, die gesamte Repository-Historie herunter.
Sie können verwenden git ls-remote
um die SHA von Referenzen in einem entfernten Repository aufzulisten; so können Sie sehen, ob es irgendwelche Änderungen gibt, indem Sie die Ausgabe von:
$ git show-ref origin/master # <-- Where this repo thinks "origin/master" is
5bad423ae8d9055d989a66598d3c4473dbe97f8f refs/remotes/origin/master
$ git ls-remote origin master # <-- Where "origin" thinks "master" is
060bbe2125ec5e236a6c6eaed2e715b0328a9106 refs/heads/master
Weichen sie voneinander ab, so sind Änderungen zu holen:
$ git remote update
Fetching origin
...
From github.com:xxxx/yyyy
5bad423..060bbe2 master -> origin/master
Für mich, um Dateien anzuzeigen, die geändert werden, ist es :
git fetch (1)
git diff --name-only ..origin/master (2)
Um Dateien zu aktualisieren (nicht nur die Git-"Datenbank"), führen Sie einen Git-Merge durch
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.
2 Stimmen
Ihre Frage wäre besser, wenn Sie angeben würden, was der Befehl svn bewirkt. Dies würde nur Git-Kenntnisse zur Beantwortung erfordern, und wenig oder gar keine svn-Kenntnisse.
1 Stimmen
Danke, ich habe die notwendige Erklärung hinzugefügt.