git: Überprüfe, ob xyz im Remote-Repo übergeben wird?

Lesezeit: 5 Minuten

Ich habe einen Commit xyz in meinem lokalen Zweig, den ich überprüfen möchte, ob er in einem Remote-Release-Repository enthalten ist. kann ich das auf eine einfache Weise tun? Ich könnte das Remote-Repo klonen, aber ich hoffe auf einen schöneren + schnelleren Weg. git ls-remote schien vielversprechend, fand dort aber nichts Wertvolles für mich. Danke!

  • Beantwortet das deine Frage? Wie listet man Branches auf, die einen bestimmten Commit enthalten?

    – phuklv

    4. Oktober 21 um 3:22 Uhr

git Uberprufe ob xyz im Remote Repo ubergeben wird
Markus Longair

Nehmen wir an, dass die Fernbedienung aufgerufen wird, die auf das entfernte Repository verweist origin. Aktualisieren Sie in diesem Fall zuerst alle Ihre Remote-Tracking-Zweige mit:

git fetch origin

Jetzt können Sie das Nützliche nutzen --contains Option zu git branch um herauszufinden, welcher der entfernten Branches diesen Commit enthält:

git branch -r --contains xyz

(Der -r bedeutet, nur Remote-Tracking-Zweige anzuzeigen.) Wenn die Datei commit xyz in einem oder mehreren Ihrer Remote-Tracking-Zweige enthalten ist, sehen Sie eine Ausgabe wie:

  origin/test-suite
  origin/HEAD -> origin/master
  origin/master

Wenn es in Ihrem lokalen Repository enthalten ist, aber nicht in einem der Remote-Tracking-Zweige, ist die Ausgabe leer. Wenn dieser Commit jedoch in Ihrem Repository nicht bekannt ist überhaupt, Sie erhalten den Fehler malformed object name und eine Nutzungsmeldung – vielleicht etwas verwirrend, wenn Sie es nicht erwarten …

  • Gibt es eine Möglichkeit, dies mit Git Plumbing zu tun?

    Benutzer153275

    10. September 12 um 20:28 Uhr

  • @dpk: Ich würde wahrscheinlich die Remote-Tracking-Zweige mit durchlaufen git for-each-ref und testen Sie, ob der Commit in jedem Zweig enthalten ist, indem Sie prüfen, ob git merge-base <YOUR-COMMIT> <BRANCH> ist das gleiche wie <YOUR-COMMIT>.

    – Mark Longair

    11. September 12 um 8:08 Uhr

  • github.com/git/git/commit/… (github.com/git/git/commit/…) vermeidet die Fehlermeldung und die Nutzungsmeldung. Aber nur für Git 2.18 (Q2 2018)

    – VonC

    14. April 18 um 0:52 Uhr


  • Auf einem frischen Klon eines großen Repos musste ich auch laufen git gc Vor git branch -r --contains xyz effizient laufen würde.

    – pqn

    20. März 21 um 20:20 Uhr

Wie Markus sagte,

 git branch -a --contains commitish

Hüten Sie sich jedoch vor Zweigen, die eine aus der Kirsche gepickte/rebasierte/zusammengeführte Version des Commits enthalten.

Dies könnte sich als nützlich erweisen

 git log --cherry-pick --left-right <commitish> ^remote/branchname

Es wird das Commit auflisten NUR wenn es nicht (als Cherrypick) im Remote-Zweig existiert. Siehe die man-Seite für log für eine Erklärung, wie –cherry-pick äquivalente Commits identifiziert

Natürlich können Merges/Rebases mit Konfliktlösungen oder Squashes so nicht automatisch erkannt werden

  • die zweite Zeile (cherry-pick) funktioniert nur, wenn die Commit-Inhalte gleich sind (abgesehen von Leerzeichen), was nicht unbedingt der Fall ist, beispielsweise beim Rosinenpicken.

    – hoijui

    15. November 19 um 15:05 Uhr

  • @hoijui Ich würde erwarten, dass Leerzeichen signifikant sind. Beim Rosinenpicken würden Sie erwarten, dass der Änderungssatz identisch ist, es sei denn, es gab manuelle Bearbeitungen (z. B. gab es Zusammenführungskonflikte). Aber ja, die Cherry-Pick-Erkennung ist begrenzt. Es ist immer noch sehr sehr schön im täglichen Gebrauch

    – sehen

    17. November 19 um 18:26 Uhr


  • ja, finde ich auch schön, ich wollte es hier nur anmerken, weil ich es versucht habe und zufällig über genau dieses Problem gestolpert bin, und viel Zeit damit verbracht habe, herauszufinden, warum meine Cherry-Pick-Erkennung nicht funktioniert. Der ursprüngliche Commit hat 3 Zeilen geändert, eine davon wurde bereits von einem anderen Commit ausgeführt, sodass der Cherry-Pick ohne Konflikte nur noch zwei Zeilen übrig hatte. -> keine Kritik, nur ein nützlicher Hinweis.

    – hoijui

    18. November 19 um 20:01 Uhr

1644074346 462 git Uberprufe ob xyz im Remote Repo ubergeben wird
TrientP

Die vorhandenen Antworten erfordern, dass das gesamte Remote-Repository lokal heruntergeladen wird. Wenn die Remote viele Commits hat, die noch nicht lokal geklont wurden, kann dies sehr lange dauern. Ein Beispiel ist so etwas wie das linux-stable-Repository, das viele unabhängige Zweige hat, die niemals zusammengeführt werden. Jemand verfolgt ein Stable-Kernel könnte nur den einzelnen Zweig für diesen Kernel klonen. Das Abrufen aller Zweige für jeden Kernel der Stable-Serie, um zu sehen, ob das Commit existiert, würde das Herunterladen von viel mehr Daten erfordern.

Es scheint keine gute Möglichkeit zu geben, dies zu tun, ohne das gesamte Remote-Repository abzurufen. Die Fähigkeit ist da, basierend auf dem Weg git fetch-pack und git send-pack funktionieren, aber es scheint keine Möglichkeit zu geben, es in der gewünschten Weise zu verwenden.

Beim Pushen eines Zweigs in ein Remote-Repository werden keine Commits hochgeladen, die das Remote bereits hat, und dies geschieht, ohne zuerst das gesamte Remote-Repository herunterzuladen. Beim Versuch, ein Remote-Commit abzurufen, muss nicht das gesamte Remote-Repository heruntergeladen werden, um festzustellen, ob das angeforderte Commit vorhanden ist oder nicht.

Letzteres kann verwendet werden, um das zu erreichen, was in einigen Fällen gewünscht wurde.

git fetch origin <commit ID>

Wenn die Fernbedienung diesen Commit nicht hat, schlägt dies fehl. Das Remote-Repository muss dazu nicht lokal geklont werden. Wenn das Remote den Commit hat, ruft er ihn ab. Es gibt keine Option, nur zu sehen, ob der Abruf funktionieren würde, aber nichts abzurufen. Wenn die Festschreibung bereits lokal verfügbar ist, muss natürlich nichts abgerufen werden, und dies ist keine kostspielige Operation.

Einige Remote-Repositories erlauben keine Anforderung von etwas, das nicht der Kopf einer Verzweigung oder eines Tags ist. In diesem Fall wird dies nicht funktionieren.

  • Leider scheint dies nicht zu funktionieren, wenn Sie bereits eine Kopie der Commit-Revision lokal haben. git fetch holt nur Commits, die in Ihrer lokalen Kopie des Repositorys fehlen.

    – Scottlocke

    21. Juni 21 um 2:37 Uhr

.

784710cookie-checkgit: Überprüfe, ob xyz im Remote-Repo übergeben wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy