Εγχειρίδια για τη γραμμή εντολών

Man » Εγχειρίδιο patch online - λεπτομερής διαδικτυακή τεκμηρίωση για τη σελίδα man patch

🌍
patch - εφαρμόζει ένα αρχείο διαφορών σε ένα αρχικό αρχείο

ΣΥΝΟΨΗ

patch [επιλογές] [αρχικό αρχείο [αρχείο διαφορών]]

αλλά συνήθως απλά

patch -pnum <αρχείο διαφορών>

ΠΕΡΙΓΡΑΦΗ

Το patch παίρνει ένα αρχείο διαφορών patchfile που περιέχει μια λίστα διαφορών που δημιουργήθηκε από το πρόγραμμα diff και εφαρμόζει αυτές τις διαφορές σε ένα ή περισσότερα αρχικά αρχεία, παράγοντας διορθωμένες εκδόσεις. Συνήθως, οι διορθωμένες εκδόσεις τοποθετούνται στη θέση των αρχικών αρχείων. Μπορούν να δημιουργηθούν αντίγραφα ασφαλείας. δείτε την επιλογή -b ή --backup. Τα ονόματα των αρχείων προς διόρθωση συνήθως λαμβάνονται από το αρχείο διαφορών, αλλά εάν υπάρχει μόνο ένα αρχείο προς διόρθωση, αυτό μπορεί να καθοριστεί στη γραμμή εντολών ως αρχικό αρχείο.

Κατά την εκκίνηση, το patch προσπαθεί να προσδιορίσει τον τύπο της λίστας διαφορών, εκτός εάν αυτό αντικατασταθεί από μια επιλογή -c (--context), -e (--ed), -n (--normal) ή -u (--unified). Οι διαφορές περιεχομένου (παλαιού τύπου, νέου τύπου και ενοποιημένες) και οι κανονικές διαφορές εφαρμόζονται από το ίδιο το πρόγραμμα patch, ενώ οι διαφορές ed απλά τροφοδοτούνται στον επεξεργαστή ed(1) μέσω ενός σωλήνα.

Το patch προσπαθεί να παραλείψει τυχόν αρχικές ακαθαρσίες, να εφαρμόσει τη διαφορά και στη συνέχεια να παραλείψει τυχόν τελικές ακαθαρσίες. Επομένως, θα μπορούσατε να τροφοδοτήσετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου που περιέχει μια λίστα διαφορών στο patch και θα πρέπει να λειτουργήσει. Εάν ολόκληρη η διαφορά είναι εσοχή με μια συνεπή ποσότητα, εάν οι γραμμές τελειώνουν με CRLF ή εάν μια διαφορά είναι ενσωματωμένη μία ή περισσότερες φορές, προσθέτοντας "- " στις γραμμές που ξεκινούν με "-", όπως καθορίζεται στο Internet RFC 934, αυτό λαμβάνεται υπόψη. Αφού αφαιρεθεί η εσοχή ή η ενσωμάτωση, οι γραμμές που ξεκινούν με # αγνοούνται, καθώς θεωρούνται σχόλια.

Με τις διαφορές περιεχομένου και, σε μικρότερο βαθμό, με τις κανονικές διαφορές, το patch μπορεί να εντοπίσει πότε οι αριθμοί γραμμών που αναφέρονται στο patch είναι λανθασμένοι και προσπαθεί να βρει τη σωστή θέση για την εφαρμογή κάθε τμήματος του patch. Ως πρώτη υπόθεση, παίρνει τον αριθμό γραμμής που αναφέρεται για το τμήμα, συν ή μείον οποιαδήποτε μετατόπιση χρησιμοποιείται κατά την εφαρμογή του προηγούμενου τμήματος. Εάν αυτό δεν είναι η σωστή θέση, το patch σαρώνει προς τα εμπρός και προς τα πίσω για ένα σύνολο γραμμών που ταιριάζουν με το περιεχόμενο που δίνεται στο τμήμα. Πρώτα, το patch αναζητά μια θέση όπου όλες οι γραμμές του περιεχομένου ταιριάζουν. Εάν δεν βρεθεί τέτοια θέση και είναι μια διαφορά περιεχομένου και ο μέγιστος παράγοντας θολότητας είναι ρυθμισμένος σε 1 ή περισσότερο, τότε γίνεται μια άλλη σάρωση, αγνοώντας την πρώτη και την τελευταία γραμμή του περιεχομένου. Εάν αυτό αποτύχει και ο μέγιστος παράγοντας θολότητας είναι ρυθμισμένος σε 2 ή περισσότερο, οι πρώτες δύο και οι τελευταίες δύο γραμμές του περιεχομένου αγνοούνται και γίνεται μια άλλη σάρωση. (Ο προεπιλεγμένος μέγιστος παράγοντας θολότητας είναι 2).

Τα τμήματα με λιγότερο προθετικό περιεχόμενο από το μεταγενέστερο περιεχόμενο (αφού εφαρμοστεί η θολότητα) πρέπει να εφαρμόζονται στην αρχή του αρχείου εάν η πρώτη τους γραμμή είναι 1. Τα τμήματα με περισσότερο προθετικό περιεχόμενο από το μεταγενέστερο περιεχόμενο (αφού εφαρμοστεί η θολότητα) πρέπει να εφαρμόζονται στο τέλος του αρχείου.

Αν ένα τμήμα της διόρθωσης δεν μπορεί να βρει πού να εγκατασταθεί, το τμήμα αυτό τοποθετείται σε ένα αρχείο απορριπτέων στοιχείων, το οποίο συνήθως έχει το όνομα του αρχείου εξόδου συν την κατάληξη .rej, ή # εάν το .rej θα δημιουργούσε ένα όνομα αρχείου που είναι πολύ μεγάλο (εάν ακόμη και η προσθήκη του ενός χαρακτήρα # κάνει το όνομα του αρχείου πολύ μεγάλο, τότε το # αντικαθιστά τον τελευταίο χαρακτήρα του ονόματος του αρχείου).

Το απορριφθέν τμήμα εμφανίζεται σε ενοποιημένη ή μορφή διαφορών περιβάλλοντος. Εάν η είσοδος ήταν μια κανονική διαφορά, πολλά από τα περιβάλλοντα είναι απλώς κενά. Οι αριθμοί γραμμών στα τμήματα στο αρχείο απορριπτέων στοιχείων μπορεί να είναι διαφορετικοί από αυτούς στο αρχείο διόρθωσης: αντικατοπτρίζουν την κατά προσέγγιση θέση στην οποία η διόρθωση πιστεύει ότι τα αποτυχημένα τμήματα θα έπρεπε να τοποθετηθούν στο νέο αρχείο και όχι στο παλιό.

Καθώς κάθε τμήμα ολοκληρώνεται, σας ενημερώνουν εάν το τμήμα απέτυχε και, εάν ναι, σε ποια γραμμή (στο νέο αρχείο) η διόρθωση πίστευε ότι θα έπρεπε να τοποθετηθεί το τμήμα. Εάν το τμήμα εγκατασταθεί σε μια διαφορετική γραμμή από τον αριθμό γραμμής που καθορίζεται στη διαφορά, σας ενημερώνουν για την απόκλιση. Μια μεγάλη απόκλιση μπορεί να υποδεικνύει ότι ένα τμήμα εγκαταστάθηκε σε λάθος θέση. Σας ενημερώνουν επίσης εάν χρησιμοποιήθηκε παράγοντας θολότητας για να γίνει η αντιστοίχιση, οπότε και θα πρέπει να είστε ελαφρώς δύσπιστοι. Εάν δοθεί η επιλογή --verbose, σας ενημερώνουν επίσης για τμήματα που ταιριάζουν ακριβώς.

Εάν δεν καθοριστεί ένα αρχικό αρχείο origfile στη γραμμή εντολών, η διόρθωση προσπαθεί να εξαγάγει από τις αρχικές αχρήστες πληροφορίες το όνομα του αρχείου που θα επεξεργαστεί, χρησιμοποιώντας τους ακόλουθους κανόνες.

Πρώτα, η διόρθωση λαμβάνει μια διατεταγμένη λίστα πιθανών ονομάτων αρχείων ως εξής:

Εάν η κεφαλίδα είναι αυτή μιας διαφοράς περιβάλλοντος, η διόρθωση λαμβάνει τα παλιά και νέα ονόματα αρχείων στην κεφαλίδα. Ένα όνομα αγνοείται εάν δεν έχει αρκετές κάθετες γραμμές για να ικανοποιήσει την επιλογή -pnum ή --strip=num. Το όνομα /dev/null αγνοείται επίσης.

Εάν υπάρχει μια γραμμή Index: στις αρχικές αχρήστες πληροφορίες και είτε τα παλιά και νέα ονόματα λείπουν είτε η διόρθωση συμμορφώνεται με το POSIX, η διόρθωση λαμβάνει το όνομα στη γραμμή Index:.

Για τους σκοπούς των ακόλουθων κανόνων, τα πιθανά ονόματα αρχείων θεωρούνται ότι είναι στην τάξη (παλιό, νέο, ευρετήριο), ανεξάρτητα από τη σειρά με την οποία εμφανίζονται στην κεφαλίδα.

Στη συνέχεια, η διόρθωση επιλέγει ένα όνομα αρχείου από την λίστα πιθανών ονομάτων ως εξής:

Εάν ορισμένα από τα ονομασμένα αρχεία υπάρχουν, η διόρθωση επιλέγει το πρώτο όνομα εάν συμμορφώνεται με το POSIX και το καλύτερο όνομα διαφορετικά.

Εάν η διόρθωση δεν αγνοεί τα RCS, ClearCase, Perforce και SCCS (δείτε την επιλογή -g num ή --get=num) και δεν υπάρχουν ονομασμένα αρχεία αλλά βρίσκεται ένα κύριο αρχείο RCS, ClearCase, Perforce ή SCCS, η διόρθωση επιλέγει το πρώτο ονομασμένο αρχείο με ένα κύριο αρχείο RCS, ClearCase, Perforce ή SCCS.

Εάν δεν υπάρχουν ονομασμένα αρχεία, δεν βρέθηκε κανένα κύριο αρχείο RCS, ClearCase, Perforce ή SCCS, ορισμένα ονόματα δίνονται, η διόρθωση δεν συμμορφώνεται με το POSIX και η διόρθωση φαίνεται να δημιουργεί ένα αρχείο, η διόρθωση επιλέγει το καλύτερο όνομα που απαιτεί τη δημιουργία του μικρότερου αριθμού καταλόγων.

Εάν δεν προκύπτει όνομα αρχείου από τις παραπάνω ευρετικές μεθόδους, σας ζητείται το όνομα του αρχείου που θα διορθωθεί και η εντολή patch επιλέγει αυτό το όνομα.

Για να προσδιορίσει το καλύτερο από μια μη κενή λίστα ονομάτων αρχείων, η patch αρχικά επιλέγει όλα τα ονόματα με τον μικρότερο αριθμό στοιχείων διαδρομής. Από αυτά, επιλέγει όλα τα ονόματα με το συντομότερο όνομα αρχείου (basename). Από αυτά, επιλέγει όλα τα συντομότερα ονόματα και, τέλος, επιλέγει το πρώτο από τα υπόλοιπα ονόματα.

Επιπλέον, εάν η εισαγωγική "αχρηστία" περιέχει μια γραμμή Prereq:, η patch παίρνει την πρώτη λέξη από τη γραμμή προαπαιτούμενων (συνήθως έναν αριθμό έκδοσης) και ελέγχει στο αρχικό αρχείο εάν αυτή η λέξη μπορεί να βρεθεί. Εάν δεν βρεθεί, η patch ζητά επιβεβαίωση πριν συνεχίσει.

Το αποτέλεσμα όλων αυτών είναι ότι θα πρέπει να μπορείτε να εκτελέσετε μια εντολή όπως η ακόλουθη:

patch -d /usr/src/local/blurfl

και να εφαρμόσετε ένα αρχείο διόρθωσης στον κατάλογο blurfl απευθείας από ένα αρχείο διόρθωσης που διαβάζεται από την τυπική είσοδο.

Εάν το αρχείο διόρθωσης περιέχει περισσότερες από μία διορθώσεις, η patch προσπαθεί να εφαρμόσει καθεμία από αυτές σαν να προέρχονταν από ξεχωριστά αρχεία διόρθωσης. Αυτό σημαίνει, μεταξύ άλλων, ότι υποτίθεται ότι το όνομα του αρχείου που θα διορθωθεί πρέπει να προσδιορίζεται για κάθε λίστα διαφορών και ότι η "αχρηστία" πριν από κάθε λίστα διαφορών περιέχει ενδιαφέρουσες πληροφορίες, όπως ονόματα αρχείων και επίπεδο αναθεώρησης, όπως αναφέρθηκε προηγουμένως.

ΕΠΙΛΟΓΕΣ

-b ή --backup

Δημιουργία αρχείων δημιουργίας αντιγράφων ασφαλείας. Δηλαδή, κατά την εφαρμογή μιας διόρθωσης σε ένα αρχείο, μετονομάζει ή αντιγράφει το αρχικό αντί να το διαγράφει. Δείτε την επιλογή -V ή --version-control για λεπτομέρειες σχετικά με τον τρόπο προσδιορισμού των ονομάτων αρχείων δημιουργίας αντιγράφων ασφαλείας.

--backup-if-mismatch

Δημιουργία αντιγράφου ασφαλείας ενός αρχείου εάν η διόρθωση δεν ταιριάζει ακριβώς με το αρχείο και εάν δεν έχουν ζητηθεί δημιουργίες αντιγράφων ασφαλείας. Αυτή είναι η προεπιλογή εκτός εάν η patch συμμορφώνεται με το POSIX.

--no-backup-if-mismatch

Μην δημιουργείτε αντίγραφο ασφαλείας ενός αρχείου εάν η διόρθωση δεν ταιριάζει ακριβώς με το αρχείο και εάν δεν έχουν ζητηθεί δημιουργίες αντιγράφων ασφαλείας. Αυτή είναι η προεπιλογή εάν η patch συμμορφώνεται με το POSIX.

-B pref ή --prefix=pref

Χρησιμοποιήστε την απλή μέθοδο για τον προσδιορισμό των ονομάτων αρχείων δημιουργίας αντιγράφων ασφαλείας (δείτε την επιλογή -V ή --version-control) και προσθέστε το pref σε ένα όνομα αρχείου κατά τη δημιουργία του ονόματος του αρχείου δημιουργίας αντιγράφων ασφαλείας. Για παράδειγμα, με το -B /junk/, το απλό όνομα αρχείου δημιουργίας αντιγράφων ασφαλείας για το src/patch/util.c είναι /junk/src/patch/util.c.

--binary

Γράψτε όλα τα αρχεία σε δυαδική μορφή, εκτός από την τυπική έξοδο και το /dev/tty. Κατά την ανάγνωση, απενεργοποιήστε την ευρετική για τη μετατροπή των τερματισμών γραμμής CRLF σε τερματισμούς γραμμής LF. Αυτή η επιλογή είναι απαραίτητη σε συστήματα POSIX όταν εφαρμόζονται διορθώσεις που δημιουργήθηκαν σε μη POSIX συστήματα σε μη POSIX αρχεία. (Σε συστήματα POSIX, οι αναγνώσεις και οι εγγραφές αρχείων δεν μετατρέπουν ποτέ τους τερματισμούς γραμμής. Στα Windows, οι αναγνώσεις και οι εγγραφές μετατρέπουν τους τερματισμούς γραμμής από προεπιλογή και οι διορθώσεις θα πρέπει να δημιουργούνται με την επιλογή diff --binary όταν οι τερματισμοί γραμμής είναι σημαντικοί.)

-c ή --context

Ερμηνεύστε το αρχείο διόρθωσης ως μια συνηθισμένη διόρθωση περιβάλλοντος.

-d dir ή --directory=dir

Αλλάξτε στον κατάλογο dir αμέσως, πριν κάνετε οτιδήποτε άλλο.


-D ορισμός  ή  --ifdef=ορισμός

Χρησιμοποιήστε την κατασκευή #ifdef ... #endif για να επισημάνετε αλλαγές, με τον ορισμό ως διακριτικό σύμβολο.

--dry-run

Εκτυπώστε τα αποτελέσματα της εφαρμογής των διορθώσεων χωρίς να αλλάξετε πραγματικά κανένα αρχείο.

-e  ή  --ed

Ερμηνεύστε το αρχείο διόρθωσης ως σενάριο ed.

-E  ή  --remove-empty-files

Αφαιρέστε τα αρχεία εξόδου που είναι κενά μετά την εφαρμογή των διορθώσεων. Κανονικά αυτή η επιλογή είναι περιττή, καθώς το patch μπορεί να εξετάσει τις χρονικές σφραγίδες στην κεφαλίδα για να καθορίσει εάν ένα αρχείο πρέπει να υπάρχει μετά την εφαρμογή της διόρθωσης. Ωστόσο, εάν η είσοδος δεν είναι ένα context diff ή εάν το patch συμμορφώνεται με το POSIX, το patch δεν αφαιρεί κενά διορθωμένα αρχεία εκτός εάν δοθεί αυτή η επιλογή. Όταν το patch αφαιρεί ένα αρχείο, προσπαθεί επίσης να αφαιρέσει τυχόν κενούς προγονικούς καταλόγους.

-f  ή  --force

Υποθέστε ότι ο χρήστης γνωρίζει ακριβώς τι κάνει και μην υποβάλλετε ερωτήσεις. Παραλείψτε διορθώσεις των οποίων οι κεφαλίδες δεν λένε ποιο αρχείο πρόκειται να διορθωθεί· διορθώστε αρχεία παρόλο που έχουν λάθος έκδοση για τη γραμμή Prereq: στη διόρθωση· και υποθέστε ότι οι διορθώσεις δεν είναι αντεστραμμένες ακόμα κι αν μοιάζουν να είναι. Αυτή η επιλογή δεν καταστέλλει τα σχόλια· χρησιμοποιήστε το -s για αυτό.

-F αριθμός  ή  --fuzz=αριθμός

Ορίστε τον μέγιστο παράγοντα ασάφειας. Αυτή η επιλογή ισχύει μόνο για diffs που έχουν περιεχόμενο και αναγκάζει το patch να αγνοήσει έως και τόσες γραμμές περιεχομένου κατά την αναζήτηση σημείων για εγκατάσταση ενός τμήματος. Σημειώστε ότι ένας μεγαλύτερος παράγοντας ασάφειας αυξάνει τις πιθανότητες μιας ελαττωματικής διόρθωσης. Ο προεπιλεγμένος παράγοντας ασάφειας είναι 2. Ένας παράγοντας ασάφειας μεγαλύτερος ή ίσος με τον αριθμό των γραμμών περιεχομένου στο context diff, συνήθως 3, αγνοεί όλο το περιεχόμενο.

-g αριθμός  ή  --get=αριθμός

Αυτή η επιλογή ελέγχει τις ενέργειες του patch όταν ένα αρχείο βρίσκεται υπό έλεγχο RCS ή SCCS και δεν υπάρχει ή είναι μόνο για ανάγνωση και ταιριάζει με την προεπιλεγμένη έκδοση, ή όταν ένα αρχείο είναι υπό έλεγχο ClearCase ή Perforce και δεν υπάρχει. Εάν ο αριθμός είναι θετικός, το patch λαμβάνει (ή κάνει checkout) το αρχείο από το σύστημα ελέγχου αναθεωρήσεων· εάν είναι μηδέν, το patch αγνοεί τα RCS, ClearCase, Perforce και SCCS και δεν λαμβάνει το αρχείο· και εάν είναι αρνητικός, το patch ρωτά τον χρήστη εάν θα λάβει το αρχείο. Η προεπιλεγμένη τιμή αυτής της επιλογής δίνεται από την τιμή της μεταβλητής περιβάλλοντος PATCH_GET εάν έχει οριστεί· εάν όχι, η προεπιλεγμένη τιμή είναι μηδέν.

--help

Εκτυπώστε μια σύνοψη των επιλογών και τερματίστε.

-i αρχείο_διόρθωσης  ή  --input=αρχείο_διόρθωσης

Διαβάστε τη διόρθωση από το αρχείο_διόρθωσης. Εάν το αρχείο_διόρθωσης είναι -, διαβάστε από την τυπική είσοδο, την προεπιλογή.

-l  ή  --ignore-whitespace

Αντιστοιχίστε πρότυπα χαλαρά, σε περίπτωση που οι στηλοθέτες ή τα κενά έχουν αλλοιωθεί στα αρχεία σας. Οποιαδήποτε ακολουθία ενός ή περισσοτέρων κενών στο αρχείο διόρθωσης ταιριάζει με οποιαδήποτε ακολουθία στο αρχικό αρχείο και οι ακολουθίες κενών στο τέλος των γραμμών αγνοούνται. Οι κανονικοί χαρακτήρες πρέπει να εξακολουθούν να ταιριάζουν ακριβώς. Κάθε γραμμή του περιεχομένου πρέπει να εξακολουθεί να ταιριάζει με μια γραμμή στο αρχικό αρχείο.

--merge ή --merge=merge ή --merge=diff3

Συγχωνεύστε ένα αρχείο διόρθωσης στα αρχικά αρχεία παρόμοια με το diff3(1) ή το merge(1). Εάν βρεθεί μια σύγκρουση, το patch εξάγει μια προειδοποίηση και περικλείει τη σύγκρουση με γραμμές <<<<<<< και >>>>>>>. Μια τυπική σύγκρουση θα μοιάζει με αυτό:


<<<<<<<
γραμμές από το αρχικό αρχείο
|||||||
αρχικές γραμμές από το patch
=======
νέες γραμμές από το patch
>>>>>>>

Η προαιρετική παράμετρος του --merge καθορίζει τη μορφή εξόδου για τις συγκρούσεις: η μορφή diff3 εμφανίζει την ενότητα ||||||| με τις αρχικές γραμμές από το patch· στη μορφή merge, αυτή η ενότητα λείπει. Η μορφή merge είναι η προεπιλεγμένη.

Αυτή η επιλογή υποδηλώνει την επιλογή --forward και δεν λαμβάνει υπόψη την επιλογή --fuzz=num.

-n ή --normal

Ερμηνεύστε το αρχείο patch ως ένα κανονικό diff.

-N ή --forward

Όταν ένα patch δεν εφαρμόζεται, το patch συνήθως ελέγχει αν το patch φαίνεται ότι έχει ήδη εφαρμοστεί, προσπαθώντας να αντιστρέψει την πρώτη ενότητα. Η επιλογή --forward αποτρέπει αυτό. Δείτε επίσης την επιλογή -R.

-o outfile ή --output=outfile

Στείλτε την έξοδο στο outfile αντί να εφαρμόσετε τα αρχεία επιτόπου. Μην χρησιμοποιείτε αυτήν την επιλογή εάν το outfile είναι ένα από τα αρχεία που πρόκειται να εφαρμοστούν. Όταν το outfile είναι -, στείλτε την έξοδο στην τυπική έξοδο και στείλτε τυχόν μηνύματα που συνήθως θα πήγαιναν στην τυπική έξοδο στην τυπική έξοδο σφαλμάτων.

-pnum ή --strip=num

Αφαιρέστε το μικρότερο πρόθεμα που περιέχει num αρχικές κάθετες γραμμές από κάθε όνομα αρχείου που βρίσκεται στο αρχείο patch. Μια ακολουθία μιας ή περισσότερων συνεχόμενων κάθετων γραμμών μετράται ως μία μόνο κάθετη γραμμή. Αυτό ελέγχει τον τρόπο με τον οποίο αντιμετωπίζονται τα ονόματα αρχείων που βρίσκονται στο αρχείο patch, σε περίπτωση που διατηρείτε τα αρχεία σας σε διαφορετικό κατάλογο από το άτομο που έστειλε το patch. Για παράδειγμα, υποθέτοντας ότι το όνομα αρχείου στο αρχείο patch είναι

/u/howard/src/blurfl/blurfl.c

η ρύθμιση -p0 δίνει το πλήρες όνομα αρχείου χωρίς τροποποιήσεις, το -p1 δίνει

u/howard/src/blurfl/blurfl.c

χωρίς την αρχική κάθετη γραμμή, το -p4 δίνει

blurfl/blurfl.c

και η μη καθορισμός του -p απλώς σας δίνει blurfl.c. Ό,τι και αν καταλήξετε, αναζητάται είτε στον τρέχοντα κατάλογο είτε στον κατάλογο που καθορίζεται από την επιλογή -d.

--posix

Συμμορφωθείτε πιο αυστηρά με το πρότυπο POSIX, ως εξής.

Λάβετε το πρώτο υπάρχον αρχείο από τη λίστα (παλιό, νέο, index) κατά την εξαγωγή των ονομάτων αρχείων από τις κεφαλίδες diff.

Μην αφαιρείτε αρχεία που είναι άδεια μετά την εφαρμογή του patch.

Μην ζητάτε να λάβετε αρχεία από τα RCS, ClearCase, Perforce ή SCCS.

Απαιτήστε να προηγούνται όλες οι επιλογές των αρχείων στη γραμμή εντολών.

Μην δημιουργείτε αντίγραφα ασφαλείας αρχείων όταν υπάρχει ασυμφωνία.

--quoting-style=word

Χρησιμοποιήστε το στυλ word για την απόδοση ονομάτων εξόδου. Η λέξη θα πρέπει να είναι μία από τις ακόλουθες:

literal
Αποδώστε τα ονόματα όπως είναι.

shell
Αποδώστε τα ονόματα για το shell εάν περιέχουν χαρακτήρες μετα-shell ή θα προκαλούσαν διφορούμενη έξοδο.

shell-always
Αποδώστε τα ονόματα για το shell, ακόμη και αν κανονικά δεν απαιτούν απόδοση.

c
Αποδώστε τα ονόματα όπως για μια συμβολοσειρά C.

escape
Αποδώστε όπως με το c, εκτός από την παράλειψη των περιβάλλοντων χαρακτήρων διπλού εισαγωγικού.

Μπορείτε να καθορίσετε την προεπιλεγμένη τιμή της επιλογής --quoting-style με τη μεταβλητή περιβάλλοντος QUOTING_STYLE. Εάν αυτή η μεταβλητή περιβάλλοντος δεν έχει οριστεί, η προεπιλεγμένη τιμή είναι shell.


-r rejectfile ή --reject-file=rejectfile
Τοποθετεί τις απορρίψεις στο αρχείο rejectfile αντί για το προεπιλεγμένο αρχείο .rej. Όταν το rejectfile είναι -, απορρίπτει τις απορρίψεις.

-R ή --reverse
Υποθέτει ότι αυτό το μπαλώμα δημιουργήθηκε με τα παλιά και νέα αρχεία αντιστραμμένα. (Ναι, φοβάμαι ότι συμβαίνει κατά καιρούς, η ανθρώπινη φύση είναι όπως είναι.) Το patch προσπαθεί να αντιστρέψει κάθε τμήμα πριν το εφαρμόσει. Οι απορρίψεις εξάγονται στην αντιστραμμένη μορφή. Η επιλογή -R δεν λειτουργεί με σενάρια διαφορών ed επειδή υπάρχουν πολύ λίγες πληροφορίες για να ανακατασκευαστεί η αντίστροφη λειτουργία.

Εάν το πρώτο τμήμα ενός μπαλώματος αποτύχει, το patch αντιστρέφει το τμήμα για να δει αν μπορεί να εφαρμοστεί με αυτόν τον τρόπο. Εάν μπορεί, σας ρωτά αν θέλετε να οριστεί η επιλογή -R. Εάν δεν μπορεί, το patch συνεχίζει να εφαρμόζεται κανονικά. (Σημείωση: αυτή η μέθοδος δεν μπορεί να ανιχνεύσει ένα αντιστραμμένο patch εάν είναι μια κανονική διαφορά και εάν η πρώτη εντολή είναι μια προσθήκη (δηλαδή, θα έπρεπε να είναι μια διαγραφή), επειδή οι προσθήκες επιτυγχάνουν πάντα, λόγω του γεγονότος ότι ένα κενό περιβάλλον ταιριάζει οπουδήποτε. Ευτυχώς, τα περισσότερα μπαλώματα προσθέτουν ή αλλάζουν γραμμές αντί να τις διαγράφουν, επομένως οι περισσότερες αντιστραμμένες κανονικές διαφορές ξεκινούν με μια διαγραφή, η οποία αποτυγχάνει, ενεργοποιώντας την ευριστική).

--read-only=behavior
Συμπεριφερθείτε όπως ζητείται όταν προσπαθείτε να τροποποιήσετε ένα αρχείο μόνο για ανάγνωση: αγνοήστε το πιθανό πρόβλημα, προειδοποιήστε για αυτό (η προεπιλογή) ή αποτύχετε.

--reject-format=format
Δημιουργήστε αρχεία απορριμμένων τμημάτων στην καθορισμένη μορφή (είτε περιβάλλοντος είτε ενοποιημένης). Χωρίς αυτήν την επιλογή, τα απορριφθέντα τμήματα εξάγονται σε μορφή ενοποιημένης διαφοράς εάν η εισαγόμενη διόρθωση ήταν σε αυτήν τη μορφή, διαφορετικά σε κανονική μορφή διαφοράς περιβάλλοντος.

-s ή --silent ή --quiet
Εκτελέστε σιωπηλά, εκτός εάν προκύψει σφάλμα.

--follow-symlinks
Κατά την αναζήτηση αρχείων εισόδου, ακολουθήστε τους συμβολικούς συνδέσμους. Αντικαταστήστε τους συμβολικούς συνδέσμους, αντί να τροποποιήσετε τα αρχεία στα οποία δείχνουν οι συμβολικοί σύνδεσμοι. Τα μπαλώματα σε στυλ Git σε συμβολικούς συνδέσμους δεν θα εφαρμόζονται πλέον. Αυτή η επιλογή υπάρχει για λόγους συμβατότητας με προηγούμενες εκδόσεις του patch. η χρήση της αποθαρρύνεται.

-t ή --batch
Καταστείλετε ερωτήσεις όπως -f, αλλά κάνετε διαφορετικές υποθέσεις: παραλείψτε τα μπαλώματα των οποίων οι κεφαλίδες δεν περιέχουν ονόματα αρχείων (το ίδιο με -f). παραλείψτε τα μπαλώματα για τα οποία το αρχείο έχει την εσφαλμένη έκδοση για τη γραμμή Prereq: στο μπαλώμα. και υποθέστε ότι τα μπαλώματα είναι αντιστραμμένα εάν φαίνεται ότι είναι.

-T ή --set-time
Ορίστε τους χρόνους τροποποίησης και πρόσβασης των διορθωμένων αρχείων από τις χρονικές σημάνσεις που δίνονται στις κεφαλίδες διαφοράς περιβάλλοντος. Εκτός εάν καθοριστεί στις χρονικές σημάνσεις, υποθέστε ότι οι κεφαλίδες διαφοράς περιβάλλοντος χρησιμοποιούν την τοπική ώρα.
Η χρήση αυτής της επιλογής με χρονικές σημάνσεις που δεν περιλαμβάνουν ζώνες ώρας δεν συνιστάται, επειδή τα μπαλώματα που χρησιμοποιούν την τοπική ώρα δεν μπορούν εύκολα να χρησιμοποιηθούν από άτομα σε άλλες ζώνες ώρας και επειδή οι τοπικές χρονικές σημάνσεις είναι ασαφείς όταν οι τοπικές ώρες μετακινούνται προς τα πίσω κατά τη διάρκεια των ρυθμίσεων της θερινής ώρας. Βεβαιωθείτε ότι οι χρονικές σημάνσεις περιλαμβάνουν ζώνες ώρας ή δημιουργήστε μπαλώματα με UTC και χρησιμοποιήστε την επιλογή -Z ή --set-utc αντί αυτού.

-u ή --unified

Ερμηνεύει το αρχείο patch ως ενιαία μορφή διαφορών με περιβάλλον (unified context diff).

-v ή --version

Εμφανίζει την επικεφαλίδα αναθεώρησης και την έκδοση του patch και εξέρχεται.

-V μέθοδος ή --version-control=μέθοδος

Χρησιμοποιεί τη μέθοδο για τον καθορισμό των ονομάτων των αρχείων δημιουργίας αντιγράφων ασφαλείας. Η μέθοδος μπορεί επίσης να δοθεί από τη μεταβλητή περιβάλλοντος PATCH_VERSION_CONTROL (ή, εάν αυτή δεν έχει οριστεί, από τη μεταβλητή περιβάλλοντος VERSION_CONTROL), η οποία αντικαθίσταται από αυτήν την επιλογή. Η μέθοδος δεν επηρεάζει το αν δημιουργούνται αρχεία δημιουργίας αντιγράφων ασφαλείας. επηρεάζει μόνο τα ονόματα τυχόν αρχείων δημιουργίας αντιγράφων ασφαλείας που δημιουργούνται.

Η τιμή της μεθόδου είναι παρόμοια με τη μεταβλητή version-control του GNU Emacs. το patch αναγνωρίζει επίσης συνώνυμα που είναι πιο περιγραφικά. Οι έγκυρες τιμές για τη μέθοδο είναι οι εξής (γίνονται δεκτά μοναδικά συντομογραφίες):

existing ή nil

Δημιουργεί αριθμημένα αντίγραφα ασφαλείας αρχείων που έχουν ήδη αντίγραφα ασφαλείας, διαφορετικά απλά αντίγραφα ασφαλείας. Αυτό είναι η προεπιλογή.

numbered ή t

Δημιουργεί αριθμημένα αντίγραφα ασφαλείας. Το όνομα του αριθμημένου αρχείου δημιουργίας αντιγράφου ασφαλείας για το F είναι F.~N~, όπου το N είναι ο αριθμός έκδοσης.

simple ή never

Δημιουργεί απλά αντίγραφα ασφαλείας. Οι επιλογές -B ή --prefix, -Y ή --basename-prefix και -z ή --suffix καθορίζουν το απλό όνομα αρχείου δημιουργίας αντιγράφου ασφαλείας. Εάν δεν δοθεί καμία από αυτές τις επιλογές, τότε χρησιμοποιείται μια απλή κατάληξη δημιουργίας αντιγράφου ασφαλείας. είναι η τιμή της μεταβλητής περιβάλλοντος SIMPLE_BACKUP_SUFFIX, εάν αυτή έχει οριστεί, και είναι .orig διαφορετικά.

Με αριθμημένα ή απλά αντίγραφα ασφαλείας, εάν το όνομα του αρχείου δημιουργίας αντιγράφου ασφαλείας είναι πολύ μεγάλο, χρησιμοποιείται η κατάληξη δημιουργίας αντιγράφου ασφαλείας ~ αντ' αυτού. εάν ακόμη και η προσθήκη του ~ θα έκανε το όνομα πολύ μεγάλο, τότε το ~ αντικαθιστά τον τελευταίο χαρακτήρα του ονόματος του αρχείου.

--verbose

Εξάγει επιπλέον πληροφορίες σχετικά με την εργασία που εκτελείται.

-x αριθμός ή --debug=αριθμός

Ορίζει τις εσωτερικές σημαίες αποσφαλμάτωσης που ενδιαφέρουν μόνο τους επιδιορθωτές του patch.

-Y προφ. ή --basename-prefix=προφ.

Χρησιμοποιεί την απλή μέθοδο για τον καθορισμό των ονομάτων των αρχείων δημιουργίας αντιγράφων ασφαλείας (δείτε την επιλογή -V μέθοδος ή --version-control μέθοδος) και προσθέτει το προφ. στο βασικό όνομα ενός ονόματος αρχείου κατά τη δημιουργία του ονόματος του αρχείου δημιουργίας αντιγράφου ασφαλείας του. Για παράδειγμα, με το -Y .del/ το απλό όνομα αρχείου δημιουργίας αντιγράφου ασφαλείας για το src/patch/util.c είναι src/patch/.del/util.c.

-z κατάληξη ή --suffix=κατάληξη

Χρησιμοποιεί την απλή μέθοδο για τον καθορισμό των ονομάτων των αρχείων δημιουργίας αντιγράφων ασφαλείας (δείτε την επιλογή -V μέθοδος ή --version-control μέθοδος) και χρησιμοποιεί την κατάληξη ως κατάληξη. Για παράδειγμα, με το -z - το όνομα αρχείου δημιουργίας αντιγράφου ασφαλείας για το src/patch/util.c είναι src/patch/util.c-.

-Z ή --set-utc

Ορίζει τις ώρες τροποποίησης και πρόσβασης των αρχείων που έχουν γίνει patch από τις χρονικές σημάνσεις που δίνονται στις κεφαλίδες διαφορών περιβάλλοντος. Εκτός εάν καθορίζεται στις χρονικές σημάνσεις, υποθέστε ότι οι κεφαλίδες διαφορών περιβάλλοντος χρησιμοποιούν τον Συντονισμένο Παγκόσμιο Χρόνο (UTC, γνωστό και ως GMT). Δείτε επίσης την επιλογή -T ή --set-time.

Οι επιλογές -Z ή --set-utc και -T ή --set-time συνήθως αποφεύγουν τον ορισμό της ώρας ενός αρχείου εάν η αρχική ώρα του αρχείου δεν ταιριάζει με την ώρα που δίνεται στην κεφαλίδα του patch, ή εάν το περιεχόμενό του δεν ταιριάζει ακριβώς με το patch. Ωστόσο, εάν δοθεί η επιλογή -f ή --force, η ώρα του αρχείου ορίζεται ανεξάρτητα από το γεγονός αυτό.

Λόγω των περιορισμών της μορφής εξόδου του diff, αυτές οι επιλογές δεν μπορούν να ενημερώσουν τις χρονικές σφραγίδες των αρχείων των οποίων το περιεχόμενο δεν έχει αλλάξει. Επίσης, εάν χρησιμοποιήσετε αυτές τις επιλογές, θα πρέπει να διαγράψετε (π.χ. με την εντολή make clean) όλα τα αρχεία που εξαρτώνται από τα αρχεία που έχουν διορθωθεί, ώστε οι επόμενες εκτελέσεις της εντολής make να μην μπερδεύονται από τις χρονικές σφραγίδες των αρχείων που έχουν διορθωθεί.

ΠΕΡΙΒΑΛΛΟΝ

PATCH_GET

Καθορίζει εάν η εντολή patch λαμβάνει τα αρχεία που λείπουν ή είναι μόνο για ανάγνωση από το RCS, το ClearCase, το Perforce ή το SCCS από προεπιλογή. Δείτε την επιλογή -g ή --get.

POSIXLY_CORRECT

Εάν έχει οριστεί, η εντολή patch συμμορφώνεται αυστηρότερα με το πρότυπο POSIX από προεπιλογή. Δείτε την επιλογή --posix.

QUOTING_STYLE

Προκαθορισμένη τιμή της επιλογής --quoting-style.

SIMPLE_BACKUP_SUFFIX

Επέκταση που θα χρησιμοποιηθεί για τα ονόματα των απλών αρχείων δημιουργίας αντιγράφων ασφαλείας αντί του .orig.

TMPDIR, TMP, TEMP

Κατάλογος για την τοποθέτηση προσωρινών αρχείων. Η εντολή patch χρησιμοποιεί την πρώτη μεταβλητή περιβάλλοντος σε αυτήν τη λίστα που έχει οριστεί. Εάν καμία δεν έχει οριστεί, η προεπιλογή είναι συγκεκριμένη για το σύστημα. Συνήθως είναι το /tmp σε συστήματα Unix.

VERSION_CONTROL ή PATCH_VERSION_CONTROL

Επιλέγει το στυλ ελέγχου έκδοσης. Δείτε τις επιλογές -v ή --version-control.

ΑΡΧΕΙΑ

$TMPDIR/p*
προσωρινά αρχεία

/dev/tty
τερματικό ελέγχου. Χρησιμοποιείται για να λάβει απαντήσεις σε ερωτήσεις που απευθύνονται στον χρήστη.

ΔΕΙΤΕ ΕΠΙΣΗΣ

diff(1), ed(1), merge(1).

Marshall T. Rose και Einar A. Stefferud, Proposed Standard for Message Encapsulation, Internet RFC 934 [https://datatracker.ietf.org/doc/html/rfc934] (1985-01).

ΣΗΜΕΙΩΣΕΙΣ ΓΙΑ ΤΟΥΣ ΑΠΟΣΤΟΛΕΙΣ ΤΩΝ ΔΙΟΡΘΩΣΕΩΝ

Υπάρχουν διάφορα πράγματα που πρέπει να έχετε κατά νου εάν πρόκειται να στείλετε διορθώσεις.

Δημιουργήστε τη διόρθωσή σας με συστηματικό τρόπο. Όταν χρησιμοποιείτε ένα σύστημα ελέγχου έκδοσης, αυτό θα πρέπει να είναι εύκολο. Για παράδειγμα, με το Git, μπορείτε να χρησιμοποιήσετε την εντολή git diff. Διαφορετικά, μια καλή μέθοδος είναι η εντολή diff -Naur old new, όπου τα old και new προσδιορίζουν τους παλιούς και τους νέους καταλόγους. Τα ονόματα old και new δεν θα πρέπει να περιέχουν διαγραμμίσεις.

Εάν η διόρθωση πρέπει να επικοινωνεί τις χρονικές σφραγίδες των αρχείων καθώς και το περιεχόμενο των αρχείων, οι κεφαλίδες των εντολών diff θα πρέπει να έχουν ημερομηνίες και ώρες σε Παγκόσμια Συντονισμένη Ώρα (UTC) χρησιμοποιώντας την παραδοσιακή μορφή Unix, ώστε οι παραλήπτες των διορθώσεων να μπορούν να χρησιμοποιήσουν την επιλογή -Z ή --set-utc. Ακολουθεί ένα παράδειγμα εντολής για τη δημιουργία τέτοιων κεφαλίδων, χρησιμοποιώντας σύνταξη Bourne shell:

LC_ALL=C TZ=UTC0 diff -Naur myprog-2.7 myprog-2.8

Ενημερώστε τους παραλήπτες σας σχετικά με τον τρόπο εφαρμογής της διόρθωσης, λέγοντάς τους σε ποιον κατάλογο να μεταβούν (cd) και ποιες επιλογές patch να χρησιμοποιήσουν. Η συμβολοσειρά επιλογών -Np1 συνιστάται. Ελέγξτε τη διαδικασία σας, προσποιούμενοι ότι είστε παραλήπτης και εφαρμόζοντας τη διόρθωσή σας σε ένα αντίγραφο των αρχικών αρχείων.

Μπορείτε να γλιτώσετε τους χρήστες από πολλές ταλαιπωρίες διατηρώντας ένα αρχείο patchlevel.h, το οποίο διορθώνεται ώστε να αυξάνεται το επίπεδο διόρθωσης ως η πρώτη διόρθωση στο αρχείο διόρθωσης που στέλνετε. Εάν τοποθετήσετε μια γραμμή Prereq: με τη διόρθωση, δεν θα τους επιτρέψει να εφαρμόσουν διορθώσεις εκτός σειράς χωρίς κάποια προειδοποίηση.


Μπορείτε να δημιουργήσετε ένα αρχείο στέλνοντας μια διαφορά που συγκρίνει το /dev/null ή ένα άδειο αρχείο με ημερομηνία την Εποχή (1970-01-01 00:00:00 UTC) με το αρχείο που θέλετε να δημιουργήσετε. Αυτό λειτουργεί μόνο εάν το αρχείο που θέλετε να δημιουργήσετε δεν υπάρχει ήδη στον στοχευμένο κατάλογο. Αντίθετα, μπορείτε να διαγράψετε ένα αρχείο στέλνοντας μια διαφορά περιβάλλοντος που συγκρίνει το αρχείο που θα διαγραφεί με ένα άδειο αρχείο με ημερομηνία την Εποχή. Το αρχείο θα διαγραφεί, εκτός εάν το patch συμμορφώνεται με το POSIX και η επιλογή -E ή --remove-empty-files δεν δίνεται. Ένας εύκολος τρόπος για να δημιουργήσετε διορθώσεις που δημιουργούν και διαγράφουν αρχεία είναι να χρησιμοποιήσετε την επιλογή -N ή --new-file του GNU diff.

Εάν ο παραλήπτης υποτίθεται ότι θα χρησιμοποιήσει την επιλογή -pN, μην στέλνετε έξοδο που να μοιάζει με αυτό:

diff -Naur v2.0.29/prog/README prog/README
--- v2.0.29/prog/README   Mon Mar 10 15:13:12 2024
+++ prog/README   Mon Mar 17 14:58:22 2024

επειδή τα δύο ονόματα αρχείων έχουν διαφορετικό αριθμό κάθετων γραμμών και διαφορετικές εκδόσεις του patch ερμηνεύουν τα ονόματα αρχείων διαφορετικά. Για να αποφύγετε τη σύγχυση, στείλτε έξοδο που να μοιάζει με αυτό:

diff -Naur v2.0.29/prog/README v2.0.30/prog/README
--- v2.0.29/prog/README   Mon Mar 10 15:13:12 2024
+++ v2.0.30/prog/README   Mon Mar 17 14:58:22 2024

Αποφύγετε την αποστολή διορθώσεων που συγκρίνουν ονόματα αρχείων δημιουργίας αντιγράφων ασφαλείας, όπως το README.orig, καθώς αυτό μπορεί να προκαλέσει σύγχυση στο patch και να κάνει patch σε ένα αρχείο δημιουργίας αντιγράφων ασφαλείας αντί για το πραγματικό αρχείο. Αντί αυτού, στείλτε διορθώσεις που συγκρίνουν τα ίδια ονόματα βάσης αρχείων σε διαφορετικούς καταλόγους, π.χ. old/README και new/README.

Προσέξτε να μην στέλνετε αντίστροφες διορθώσεις, καθώς αυτό κάνει τους ανθρώπους να αναρωτιούνται εάν έχουν ήδη εφαρμόσει τη διόρθωση.

Προσπαθήστε να μην κάνετε τις διορθώσεις σας να τροποποιούν παράγωγα αρχεία (π.χ. το αρχείο configure όπου υπάρχει μια γραμμή configure: configure.ac στο αρχείο makefile), καθώς ο παραλήπτης θα πρέπει να είναι σε θέση να αναδημιουργήσει τα παράγωγα αρχεία ούτως ή άλλως. Εάν πρέπει να στείλετε διορθώσεις για παράγωγα αρχεία, δημιουργήστε τις διορθώσεις χρησιμοποιώντας την ώρα UTC, ζητήστε από τους παραλήπτες να εφαρμόσουν τη διόρθωση με την επιλογή -Z ή --set-utc και ζητήστε τους να διαγράψουν τυχόν αρχεία που δεν έχουν διορθωθεί και στα οποία εξαρτώνται τα διορθωμένα αρχεία (π.χ. με την εντολή make clean).

Ενώ μπορεί να καταφέρετε να βάλετε 582 λίστες διορθώσεων σε ένα αρχείο, μπορεί να είναι σοφότερο να ομαδοποιήσετε τις σχετικές διορθώσεις σε ξεχωριστά αρχεία, σε περίπτωση που κάτι πάει στραβά.

ΔΙΑΓΝΩΣΤΙΚΑ

Τα διαγνωστικά συνήθως υποδεικνύουν ότι το patch δεν μπόρεσε να αναλύσει το αρχείο διόρθωσης.

Εάν δοθεί η επιλογή --verbose, το μήνυμα Hmm... υποδεικνύει ότι υπάρχει μη επεξεργασμένο κείμενο στο αρχείο διόρθωσης και ότι το patch προσπαθεί να διακρίνει εάν υπάρχει μια διόρθωση σε αυτό το κείμενο και, εάν υπάρχει, τι είδους διόρθωση είναι.

Η κατάσταση εξόδου του patch είναι 0 εάν όλα τα τμήματα εφαρμόζονται με επιτυχία, 1 εάν ορισμένα τμήματα δεν μπορούν να εφαρμοστούν ή υπάρχουν συγκρούσεις ενοποίησης και 2 εάν υπάρχει ένα πιο σοβαρό πρόβλημα. Όταν εφαρμόζετε μια σειρά διορθώσεων σε έναν βρόχο, είναι καλό να ελέγχετε αυτήν την κατάσταση εξόδου, ώστε να μην εφαρμόσετε μια μεταγενέστερη διόρθωση σε ένα αρχείο που έχει εφαρμοστεί μερικώς.

ΠΡΟΕΙΔΟΠΟΙΗΣΕΙΣ

Οι διορθώσεις περιβάλλοντος δεν μπορούν να αναπαραστήσουν αξιόπιστα τη δημιουργία ή τη διαγραφή κενών αρχείων, κενών καταλόγων ή ειδικών αρχείων, όπως συμβολικών συνδέσμων. Ούτε μπορούν να αναπαραστήσουν αλλαγές στα μεταδεδομένα αρχείων, όπως η ιδιοκτησία, τα δικαιώματα ή εάν ένα αρχείο είναι ένας σκληρός σύνδεσμος σε ένα άλλο. Εάν απαιτούνται επίσης αλλαγές όπως αυτές, ξεχωριστές οδηγίες (π.χ. ένα σενάριο shell) για την επίτευξή τους θα πρέπει να συνοδεύουν τη διόρθωση.


Το `patch` δεν μπορεί να διαπιστώσει εάν οι αριθμοί γραμμών είναι λανθασμένοι σε ένα σενάριο `ed`, και μπορεί να εντοπίσει κακούς αριθμούς γραμμών σε μια κανονική διαφορά μόνο όταν βρει μια αλλαγή ή διαγραφή. Μια διαφορά περιβάλλοντος που χρησιμοποιεί έναν παράγοντα θολότητας 3 μπορεί να έχει το ίδιο πρόβλημα. Θα πρέπει πιθανώς να κάνετε μια διαφορά περιβάλλοντος σε αυτές τις περιπτώσεις για να δείτε εάν οι αλλαγές είχαν νόημα. Φυσικά, η μεταγλώττιση χωρίς σφάλματα είναι μια αρκετά καλή ένδειξη ότι η διόρθωση λειτούργησε, αλλά όχι πάντα.

Το `patch` συνήθως παράγει τα σωστά αποτελέσματα, ακόμη και όταν πρέπει να κάνει πολλές εικασίες. Ωστόσο, τα αποτελέσματα είναι εγγυημένα σωστά μόνο όταν η διόρθωση εφαρμόζεται ακριβώς στην ίδια έκδοση του αρχείου από την οποία δημιουργήθηκε η διόρθωση.

ΘΕΜΑΤΑ ΣΥΜΒΑΤΟΤΗΤΑΣ

Το πρότυπο POSIX καθορίζει συμπεριφορά που διαφέρει από το GNU patch.

Στο patch POSIX, όταν δεν χρησιμοποιείται το -b, δεν δημιουργούνται αντίγραφα ασφαλείας ακόμη και όταν υπάρχει ασυμφωνία. Στο GNU patch, αυτή η συμπεριφορά ενεργοποιείται με την επιλογή --no-backup-if-mismatch ή με τη συμμόρφωση με το POSIX με την επιλογή --posix ή με τη ρύθμιση της μεταβλητής περιβάλλοντος POSIXLY_CORRECT.

Όταν προσπαθεί να κατανοήσει το όνομα του αρχείου που θα διορθωθεί από την κεφαλίδα της διόρθωσης, το patch χρησιμοποιεί μια περίπλοκη μέθοδο που είναι προαιρετικά συμβατή με το POSIX. Η μέθοδος είναι ισοδύναμη με το POSIX εάν τα ονόματα αρχείων στην κεφαλίδα της διαφοράς περιβάλλοντος και στη γραμμή Index: είναι όλα τα ίδια αφού αφαιρεθούν τα κοινά προθέματα. Η διόρθωσή σας είναι συνήθως συμβατή εάν κάθε όνομα αρχείου στην κεφαλίδα περιέχει τον ίδιο αριθμό κάθετων γραμμών.

Περιορίστε τον εαυτό σας στις ακόλουθες επιλογές όταν στέλνετε οδηγίες που προορίζονται για εκτέλεση από οποιονδήποτε εκτελεί το GNU patch ή μια διόρθωση που συμμορφώνεται με το POSIX. Τα κενά είναι προαιρετικά στην ακόλουθη λίστα.

-b
-c
-d dir
-D define
-e
-i patchfile
-l
-n
-N
-o outfile
-p num
-R
-r rejectfile
-u

ΣΦΑΛΜΑΤΑ

Αναφέρετε σφάλματα μέσω email στη διεύθυνση <_>.

Εάν ο κώδικας έχει αντιγραφεί (για παράδειγμα με #ifdef OLDCODE ... #else ... #endif), το patch δεν μπορεί να διορθώσει και τις δύο εκδόσεις και, εάν λειτουργήσει καθόλου, πιθανότατα θα διορθώσει τη λάθος έκδοση και θα σας πει ότι η διόρθωση έγινε με επιτυχία.

Εάν εφαρμόσετε μια διόρθωση που έχετε ήδη εφαρμόσει, το patch νομίζει ότι είναι μια αντίστροφη διόρθωση και προσφέρει να καταργήσει την εφαρμογή της διόρθωσης. Αυτό θα μπορούσε να θεωρηθεί ως χαρακτηριστικό.

Η υπολογιστική διαδικασία για τη συγχώνευση μιας ομάδας είναι σημαντικά πιο δύσκολη από τη χρήση του τυπικού αλγορίθμου θολότητας. Μεγαλύτερες ομάδες, περισσότερο περιβάλλον, μεγαλύτερη απόκλιση από την αρχική θέση και μια χειρότερη αντιστοιχία, όλα επιβραδύνουν τον αλγόριθμο.

ΑΔΕΙΑ ΧΡΗΣΗΣ

Πνευματικά δικαιώματα © 1989–2025 Free Software Foundation, Inc. Πνευματικά δικαιώματα © 1984–1986, 1988 Larry Wall.

Χορηγείται άδεια για τη δημιουργία και τη διανομή ακριβών αντιγράφων αυτού του εγχειριδίου, υπό την προϋπόθεση ότι η ειδοποίηση πνευματικών δικαιωμάτων και αυτή η ειδοποίηση άδειας διατηρούνται σε όλα τα αντίγραφα.


Επιτρέπεται η αντιγραφή και η διανομή τροποποιημένων εκδόσεων αυτού του εγχειριδίου υπό τις προϋποθέσεις για ακριβή αντιγραφή, με την προϋπόθεση ότι ολόκληρο το προκύπτον παράγωγο έργο διανέμεται υπό τους όρους μιας παρόμοιας σημείωσης άδειας.

Επιτρέπεται η αντιγραφή και η διανομή μεταφράσεων αυτού του εγχειριδίου σε άλλη γλώσσα, υπό τις παραπάνω προϋποθέσεις για τροποποιημένες εκδόσεις, εκτός εάν η παρούσα σημείωση άδειας μπορεί να συμπεριληφθεί στις μεταφράσεις που εγκρίνονται από τους κατόχους των δικαιωμάτων, αντί να συμπεριληφθεί στην αρχική αγγλική έκδοση.

ΣΥΓΓΡΑΦΕΙΣ

Ο Larry Wall έγραψε την αρχική έκδοση του patch. Ο Paul Eggert αφαίρεσε τους αυθαίρετους περιορισμούς του patch. πρόσθεσε υποστήριξη για δυαδικά αρχεία, ορισμό χρονικών στιγμών αρχείων και διαγραφή αρχείων. και το έκανε να συμμορφώνεται καλύτερα με το POSIX. Άλλοι συνεισφέροντες περιλαμβάνουν τον Wayne Davison, ο οποίος πρόσθεσε υποστήριξη για το unidiff, και τον David MacKenzie, ο οποίος πρόσθεσε υποστήριξη για διαμόρφωση και δημιουργία αντιγράφων ασφαλείας. Ο Andreas Gruenbacher πρόσθεσε υποστήριξη για συγχώνευση.