Bagaimana cara menerapkan tambalan berbeda pada Windows?

137

Ada banyak program di luar sana yang dapat membuat tambalan berbeda, tetapi saya memiliki waktu yang sangat lama untuk mencoba menerapkannya. Saya mencoba mendistribusikan tambalan, dan saya mendapat pertanyaan dari pengguna tentang bagaimana menerapkannya. Jadi saya mencoba mencari tahu sendiri dan menemukan bahwa saya tidak tahu, dan sebagian besar alat yang dapat saya temukan adalah baris perintah. (Saya dapat menangani baris perintah, tetapi banyak orang akan tersesat tanpa GUI yang bagus dan ramah. Jadi itu tidak baik untuk tujuan ini.)

Saya mencoba menggunakan TortoiseSVN. Saya memiliki tambalan yang ingin saya terapkan. Saya mengklik kanan pada tambalan, dan ada opsi di bawah submenu TortoiseSVN yang mengatakan "Terapkan tambalan." Yang dilakukannya hanyalah menarik jendela kosong.

Jadi saya mencoba menekan Buka. Ini memiliki dua opsi: gabungkan dan terapkan diff terpadu. (Untungnya, tambalan dalam format diff terpadu.) Tetapi opsi terapkan tidak berfungsi: Opsi ini meminta tambalan dan folder. Entah bagaimana itu lupa meminta file untuk menerapkan tambalan! Jadi TortoiseSVN tidak bekerja. Apakah ada utilitas berbasis GUI Windows yang akan mengambil patch dan file dan menerapkannya dengan benar?

EDIT: Melihat balasan sejauh ini, tampaknya Tortoise hanya akan melakukannya dengan benar jika itu adalah file yang sudah berversi. Bukan itu masalahnya di sini. Saya harus bisa menerapkan tambalan ke file yang tidak keluar dari repositori SVN. Saya baru saja mencoba menggunakan Tortoise, karena saya kebetulan tahu bahwa SVN menggunakan diff dan harus tahu bagaimana keduanya membuat dan menerapkannya.

Mason Wheeler
sumber
Jawaban WinMerge terdengar bagus tetapi hanya menjelaskan cara membuat tambalan, bukan cara menerapkannya. TortoiseHG memiliki cara yang bagus untuk menerapkan tambalan, tetapi hanya untuk file yang ada dalam repo hg, sejauh yang saya tahu. Jika SVN TortoiseDiff eksternal tidak bisa melakukannya, saya ingin tahu apakah ada alat GUI yang bisa melakukannya.
Warren P
3
Wow, Anda benar jawaban singkatnya masih tidak - setidaknya di WinMerge. Permintaan fitur pada WinMerge di sini sourceforge.net/tracker/…
KCD

Jawaban:

31

Terapkan Patch

Dengan TortoiseMerge:

  1. Temukan dan buka direktori repo SVN yang ada
  2. Buat direktori baru bernama "merges", jika belum ada
  3. Salin file ke mana Anda ingin menerapkan file .patch
  4. TAMBAH dan KOMIT ke repositori svn sebelum Anda melanjutkan ke langkah berikutnya
  5. Klik kanan pada penggabungan dan pilih Terapkan tambalan ...
  6. Klik dua kali file dari daftar
  7. File yang ditambal dengan diff ditampilkan di panel kanan
  8. Klik pada panel itu dan tekan Simpan atau ekspor dengan File-> Save As ...

Layar alternatif jika Anda Buka dari TortoiseMerge. Pada layar di bawah ini, direktori mengacu pada direktori "penggabungan" yang disebutkan pada langkah 2 di atas: Screeny

Tangkapan layar dari GUI WinMerge: Screeny

Sheriff Md
sumber
@WarrenP: ya itu menjelaskan bagaimana menerapkan tambalan menggunakan TortoiseMerge
Walter Stabosz
4
Komentar saya masuk akal sebelum mengedit, dan tidak lagi masuk akal setelah mengedit. Apakah kamu sudah bingung Stempel waktu edit di atas (24 Maret '11) sepertinya salah, karena OP telah mengedit jawabannya lagi sejak Oktober 2011. Menurut saya, stempel waktu di komentar saya juga salah.
Warren P
10
@SheriffMd Tidakkah Anda menerima pesan kesalahan "D: \ Folder bukan copy pekerjaan"?
onmyway133
1
@SheriffMd Saya juga mendapatkan pesan "folder ... bukan copy pekerjaan" - jadi, bagaimana mungkin menggunakan tortoise merge untuk menerapkan patch ke file non-berversi?
Peter T.
1
@ onmyway133, saya telah mengubah langkah-langkahnya. Lihat Langkah 2 dan Langkah 4. Anda tidak akan menerima pesan kesalahan "bukan copy pekerjaan".
Sheriff Md
20

Saya membuat alat Python murni hanya untuk itu. Ini memiliki perilaku lintas platform yang dapat diprediksi. Meskipun tidak membuat file baru (pada saat penulisan ini) dan tidak memiliki GUI, ini dapat digunakan sebagai pustaka untuk membuat alat grafik.

PEMBARUAN : Seharusnya lebih nyaman menggunakannya jika Anda menginstal Python.

pip install patch
python -m patch
anatoly techtonik
sumber
1
Saya sering menggunakan ini. Terima kasih @techtonik. Adakah berita untuk membuatnya bekerja dengan Python3?
pelson
Jalankan pip install patch dengan hak adminstrasi untuk memastikannya berfungsi.
Vertexwahn
@Vertexwahn apakah itu di Linux?
anatoly techtonik
Python berjalan di mana-mana - Saya mengujinya dengan Windows 10
Vertexwahn
Bekerja pada Windows 10 ketika git patch tidak berfungsi. Terima kasih!
sqrl0
18

TortoiseMerge adalah utilitas terpisah yang dibundel dengan TortoiseSVN.

Itu juga bisa diunduh secara terpisah di arsip TortoiseDiff.zip . Ini akan memungkinkan Anda untuk menerapkan diff terpadu ke file non-berversi.

Paul Shannon
sumber
21
AFAIK ini tidak dapat menerapkan tambalan pada file non-berversi.
pihentagy
Saya tidak mengalami masalah saat menerapkannya ke file non-berversi.
Paul Shannon
yang lain ingin: S.
UmNyobe
1
Versi 1.8.7 memberikan kesalahan tentang dest yang tidak diversi.
Nick Westgate
15

Saya tahu Anda mengatakan Anda lebih suka GUI, tetapi alat baris perintah akan bekerja dengan baik. Lihat GnuWin untuk port alat unix ke Windows. Anda akan membutuhkan perintah patch, jelas ;-)

Anda mungkin mengalami masalah dengan penghentian jalur. Port GnuWin akan menganggap bahwa patchfile memiliki terminasi baris gaya DOS (CR / LF). Cobalah untuk membuka patchfile di editor yang cukup pintar dan itu akan mengubahnya untuk Anda.

Sardaukar
sumber
Tempat yang bagus. Tidak akan bisa memecahkan masalah penghentian baris tanpa komentar ini.
Bryan
Cara lain untuk menangani akhiran baris adalah dengan menambahkan opsi "--binary" ke baris perintah.
BeReal82
4
Inilah yang membuat saya berada di jalur yang benar. Namun, menjalankan Windows 7 atau yang lebih baru Anda perlu memperbarui manifes patch.exe untuk menghindari munculnya UAC pop-up setiap saat. Lihat halaman ini untuk mengetahui caranya: math.nist.gov/oommf/software-patchsets/patch_on_Windows7.html
Anttu
1
Bahkan dengan perbaikan UAC, versi GnuWin dari patch mengacaukan pengaturan keamanan file. Build yang dikirimkan dengan git tidak mengalami masalah apa pun.
Artfunkel
9

Utilitas patch.exe dari penginstalan Git berfungsi di Windows 10.

Instal Git untuk Windows lalu gunakan "C:\Program Files\Git\usr\bin\patch.exe"perintah untuk menerapkan tambalan.

Jika ada pesan kesalahan seperti a Hunk #1 FAILED at 1 (different line endings).telah didapat pada output selama menerapkan tambalan, coba tambahkan -l(yang merupakan pintasan untuk --ignore-whitespace) atau --binarysakelar ke baris perintah.

Evgeniy Generalov
sumber
Pertanyaan ini sebagian besar tentang alat GUI untuk pengguna biasa yang tidak terbiasa dengan alat baris perintah biasa. Jawaban Anda akan lebih berguna jika Anda setidaknya memberikan beberapa contoh perintah lengkap sebagai contoh.
Álvaro González
Bekerja dengan komposer di Windows 10.
ecdani
7

Dalam TortoiseSVN, penerapan patch berhasil. Anda perlu menerapkan tambalan ke direktori yang sama saat tambalan itu dibuat . Hal ini selalu penting untuk diingat. Jadi, inilah cara Anda melakukannya di TortoiseSVN:

Klik kanan pada folder tempat Anda ingin menerapkan tambalan. Ini akan menampilkan dialog yang menanyakan lokasi file patch. Pilih file dan ini akan membuka jendela daftar file kecil yang mencantumkan file yang diubah, dan mengklik setiap item akan membuka jendela diff yang menunjukkan apa yang akan dilakukan patch terhadap file itu.

Semoga berhasil.

Dan
sumber
9
Itu tidak membantu. File tujuan tidak keluar dari arsip SVN. (Lihat edit pada posting asli.)
Mason Wheeler
7

Anda dapat menggunakan port asli Win32 ini dari utilitas tambalan.

Itu datang bersama dengan pilihan yang lebih besar dari utilitas lain dan berbeda dengan Cygwin dan sejenisnya tidak memerlukan DLL atau serupa. Pilih saja pilihan kecil Anda yang dapat dieksekusi dan simpan di mana pun Anda inginkan.

Penggunaan sederhana:

patch.exe -i <patchfile>

Dapatkan lebih banyak bantuan:

patch.exe --help
logisch
sumber
4
Saya mengalami masalah dengan ini di Windows 7: ini membuka jendela CMD baru dan meminta hak akses administratif ketika saya mencoba menjalankan patch.exe.
Roy Tinker
3
Patch yang dapat dieksekusi juga dapat ditemukan di bundel Git untuk Windows.
Snicksie
6
Jika Anda mengalami masalah saat menjalankan patch.exe, Anda dapat mengganti namanya menjadi apa pun yang tidak termasuk patch. Windows menganggap semua mantan dengan kata patchsebagai tersangka.
wbond
2

EDIT: Melihat balasan sejauh ini, tampaknya Tortoise hanya akan melakukannya dengan benar jika itu adalah file yang sudah berversi. Bukan itu masalahnya di sini. Saya harus bisa menerapkan tambalan ke file yang tidak keluar dari repositori SVN. Saya hanya mencoba menggunakan Tortoise karena saya kebetulan tahu bahwa SVN menggunakan diff dan harus tahu bagaimana membuat dan menerapkannya.

Anda dapat menginstal Cygwin , kemudian menggunakan alat patch baris perintah untuk menerapkan patch. Lihat juga halaman manual Unix ini , yang berlaku untuk patch .

Brian Clapper
sumber
4
Ya, saya bisa. Sebenarnya aku punya Cygwin. Saya mungkin bisa membuat solusi Anda berhasil juga. Saya tidak akan membuat pengguna saya mengalami hal itu. Anda tahu berapa banyak pengguna Windows hari ini yang bahkan tidak tahu apa itu baris perintah? : P
Mason Wheeler
2

Tampaknya TortoiseSVN (TortoiseMerge) membutuhkan barisIndex: foobar.py dalam file diff / patch. Inilah yang perlu saya lakukan untuk membuat file patch non-TortoiseSVN bekerja dengan perintah klik kanan Apply Patch TortoiseSVN .

Sebelum:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

Setelah:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

Atau jika Anda tahu revisi spesifik kontributor Anda bekerja:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)
matt wilkie
sumber
2

Saya menggunakan MSYS2 dari http://www.msys2.org/

Ini menyediakan banyak utilitas seperti patch, which, git, tree, dan banyak lagi.

Setelah menginstal MSYS2, jalankan pengelola paket untuk menginstal patch:

pacman -S patch
isapir
sumber
Ini hanyalah cara yang berbelit-belit untuk memasang alat baris perintah. Saya curiga Anda hanya membaca judul pertanyaan dan bukan pertanyaan itu sendiri. :)
Álvaro González
1

Patch memberi tahu file apa yang akan diterapkan. Headernya harus seperti ini (lihat di Notepad atau editor teks favorit Anda):

--- Folder/old_file
+++ Folder/new_file

Dalam kasus patch Subversion, Anda juga akan memiliki nomor revisi (karena nama file sama).

Patch GNU akan membiarkan Anda mengganti nama-nama itu, tetapi saya tidak tahu alat GUI untuk melakukan hal yang sama. Saya akan memeriksa dengan berbagai program diff - meskipun, tampaknya WinMerge tidak mendukung penerapan tambalan.

Tandai Brackett
sumber
Tidak, tidak ada yang seperti itu di bagian atas tambalan saya. Apakah Anda mengatakan bahwa nama file dan jalur harus disertakan dalam perbedaan itu sendiri? Siapa yang memikirkannya? Apa yang harus Anda lakukan jika Anda ingin mendistribusikan diff kepada seseorang yang mungkin telah menginstal sesuatu di folder lain?!?
Mason Wheeler
Bagian atas tambalan dimulai seperti ini: --- / +++ / @@ -6,12 +6,12 @@ Tanpa nama file atau apapun. Bagaimana cara kerja jalur bawaan? Bagaimana jika saya membuat tambalan di XP dan seseorang mencoba menggunakannya di Vista (atau sebaliknya) dan jalur ke folder Dokumen berbeda?
Mason Wheeler
1
Nama file relatif terhadap direktori root repositori, jadi perbedaan struktur folder XP / Vista tidak menjadi masalah. Dan alasan untuk memiliki nama file di tambalan adalah karena sebagian besar tambalan memengaruhi banyak file.
David Z
Saya melihat. Oke, itu lebih masuk akal. Terima kasih sudah membereskannya, David!
Mason Wheeler
1

Eclipse harus bisa melakukannya, buka perspektif TeamSynchronize dan kemudian ke Project-> Apply patch

Jose Ospina
sumber
1

Untuk proyek Java, saya telah menggunakan NetBeans untuk menerapkan file patch. Jika kode Java yang Anda tambal belum menjadi proyek NetBeans, buatlah proyek untuk itu. Untuk membuat proyek baru:

  • Pilih menu File -> New Project
  • Dalam dialog yang dihasilkan, jadikan sebagai proyek Aplikasi Java . Beri nama di dialog, dan klik Finish.
  • Klik kanan nama proyek Anda, dan pilih Properties dari menu konteks
  • Dalam dialog yang dihasilkan, pilih Sumber , dan tambahkan Folder Sumber . Jelajahi sumber Java Anda.

Sekarang Anda memiliki sebuah proyek, terapkan tambalan:

  • Sorot proyek Anda untuk memilihnya
  • Dari menu utama, pilih menu Tools -> Apply Diff Patch
  • Pada dialog yang dihasilkan, telusuri file patch Anda, pilih, dan tekan tombol Patch.

Itu dia. Tambalan Anda harus diterapkan, dan Anda akan melihat jendela diff yang menunjukkan perubahan.

pengguna1984699
sumber
1

Saya sudah menggunakan BeyondCompare (komersial) untuk perbedaan dan penggabungan, dan alat ini juga memiliki kemampuan untuk membuat, melihat, dan menerapkan tambalan.

Empat puluh dua
sumber
1

Jika Anda menggunakan Mercurial , ini dilakukan melalui "impor". Jadi di baris hg importperintah, perintah, atau (Anda mungkin menemukan file--no-commit opsi yang berguna), atau "Repositori" => "Impor ..." di Hg Workbench.

Perhatikan bahwa ini akan melakukan perubahan secara default; Anda dapat menghindari ini menggunakan hg import --no-commitopsi jika menggunakan baris perintah, atau jika Anda menggunakan Hg Workbench, Anda mungkin merasa berguna untuk mengeluarkannya hg rollbacksetelah penggabungan.

Marc Gravell
sumber
Persis apa yang saya cari! Saya bertanya-tanya bagaimana cara menghindari komit.
Keshav
0

Saat menerapkan tambalan menggunakan TortoiseSVN, saya biasanya menyimpan jalur di root dari repositori yang diperiksa. Anda kemudian bisa mengklik kanan pada patch, pergi ke menu TortoiseSVN, dan klik ApplyPatch. ApplyPatch harus secara otomatis mencari tahu level mana dalam hierarki direktori tempat patch dibuat.

Namun, saya memiliki masalah di masa lalu dengan menerapkan patch yang berisi file baru, atau yang melibatkan penggantian nama ke file. Algoritma apa pun yang digunakan Tortoise untuk ini tampaknya tidak menangani skenario itu dengan baik. Unicode dapat memberi Anda masalah serupa.

tsellon
sumber
0

Apakah Anda memiliki dua monitor? Saya mengalami masalah yang sama dengan TortoiseMerge dan saya menyadari bahwa ketika saya menonaktifkan salah satu monitor, jendela kecil dengan daftar file muncul. Semoga ini bisa membantu Anda.

Bruno
sumber
0

Jika Anda mendapatkan pesan kesalahan "Bukan copy pekerjaan" maka coba pilih direktori dari kotak dialog TortoiseMerge yang merupakan direktori kerja SVN.

Vinod Dalvi
sumber
0

Sebuah BusyBox port untuk Windows memiliki kedua diff dan patch perintah, tetapi mereka hanya mendukung format bersatu.

meong
sumber
0

Gunakan saja:

patch -p0 < path-file.patch

ingat jalankan perintah ini hanya dari lokasi folder tempat Anda membuat tambalan.

Ashish Lohia
sumber