Warum steht `-p1` hier für `patch`?

Warum steht `-p1` hier für `patch`?

Um die Änderungen an einer Datei in einem Commit rückgängig zu machen,https://stackoverflow.com/a/2620822/156458

#!/bin/bash

function output_help {
    echo "usage: git-revert-single-file <sha1> <file>"
}

sha1=$1
file=$2

if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi

Warum ist -p1inpatch

git diff $sha1..$sha1^ -- $file | patch -p1

Danke.

Antwort1

Weil zu seinen Patches git difffalsche Verzeichnisse aund hinzugefügt werden b, die übersprungen werden müssen patch(daher das -p1). gittut dies, um Informationen darzustellen, die nicht im Dateisystem vorhanden sind (die verglichenen Dateien existieren nicht gleichzeitig); zum Beispiel

diff --git a/README b/README
index ce01362..a1e6cf9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
 hello
+Tim

für eine README-Datei im aktuellen Verzeichnis. diffwürde erzeugen

--- README.orig 2017-04-07 20:39:50.843962430 +0200
+++ README      2017-04-07 20:39:56.284108455 +0200
@@ -1 +1,2 @@
 hello
+Tim

(vorausgesetzt, wir haben anderswo eine Kopie des Originals aufbewahrt); beachten Sie das Fehlen von Verzeichnissen hier (da sich die Dateien im aktuellen Verzeichnis befinden).

Der letztere Patch wird unverändert mit angewendet patch; beim ersteren muss das erste Element jedes Pfads entfernt werden, daher das -p1.

verwandte Informationen