GNU/Linux >> Belajar Linux >  >> Linux

Berkolaborasi pada file menggunakan diff dan patch Linux

Saya mengedit banyak file teks. Terkadang itu kode. Di lain waktu itu adalah kata tertulis untuk permainan peran (RPG), buku pemrograman, atau korespondensi umum. Terkadang menyenangkan untuk membuat perubahan, tetapi bagi kolaborator saya untuk membandingkan perubahan saya dengan apa yang mereka tulis sebelumnya. Banyak orang default ke office suite, seperti LibreOffice, menggunakan komentar atau mengubah fitur pelacakan. Terkadang alat yang lebih sederhana lebih masuk akal, dan untuk itu, Anda dapat melihat riwayat pemrograman untuk alat seperti diff dan patch , yang menyediakan pemformatan standar untuk melacak dan menerapkan perubahan pada file bersama.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Bahkan dengan file sederhana, ada kerumitan dalam menyinkronkan dua dokumen. Beberapa item diubah, yang lain dibiarkan sendiri, konten baru ditambahkan, dan beberapa tetap sama tetapi dipindahkan ke tempat yang berbeda dalam dokumen. Sulit untuk mereplikasi perubahan tanpa dengan senang hati menerima bahwa semua perubahan sama-sama valid, dan mengganti file lama dengan yang baru. Ini juga buram secara monolitik. Ada begitu banyak perubahan sehingga sulit untuk memilih dengan tepat apa yang berubah.

Dengan diff perintah, Anda dapat membuat catatan tentang bagaimana file telah berubah, dan dengan patch Anda dapat "memutar ulang" perubahan tersebut pada versi lama untuk memperbaruinya dengan versi baru.

Penyiapan

Misalkan Anda dan saya berkolaborasi dalam sebuah file yang menjelaskan cara membuat secangkir teh.



Sejauh ini, file tea.md berisi copy-paste mentah:

Boil water.
Warm the teapot.
Add tea and water to the teapot.
Place a tea cosy over the teapot.
Steep for 6 minutes.
Pour tea into cup.
Add milk.

Tampaknya masuk akal, tetapi selalu ada pengoptimalan yang dapat Anda lakukan, jadi kirimkan file tersebut kepada saya untuk perbaikan. Untuk memperjelas proses pembuatan teh, saya menyalin file sebagai tea-revision.md dan edit, berakhir dengan ini:

Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Seperti yang diharapkan, beberapa item (Boil water dan Pour tea into cup ) tidak berubah, sedangkan baris lainnya (Warm the teapot ) memiliki tambahan. Beberapa baris benar-benar baru, dan beberapa baris sama tetapi dalam urutan yang berbeda.

Buat perbedaan

diff alat menampilkan perbedaan antara dua file. Ada beberapa cara berbeda untuk melihat hasilnya, tapi menurut saya yang paling jelas adalah --unified (-u singkatnya) tampilan, yang menunjukkan garis mana yang ditambahkan atau dikurangi. Garis yang diubah dengan cara apa pun diperlakukan sebagai garis yang dikurangi dan kemudian ditambahkan. Secara default, diff mencetak outputnya ke terminal.

Berikan diff dengan file lama dan kemudian file baru:

$ diff --unified tea.md tea-revised.md 
--- tea.md      2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+Warm a teapot in the proving drawer of your oven.
 Boil water.
-Warm the teapot.
-Add tea and water to the teapot.
-Place a tea cosy over the teapot.
-Steep for 6 minutes.
+Add tea leaves to a tea strainer.
+Add strainer and water to teapot.
+Steep for 6 minutes. Keep it warm with a tea cosy.
 Pour tea into cup.
-Add milk.
+Optionally, add warm milk.

Tanda plus (+ ) di awal baris menunjukkan sesuatu yang ditambahkan ke file lama. Tanda minus (- ) di awal baris menunjukkan baris yang dihapus atau diubah.

Buat patch dengan diff

File patch hanyalah output dari diff --unified perintah ditempatkan ke dalam file. Anda dapat melakukan ini menggunakan pengalihan Bash standar:

$ diff -u tea.md tea-revised.md > tea.patch

Isi file persis sama dengan apa yang dikeluarkan ke terminal. Saya suka melihat file tambalan di Emacs, yang memberi kode warna pada setiap baris tergantung pada apakah itu ditambahkan atau dikurangi.

Menerapkan perubahan dengan patch

Setelah saya memiliki file tambalan, saya dapat mengirimkannya kepada Anda untuk ditinjau dan, secara opsional, berlaku untuk file lama Anda. Anda menerapkan tambalan dengan patch perintah:

$ patch tea.md tea.patch

Baris ditambahkan, baris dikurangi, dan pada akhirnya, Anda mendapatkan file yang identik dengan versi saya:

$ cat tea.md
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Tidak ada batasan berapa kali Anda dapat menambal file. Anda dapat mengulangi perubahan saya, membuat tambalan baru, dan mengirimkannya kepada saya untuk ditinjau. Mengirim perubahan daripada hasil memungkinkan setiap kontributor meninjau apa yang berubah, memutuskan apa yang ingin mereka pertahankan atau hilangkan, dan mendokumentasikan prosesnya secara akurat.

Instal

Di Linux dan macOS, Anda sudah memiliki diff dan patch perintah. Di Windows, Anda dapat memperoleh diff dan patch melalui Cygwin, atau gunakan Chocolatey untuk menelusuri diffutils dan patch.

Jika Anda pernah mencoba berkolaborasi pada file melalui email atau chat, dan Anda mencoba untuk mendeskripsikan di mana Anda membutuhkan perubahan, maka Anda akan menyukai diff dan patch . File yang terstruktur dengan hati-hati, seperti kode atau penurunan harga yang dibatasi baris, mudah untuk dibedakan, ditambal, dan dipelihara.


Linux
  1. Bagaimana cara membuka kompresi format file .xz di Linux menggunakan utilitas tar dan xz?

  2. Tip dan trik .htaccess Linux

  3. Cara Mengenkripsi dan Mendekripsi File menggunakan GnuPG di Linux

  1. Cara Membuat dan Menerapkan Patch di GIT menggunakan diff and apply Command

  2. 7 Contoh Perintah Patch untuk Menerapkan File Patch Diff di Linux

  3. Sistem File yang Didukung dan Direkomendasikan di Linux

  1. Memelihara sistem file Linux menggunakan "fsck" dan "tune2fs"

  2. Cara Kompres dan Dekompresi file .bz2 di Linux Menggunakan Perintah bzip2

  3. Menggunakan kbhit() dan getch() di Linux