Apakah ada cara untuk mendapatkan tambalan yang dibuat dengan git format-patch agar kompatibel dengan svn sehingga saya dapat mengirimkannya ke repo svn?
Saya sedang mengerjakan repo svn di github dan ingin mengirimkan perubahan saya kembali ke repo utama. Saya perlu membuat tambalan untuk melakukan ini, namun tambalan tidak dapat diterapkan karena git memformat tambalan yang berbeda dari svn. Apakah ada rahasia yang belum saya temukan?
PEMBARUAN: Meskipun saat ini tidak ada skrip atau cara git asli untuk melakukan ini, saya berhasil menemukan posting dari awal tahun ini tentang cara melakukannya secara manual. Saya telah mengikuti instruksi dan berhasil mendapatkan tambalan git saya untuk bekerja dengan svn.
Jika seseorang dapat mencoba menulis skrip untuk mencapai ini dan berkontribusi pada proyek git, saya semua akan sangat dihargai.
http://kerneltrap.org/mailarchive/git/2008/1/15/570308/thread#mid-570308
sumber
Jawaban:
Saya selalu harus Google ini, tetapi cara saya menemukan yang berfungsi dengan sempurna (untuk saya) adalah:
git diff --no-prefix master..branch > somefile.diff
, bagian master dan cabang bersifat opsional, tergantung bagaimana Anda ingin mendapatkan diff.patch -p0 < somefile.diff
.Tampaknya selalu berfungsi dengan baik bagi saya dan tampaknya metode paling sederhana yang pernah saya temui.
sumber
--no-pager
tidak lagi menjadi pilihan untukgit diff
.--no-pager
, saya tidak yakin mengapa itu ditambahkan di edit. Itu selalu bekerja dengan baik untuk saya tanpanya--no-pager
.git diff --no-prefix 056a1ba5140 7d939289b80 >my.patch
berhasil untuk saya (di mana056a1ba5140
dan7d939289b80
apakah sha-1 dari komit sebelumnya dan khusus di git).Jawaban singkatnya adalah
patch -p1 -i {patch.file}
.Silakan merujuk ke blog ini untuk detailnya: Membuat patch Subversion dengan git .
sumber
Berikut adalah skrip pembantu untuk membuat diff terhadap svn changeset terbaru dan komit yang diberikan: http://www.mail-archive.com/[email protected]/msg00864.html
sumber
git svn info
sebagai gantinya:REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'`
SVN mungkin tidak dapat memahami keluaran dari
git diff -p
, tetapi Anda dapat menggunakan kekerasan:diff -r
dua klon.sumber
git diff --no-prefix > somefile.diff
di repo git Anda dan kirimkan ke pengguna svn mana pun agar mereka dapat menerapkan tambalanpatch -p0 < somefile.diff
di root proyek.Subversion <1.6 tidak memiliki dukungan patch. Sepertinya Subversion 1.7 akan mengizinkan penerapan tambalan dan ekstensi git / hg untuk unified diff ada di daftar TODO kami.
sumber
Ini memang permintaan fitur awal 2008
Linus Torvalds berkata pada saat itu:
Mungkin itu sebabnya
telah diperkenalkan di Git1.5.6 pada Mei / Juli 2008 (meskipun saya belum mengujinya)
sumber
Pastikan perubahan Anda dilakukan dan didasarkan pada cabang git lokal Anda, dari git bash run:
git show --pretty >> myChangesFile.patch
sumber
Jawaban yang diterima yang diberikan oleh Nicholas berfungsi dengan baik, kecuali jika a) file biner ada di diff atau b) Anda bekerja di windows Git dan memiliki direktori dengan spasi. Untuk menyelesaikannya, saya harus menambahkan perintah git diff bersarang untuk mengabaikan binari dan perintah sed untuk keluar dari spasi. Agak rumit untuk menulis, jadi saya membuat alias:
Jika Anda kemudian mengetik:
... file patch Feature123.patch akan dibuat dengan perbedaan antara basis gabungan master cabang dan cabang Feature123.
sumber