In diesem Blogbeitrag können Sie sehen, wie Sie einen Patch erstellen können (Sammlung von Änderungen, die Sie kommunizieren und auf ein anderes Repo anwenden möchten).
(Bild aus dem Blogbeitrag 2008 " Bioruby with git: Wie würde das funktionieren? ", veröffentlicht von Jan AERTS )
Siehe auch Mit Git zu Rails beitragen als weiteres konkretes Beispiel.
Heutzutage macht es die GitHub-Pull-Anfrage wirklich einfach, Patches auf GitHub-Repos anzuwenden. Dies ist nützlich, wenn Sie kein direkter Mitwirkender sind (dh Sie haben kein Recht, direkt auf ein Repo zu pushen).
Tatsächlich hat GitHub vor kurzem " Better Pull Request Emails " eingeführt, um die Benachrichtigung über neue Patches zu verbessern.
Patch ist ein Unix-Programm, das Textdateien gemäß den Anweisungen in einer separaten Datei aktualisiert, die als Patch-Datei bezeichnet wird.
Mit anderen Worten kann es sich also um die Datei mit Anweisungen oder ein Programm handeln, das diese Datei verarbeitet und auf etwas anwendet.
Was ist eine Patch-Datei? Angenommen, Sie haben eine Textdatei mit 2 Zeilen:
Dann ändern Sie die erste Zeile und jetzt sieht Ihre Datei folgendermaßen aus:
Wie würden Sie die Änderung des Inhalts der Datei beschreiben? Sie können sagen, dass die erste Zeile "Dies ist Zeile A." wurde durch "Dies ist SPARTA." ersetzt, oder sogar das letzte Wort "A" der ersten Zeile wurde durch ein anderes Wort "SPARTA" ersetzt. Und genau das sagt uns diff . Angenommen, ich habe zwei Versionen dieser Datei, eine mit dem Namen file1.txt und eine mit dem Namen file2.txt. Dann führe ich diff aus und erhalte Folgendes:
Wenn Sie eine Beschreibung der Änderungen haben, können Sie diese auf einen ursprünglichen Inhalt anwenden und einen geänderten Inhalt erhalten. Und diese Änderungen, die in einem einheitlichen Format vorliegen, das "Patch" -ähnliche Programme verstehen können, werden als Patch-Datei bezeichnet. Es ist so, als würde man keinen Fisch von jemandem bekommen, der Ihnen das Fischen beibringt, damit Sie diesen Fisch selbst aus dem Wasser graben können. Wenden wir nun unseren Patch auf file1.txt an, damit er genau wie file2.txt aussieht:
Sie denken vielleicht, dass es einfacher ist, nur zwei Versionen dieser Datei zu haben. Nun, in diesem einfachen Fall ist das wahr. Wenn Sie jedoch viele Dateien haben und diese Dateien sehr groß sind, ist es viel effizienter, ein paar Zeilen Änderungen vorzunehmen, als zwei Kopien des Ganzen.
Wenn es um Git geht, bedeutet Patch-Datei immer noch dasselbe, aber die Verwendung von Diff + Patch selbst wäre ein Albtraum. Beispielsweise müssen Sie immer zwei Versionen der Datei (oder sogar des gesamten Repositorys) auschecken lassen, um sie vergleichen zu können. Klingt nicht so gut, oder? Git kümmert sich also um die ganze harte Arbeit für Sie - es vergleicht Ihre lokale Datei mit dem, was sich in dem Repository befindet, mit dem Sie arbeiten, und kann es Ihnen als "Diff" anzeigen oder dieses "Diff" als "Diff" anwenden Patch aka Übernehmen Sie Ihre Änderungen oder lassen Sie sogar eine Patch-Datei anwenden, die Sie bereits haben. In diesem Sinne ist Git absolut dasselbe wie andere Versionskontrollsysteme wie SVN oder sogar CVS oder Perforce.
Ich hoffe es hilft!
quelle
patch
Programm verwendet. Ich dachte, Git hätte eine eigene Implementierung.Ein Patch ist eine kleine Datei, die die in einem Repository vorgenommenen Änderungen angibt. Es wird im Allgemeinen verwendet, wenn jemand von außerhalb Ihres Teams nur Lesezugriff hat, aber eine gute Codeänderung verfügbar war. Dann erstellt er einen Patch und sendet ihn an Sie. Sie wenden es an und verschieben es in das Git-Repository. Jeder profitiert dann von der aktualisierten Version, und der Autor des Patches benötigte keinen Lese- / Schreibzugriff.
Es ist wirklich hauptsächlich eine Sicherheitssache (zumindest benutzen die Leute das dafür).
quelle
git diff
zeigt Änderungen standardmäßig als Patches an,git apply
ermöglicht das Anwenden eines Patches usw.).Eine Patch-Datei stellt einen einzelnen Satz von Änderungen dar, die in beliebiger Reihenfolge auf jeden Zweig angewendet werden können. Durch die Verwendung von Patch erhalten Sie Unterschiede zwischen einer oder mehreren Dateien. Und später können Sie die Unterschiede (Patch) anwenden, um die Änderungen an neuen Dateien zu erhalten. Es gibt viele Verwendungsmöglichkeiten für einen Patch in Git. Wenn Sie nicht festgeschriebene Änderungen in Ihrem Arbeitsverzeichnis haben und diese Änderungen an einer anderen Stelle anwenden müssen, erstellen Sie einfach einen Patch und wenden Sie den Patch an.
Wenn Sie neue Dateien in Ihrem Repository haben (nicht verfolgt), sollten Sie die Datei vor dem Erstellen eines Patches bereitstellen (nicht festschreiben) und den folgenden Befehl verwenden
Sie können den Patch später anwenden:
Wenn Sie einige Änderungen an einem Git-Repository vornehmen möchten, für das Sie keine Schreibberechtigung haben, nehmen Sie einfach die Änderungen vor und erstellen Sie einen Patch zwischen beiden. Senden Sie den Patch auf diese Weise an jemanden, der die Berechtigung zum Anwenden des Patches hat Ihre Änderungen sollten zu diesem Git-Repository hinzugefügt werden.
quelle
git format-patch <base_commit_or_branch_name>
= Packen Sie alle Commits von jetzt an zurück zu <base_commit_or_branch_name> in nette und übersichtliche Dateien, die die Diff- und Commit-Nachrichten enthalten, damit Sie sie einfach (z. B. per E-Mail) an eine andere Person senden können, die sie patchen möchte ihre Codebasis. Dann patcht der Empfänger sein System mit Ihrer Datei:cat *.patch | git am
Ein Patch besteht aus einer Reihe von Unterschieden zwischen einer oder mehreren Dateien, um zu zeigen, was zwischen ihnen unterschiedlich ist. Normalerweise generieren Sie nur einen Patch, um jemandem zu zeigen, was Sie geändert haben. Ein Beispiel dafür, wann Sie dies tun könnten, ist, wenn Sie einen Fehler in einer Open Source-Anwendung finden und beheben und den Fix dann auf ihrem Bug-Tracker veröffentlichen.
quelle