Saya ingin membuat tambalan dari gcc
cabang tertentu membandingkannya dengan rilis resmi; jadi ketika saya membongkar tarball dari rilis stabil, saya bisa menerapkan patch dan mendapatkan yang setara dengan apa yang ada di cabang tertentu.
Ini adalah pertama kalinya saya perlu membuat tambalan, jadi ini pertama kalinya saya melakukan ini dan perhatian utama saya adalah untuk mendapatkan opsi dan penguraian yang tepat karena kita berbicara tentang perangkat lunak yang sangat penting
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Apakah ini cukup dan cara terbaik untuk melakukannya?
gcc
stable resmitar.bz2
dan versi tidak stabil lainnya darigit
repositori, saya ingin membuat tambalan, tentu saja saya ingin membandingkan hanya terhadapmaster
cabang, bukan seluruh repositori.tar.bz2
jelas bukangit
repositori, bagaimana menurut Anda saya harus melanjutkan?Jawaban:
Ya, ini cara yang bagus untuk membuat tambalan.
Pendeknya:
Untuk membuat tambalan untuk satu file, perintah Anda mungkin terlihat seperti
diff -Naru file_original file_updated > file.patch
dimana
-N
: memperlakukan file yang tidak ada sebagai kosong-a
: memperlakukan semua file sebagai teks-r
: membandingkan secara subdirektori setiap subdirektori yang ditemukan-u
: output NUM (default 3) baris konteks terpaduUntuk membuat tambalan untuk seluruh direktori:
diff -crB dir_original dir_updated > dfile.patch
dimana
-c
: output NUM (default 3) baris konteks yang disalin-r
: membandingkan secara subdirektori sembarang subdirektori-B
: abaikan perubahan yang semua barisnya kosongBagaimanapun untuk menerapkan tambalan ini orang dapat menjalankan
di mana switch
p
menginstruksikan patch untuk menghapus awalan jalur sehingga file akan diidentifikasi dengan benar. Dalam kebanyakan kasus seharusnya1
.Hapus
--dry-run
jika Anda senang dari hasil yang dicetak di layar.sumber
dir_updated
dibandingkan dengan apa yang ada di dalamnyadir_original
? Thediff
mengurus itu juga atau akan dilewati?file.patch
hanya dalam file teks, sehingga Anda dapat membukanya di editor apa pun atau hanyacat
itu dan Anda akan melihat garis sepertionly in dir_original: missingfile.txt
patch
akan menghapus itumissingfile.txt
atau apa lagi?diff -N ...
seperti pada contoh pertama saya. Biasanyapatch
akan menghapus file kosong secara default. Jika Anda tidak mau, gunakan sajadiff -crB
seperti pada pertanyaan Anda. Juga dalam beberapa kasus (jarang)-E
opsi dalampatch
perintah diperlukan untuk menghapus file kosong, setelah menambal manual:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
mendapatkancan't find file to patch at input line 3
denganpatch -p0 --dry-run < diff.patch
baris pertama tambalan membaca yang--- dir/file
kedua+++ dir/file.new
dengan cap waktu, diff tampaknya tepat, apakah ada opsi bagaimana melaporkan nama file yang tepat perintah mencari?