alat diff dan patch

1

Saya mencoba membuat tambalan untuk banyak file yang saya ubah. saya menggunakan Meld yang melakukan pekerjaan yang sangat baik untuk membedakan file-file dalam sebuah rumah visual yang bagus, maka itu memungkinkan saya untuk menyimpan dan membuat file tambalan berdasarkan perubahan-perubahan itu.

Masalah yang saya miliki adalah lambat melakukan ini satu per satu. Apakah ada alat serupa yang bisa saya gunakan untuk pekerjaan batch? Saya ingin memeriksa semua file dalam dua direktori secara rekursif dan menghasilkan semua file patch berdasarkan temuannya.

Mike
sumber

Jawaban:

3

Meskipun saya belum pernah menggunakan Meld, saya merasa itu sebenarnya menggunakan 'diff' di bawah selimut. Cara saya selalu membuat file tambalan sederhana:

$ diff -ruN ${dir1} ${dir2} > ${patchfile}.patch

Itu menghasilkan satu file tambalan besar, yang kemudian dapat Anda hancurkan sebagai apporpriate. Untuk menghasilkan file tambalan individual untuk setiap perubahan yang ditemukan, Anda cukup menjalankan file besar itu melalui skrip yang terpecah ketika melihat perubahan baru (skrip yang tidak saya ketahui atau ketahui, karena saya tidak pernah menggunakan yang seperti itu ).

John
sumber
Saya pikir Anda benar, saya tidak tahu -u opsi untuk diff, itu membuat format sama. Bagaimana saya memperbarui baris itu untuk menghindari file tertentu? Misalnya saja *.o file yang ada di direktori.
Mike
Gunakan opsi --exclude = {pattern}. Ada sejumlah opsi yang mungkin atau tidak ingin Anda gunakan, saya sarankan membaca halaman manual untuk memahami apa yang tersedia. Program diff sebenarnya cukup kuat.
John
1

Itu apa diff adalah untuk. patch mengambil diff file output sebagai input. Lari saja diff dalam loop BASH untuk masing-masing file Anda. Misalnya, jika file asli dalam dirA dan yang baru di dirB (dengan nama file yang sama), lakukan ini (di ./dirA):

for n in $(ls * | grep -v ".o$"); do \
    diff -uN $n dirB/$n > $n.patch; patch $n < $n.patch; \
done 
terdon
sumber
@ Mike, lihat jawaban saya yang diperbarui untuk menghindari .o file.
terdon