Cara Mendaftar Patch ke File (dan Membuat Patch) di Linux

patchPerintah Linux memungkinkan Anda mentransfer perubahan dari satu kumpulan file ke kumpulan file lainnya dengan cepat dan aman. Pelajari cara menggunakan patchcara 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 patchdan diffikut bermain. patchdan diffditemukan di Linux dan sistem operasi Mirip Unix lainnya, seperti macOS.

The diffperintah 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 patchperintah 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 diffperintah 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 diffuntuk 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 difftahu 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

diffmenghasilkan daftar keluaran yang menunjukkan perbedaan antara file. Jika filenya identik, tidak akan ada output sama sekali. Melihat jenis keluaran dari ini diffmengonfirmasi 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 diffdiarahkan 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  patchbertindak 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 -uopsi dengan patch.

patch -u working.slang.c -i slang.patch

Jika semuanya berjalan dengan baik, ada satu baris output yang memberi tahu Anda patchsedang menambal file.

Membuat Backup FIle Asli

Kami dapat menginstruksikan patchuntuk 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 diffuntuk membuat file patch yang berisi semua perbedaan antara file dalam dua direktori. Kami kemudian dapat menggunakan file patch itu dengan patchagar perbedaan tersebut diterapkan ke file di folder kerja dengan satu perintah.

Opsi yang akan kami gunakan diffadalah opsi -u(konteks terpadu) yang telah kami gunakan sebelumnya, opsi -r(rekursif) untuk diffmelihat sub-direktori dan opsi -N(file baru).

The -Npilihan menceritakan diff bagaimana menangani file dalam direktori terbaru yang tidak di direktori kerja. Itu memaksa diffuntuk 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 diffuntuk melihat file tertentu:

diff -ruN bekerja / terbaru /> slang.patch

Mengintip Di Dalam File Patch

Mari kita lihat sekilas file tambalan. Kami akan menggunakan lessuntuk 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-runpilihan memberitahu patchuntuk melakukan segala sesuatu selain dari benar-benar memodifikasi file. patchakan 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-runopsi dan dengan percaya diri menambal file kami.

Opsi -d(direktori) memberi tahu patchdirektori mana yang akan dikerjakan.

Perhatikan bahwa kami tidak menggunakan opsi -i(input) untuk mengetahui patchfile patch mana yang berisi instruksi dari diff. Sebagai gantinya, kami mengalihkan file patch ke patchwith <.

patch --dry-run -ruN -d bekerja <slang.patch

Dari seluruh direktori, diffditemukan 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-runopsi.

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.