Cara Mendaftar Patch ke File (dan Membuat Patch) di Linux
patch
Perintah Linux memungkinkan Anda mentransfer perubahan dari satu kumpulan file ke kumpulan file lainnya dengan cepat dan aman. Pelajari cara menggunakan patch
cara sederhana.
Perintah patch dan diff
Bayangkan Anda memiliki file teks di komputer Anda. Anda menerima versi modifikasi dari file teks itu dari orang lain. Bagaimana Anda cepat mentransfer semua perubahan dari file yang dimodifikasi ke file asli Anda? Di situlah patch
dan diff
ikut bermain. patch
dan diff
ditemukan di Linux dan sistem operasi Mirip Unix lainnya, seperti macOS.
The diff
perintah menguji dua versi yang berbeda dari file dan daftar perbedaan antara mereka. Perbedaan tersebut dapat disimpan dalam file yang disebut file patch.
The patch
perintah dapat membaca file patch dan menggunakan isi sebagai set instruksi. Dengan mengikuti petunjuk tersebut, perubahan dalam file yang dimodifikasi direplikasi di file asli.
Sekarang bayangkan proses itu terjadi pada seluruh direktori file teks. Semua dalam sekali jalan. Itulah kekuatan patch
.
Terkadang Anda tidak dikirimi file yang dimodifikasi. Yang Anda dapatkan hanyalah file patch. Mengapa mengirim lusinan file ketika Anda dapat mengirim satu file, atau memposting satu file agar mudah diunduh?
Apa yang Anda lakukan dengan file tambalan untuk benar-benar menambal file Anda? Selain hampir menjadi pemusing lidah, itu juga pertanyaan yang bagus. Kami akan memandu Anda melalui artikel ini.
The patch
perintah yang paling sering digunakan oleh orang-orang yang bekerja dengan file kode sumber perangkat lunak, tetapi bekerja sama dengan baik dengan setiap set file teks apapun tujuan mereka, source code atau tidak.
TERKAIT: Bagaimana Membandingkan Dua File Teks di Terminal Linux
Skenario Contoh kami
Dalam skenario ini, kita berada di direktori bernama work yang berisi dua direktori lain. Satu disebut berfungsi, dan yang lainnya disebut terbaru . Direktori kerja menampung satu set file kode sumber. Direktori terbaru menyimpan versi terbaru dari file kode sumber tersebut, beberapa di antaranya telah dimodifikasi.
Untuk amannya, direktori kerja adalah salinan dari versi file teks saat ini. Ini bukan satu-satunya salinan dari mereka.
Menemukan Perbedaan Antara Dua Versi File
The diff
perintah menemukan perbedaan antara dua file. Tindakan defaultnya adalah membuat daftar baris yang dimodifikasi di jendela terminal.
Satu file disebut slang.c
. Kami akan membandingkan versi di direktori kerja dengan yang ada di direktori terbaru.
Opsi -u
(terpadu) memberi tahu diff
untuk juga mencantumkan beberapa baris teks yang tidak dimodifikasi dari sebelum dan sesudah setiap bagian yang diubah. Garis-garis ini disebut garis konteks. Mereka membantu patch
perintah menemukan dengan tepat di mana perubahan harus dilakukan di file asli.
Kami memberikan nama file sehingga diff
tahu file mana yang akan dibandingkan. File asli dicantumkan terlebih dahulu, kemudian file yang dimodifikasi. Ini adalah perintah yang kami berikan untuk diff
:
diff -u working / slang.c latest / slang.c
diff
menghasilkan daftar keluaran yang menunjukkan perbedaan antara file. Jika filenya identik, tidak akan ada output sama sekali. Melihat jenis keluaran dari ini diff
mengonfirmasi bahwa ada perbedaan antara dua versi file dan bahwa file asli perlu diperbaiki.
Membuat File Patch
Untuk menangkap perbedaan tersebut dalam file patch, gunakan perintah berikut. Itu adalah perintah yang sama seperti di atas, dengan keluaran dari diff
diarahkan ke file bernama slang.patch.
diff -u working / slang.c latest / slang.c> slang.patch
Nama file tambalan itu sewenang-wenang. Anda bisa menyebutnya apapun yang Anda suka. Memberikan ekstensi ".patch" adalah ide yang bagus; Namun, karena itu memperjelas jenis file itu.
Untuk patch
bertindak atas file patch dan memodifikasi file working / slang.c, gunakan perintah berikut. Opsi -u
(terpadu) memberi patch
tahu bahwa file tambalan berisi baris konteks terpadu. Dengan kata lain, kami menggunakan opsi -u dengan diff, jadi kami menggunakan -u
opsi dengan patch
.
patch -u working.slang.c -i slang.patch
Jika semuanya berjalan dengan baik, ada satu baris output yang memberi tahu Anda patch
sedang menambal file.
Membuat Backup FIle Asli
Kami dapat menginstruksikan patch
untuk membuat salinan cadangan dari file yang ditambal sebelum diubah dengan menggunakan opsi -b
(cadangan). Opsi -i
(input) memberi tahu patch nama file patch yang akan digunakan:
patch -u -b working.slang.c -i slang.patch
File ditambal seperti sebelumnya, tanpa ada perbedaan yang terlihat pada keluarannya. Namun, jika Anda melihat ke folder kerja, Anda akan melihat bahwa file bernama slang.c.orig telah dibuat. Stempel tanggal dan waktu file menunjukkan bahwa slang.c.orig adalah file asli dan slang.c adalah file baru yang dibuat oleh patch
.
Menggunakan diff With Directories
Kita dapat menggunakan diff
untuk membuat file patch yang berisi semua perbedaan antara file dalam dua direktori. Kami kemudian dapat menggunakan file patch itu dengan patch
agar perbedaan tersebut diterapkan ke file di folder kerja dengan satu perintah.
Opsi yang akan kami gunakan diff
adalah opsi -u
(konteks terpadu) yang telah kami gunakan sebelumnya, opsi -r
(rekursif) untuk diff
melihat sub-direktori dan opsi -N
(file baru).
The -N
pilihan menceritakan diff
bagaimana menangani file dalam direktori terbaru yang tidak di direktori kerja. Itu memaksa diff
untuk meletakkan instruksi di file patch sehingga patch
membuat file yang ada di direktori terbaru tetapi hilang dari direktori kerja.
Anda dapat mengelompokkan opsi menjadi satu sehingga mereka menggunakan satu tanda hubung ( -
).
Perhatikan bahwa kami hanya memberikan nama direktori, kami tidak memberi tahu diff
untuk melihat file tertentu:
diff -ruN bekerja / terbaru /> slang.patch
Mengintip Di Dalam File Patch
Mari kita lihat sekilas file tambalan. Kami akan menggunakan less
untuk melihat isinya.
Bagian atas file menunjukkan perbedaan antara dua versi slang.c.
Menggulir lebih jauh ke bawah melalui file tambalan, kita melihat bahwa itu kemudian menjelaskan perubahan dalam file lain yang disebut structs.h. Ini memverifikasi bahwa file tambalan pasti berisi perbedaan antara versi yang berbeda dari banyak file.
Lihat Sebelum Anda Melompat
Menambal koleksi file yang besar bisa jadi sedikit menakutkan, jadi kami akan menggunakan --dry-run
opsi untuk memeriksa semuanya baik-baik saja sebelum kami mengambil risiko dan berkomitmen untuk membuat perubahan.
The --dry-run
pilihan memberitahu patch
untuk melakukan segala sesuatu selain dari benar-benar memodifikasi file. patch
akan melakukan semua pemeriksaan pra-penerbangan pada file dan jika menemui masalah, ia akan melaporkannya. Bagaimanapun, tidak ada file yang diubah.
Jika tidak ada masalah yang dilaporkan, kami dapat mengulangi perintah tanpa --dry-run
opsi dan dengan percaya diri menambal file kami.
Opsi -d
(direktori) memberi tahu patch
direktori mana yang akan dikerjakan.
Perhatikan bahwa kami tidak menggunakan opsi -i
(input) untuk mengetahui patch
file patch mana yang berisi instruksi dari diff
. Sebagai gantinya, kami mengalihkan file patch ke patch
with <
.
patch --dry-run -ruN -d bekerja <slang.patch
Dari seluruh direktori, diff
ditemukan dua file untuk ditambal. Instruksi mengenai modifikasi untuk kedua file tersebut telah diperiksa patch
, dan tidak ada masalah yang dilaporkan.
Pemeriksaan pra-penerbangan baik-baik saja; kami siap untuk lepas landas.
Menambal Direktori
Untuk benar-benar menerapkan tambalan ke file, kami menggunakan perintah sebelumnya tanpa --dry-run
opsi.
patch -ruN -d bekerja <slang.patch
Kali ini setiap baris keluaran tidak dimulai dengan "pemeriksaan", setiap baris dimulai dengan "penambalan".
Dan tidak ada masalah yang dilaporkan. Kami dapat mengkompilasi kode sumber kami, dan kami akan menggunakan perangkat lunak versi terbaru.
Selesaikan Perbedaan Anda
Sejauh ini, ini adalah cara termudah dan teraman untuk digunakan patch
. Salin file target Anda ke folder dan tambal folder itu. Salin kembali ketika Anda senang bahwa proses penambalan selesai tanpa kesalahan.