Saya membaca manual Git, FAQ, kursus kilat Git - SVN, dll. Dan mereka semua menjelaskan ini dan itu, tetapi di mana pun Anda tidak dapat menemukan instruksi sederhana seperti:
Repositori SVN di: svn://myserver/path/to/svn/repos
Dapatkan repositori di: git://myserver/path/to/git/repos
git-do-the-magic-svn-import-with-history \
svn://myserver/path/to/svn/repos \
git://myserver/path/to/git/repos
Saya tidak berharap itu sesederhana itu, dan saya tidak berharap itu menjadi satu perintah. Tapi saya berharap itu tidak mencoba menjelaskan apa pun - hanya untuk mengatakan langkah apa yang harus diambil dengan memberikan contoh ini.
svn
git
version-control
git-svn
Milan Babuškov
sumber
sumber
Jawaban:
Sihir:
Git dan SVN beroperasi sangat berbeda. Anda perlu mempelajari Git, dan jika Anda ingin melacak perubahan dari SVN hulu, Anda harus belajar
git-svn
. Thegit-svn
halaman utama memiliki bagian contoh yang baik :sumber
Buat file pengguna (yaitu
users.txt
) untuk memetakan pengguna SVN ke Git:Anda bisa menggunakan one-liner ini untuk membangun templat dari repositori SVN yang ada:
SVN akan berhenti jika menemukan pengguna SVN yang hilang tidak ada dalam file. Tetapi setelah itu Anda dapat memperbarui file dan mengambil di mana Anda tinggalkan.
Sekarang tarik data SVN dari repositori:
Perintah ini akan membuat repositori Git baru
dest_dir-tmp
dan mulai menarik repositori SVN. Perhatikan bahwa flag "--stdlayout" menyiratkan Anda memiliki tata letak "trunk /, branch /, tag /" SVN yang umum. Jika tata letak Anda berbeda, kenallah--tags
,--branches
,--trunk
pilihan (pada umumnyagit svn help
).Semua protokol umum diperbolehkan:
svn://
,http://
,https://
. URL harus menargetkan repositori dasar, sesuatu seperti http://svn.mycompany.com/myrepo/repository . String URL tidak boleh menyertakan/trunk
,/tag
atau/branches
.Perhatikan bahwa setelah menjalankan perintah ini sangat sering terlihat seperti operasi "hang / freezed", dan itu cukup normal bahwa itu dapat macet untuk waktu yang lama setelah menginisialisasi repositori baru. Akhirnya Anda akan melihat pesan log yang menunjukkan bahwa itu sedang dimigrasi.
Juga perhatikan bahwa jika Anda menghilangkan
--no-metadata
flag, Git akan menambahkan informasi tentang revisi SVN yang sesuai dengan pesan commit (yaitugit-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID>
)Jika nama pengguna tidak ditemukan, perbarui
users.txt
file Anda kemudian:Anda mungkin harus mengulangi perintah terakhir itu beberapa kali, jika Anda memiliki proyek besar, sampai semua Subversion berkomitmen diambil:
Setelah selesai, Git akan checkout SVN
trunk
ke cabang baru. Cabang-cabang lain diatur sebagai remote. Anda dapat melihat cabang SVN lainnya dengan:Jika Anda ingin menyimpan cabang jarak jauh lainnya di repositori Anda, Anda ingin membuat cabang lokal untuk masing-masing secara manual. (Lewati trunk / master.) Jika Anda tidak melakukan ini, cabang tidak akan dikloning pada langkah terakhir.
Tag diimpor sebagai cabang. Anda harus membuat cabang lokal, membuat tag dan menghapus cabang untuk menjadikannya sebagai tag di Git. Untuk melakukannya dengan tag "v1":
Kloning repositori GIT-SVN Anda ke repositori Git yang bersih:
Cabang lokal yang Anda buat sebelumnya dari cabang jarak jauh hanya akan disalin sebagai cabang jarak jauh ke repositori hasil kloning baru. (Lewati trunk / master.) Untuk setiap cabang yang ingin Anda pertahankan:
Terakhir, hapus remote dari repositori Git bersih Anda yang menunjuk ke repositori sementara yang sekarang dihapus:
sumber
Migrasikan Repositori Subversi Anda ke Repositori Git . Pertama, Anda harus membuat file yang memetakan nama penulis komit Subversi Anda ke komit Git, katakan
~/authors.txt
:Kemudian Anda dapat mengunduh data Subversion ke dalam repositori Git:
Jika Anda menggunakan Mac, Anda bisa dapatkan
git-svn
dari MacPorts dengan menginstalgit-core +svn
.Jika repositori subversi Anda berada di mesin yang sama dengan repositori git yang Anda inginkan, maka Anda dapat menggunakan sintaks ini untuk langkah init, jika tidak semuanya sama:
sumber
=
dalamusers.txt
karena impor dibatalkan dan saya mendapatkan repositori kosong.file:///
menolak untuk bekerja, hanya saya yang digunakansvnserve.exe --daemon
dan kemudian digunakansvn://localhost/home/user/repo
.authors.txt
keutf-8 without BOM
.git svn init
,git svn config
kemudian akhirnyagit svn fetch
karena lebih mudah untuk melakukannya dengan cara ini, saya harus mengambil beberapa kali untuk memperbaikinya. Single-line cmcgintygit svn clone
, yang bertiga, terlalu kacau untuk saya.Saya menggunakan skrip svn2git dan bekerja seperti mantra.
sumber
Saya menyarankan untuk merasa nyaman dengan Git sebelum mencoba menggunakan git-svn terus-menerus, yaitu menjaga SVN sebagai repo terpusat dan menggunakan Git secara lokal.
Namun, untuk migrasi sederhana dengan semua riwayat, berikut adalah beberapa langkah sederhana:
Inisialisasi repo lokal:
Tandai seberapa jauh Anda ingin mulai mengimpor revisi:
(atau hanya "git svn fetch" untuk semua revs)
Sebenarnya mengambil semuanya sejak itu:
Anda dapat memeriksa hasil impor dengan Gitk. Saya tidak yakin apakah ini berfungsi pada Windows, ini berfungsi pada OSX dan Linux:
Ketika Anda mendapatkan repo SVN Anda dikloning secara lokal, Anda mungkin ingin mendorongnya ke repo Git terpusat untuk kolaborasi yang lebih mudah.
Pertama buat repo jarak jauh kosong Anda (mungkin di GitHub ?):
Kemudian, secara opsional sinkronkan cabang utama Anda sehingga operasi tarikan akan secara otomatis menggabungkan master jarak jauh dengan master lokal Anda, ketika keduanya berisi hal-hal baru:
Setelah itu, Anda mungkin tertarik untuk mencoba sendiri
git_remote_branch
alat , yang membantu menangani cabang-cabang jarak jauh:Posting penjelasan pertama: " Git cabang jarak jauh "
Tindak lanjuti untuk versi terbaru: " Saatnya git berkolaborasi dengan git_remote_branch "
sumber
git push origin master
Ada solusi baru untuk kelancaran migrasi dari Subversion ke Git (atau untuk menggunakan keduanya secara bersamaan): SubGit .
Saya sedang mengerjakan proyek ini sendiri. Kami menggunakan SubGit dalam repositori kami - beberapa rekan satu tim saya menggunakan Git dan beberapa Subversi dan sejauh ini berfungsi sangat baik.
Untuk bermigrasi dari Subversion ke Git dengan SubGit, Anda perlu menjalankan:
Setelah itu Anda akan mendapatkan repositori Git di svn_repos / .git dan dapat mengkloningnya, atau teruskan menggunakan Subversion dan repositori Git baru ini bersama-sama: SubGit akan memastikan bahwa keduanya selalu tetap sinkron.
Jika repositori Subversion Anda berisi beberapa proyek, maka beberapa repositori Git akan dibuat di direktori svn_repos / git. Untuk menyesuaikan terjemahan sebelum menjalankannya lakukan hal berikut:
Dengan SubGit Anda dapat bermigrasi ke Git murni (bukan git-svn) dan mulai menggunakannya sambil tetap menyimpan Subversi selama Anda membutuhkannya (misalnya, untuk alat bangunan yang sudah dikonfigurasi,).
Semoga ini membantu!
sumber
subgit import
perintah) bahkan tampaknya tidak memerlukan lisensi. Terjemahan akuratsvn:ignore
properti ke.gitignore
file juga disertakan.git svn
.Lihat halaman resmi git-svn . Secara khusus, lihat di bawah "Contoh Dasar":
sumber
Pro Git 8.2 menjelaskannya: http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git
sumber
SubGit (vs Blue Screen of Death)
Itu semua.
+ Untuk memperbarui dari SVN, repositori Git dibuat oleh perintah pertama.
Saya menggunakan cara untuk bermigrasi ke Git secara instan untuk repositori besar.
Tentu saja Anda perlu persiapan.
Tetapi Anda mungkin tidak menghentikan proses pengembangan sama sekali.
Ini jalan saya.
Solusi saya terlihat seperti:
Migrasi membutuhkan banyak waktu untuk repositori SVN besar.
Tetapi memperbarui migrasi selesai hanya beberapa detik.
Tentu saja saya menggunakan SubGit , mama. git-svn membuat saya Blue Screen of Death . Terus-menerus. Dan git-svn membuat saya bosan dengan kesalahan fatal " nama file terlalu lama " Git .
LANGKAH
1. Unduh SubGit
2. Mempersiapkan migrasi dan memperbarui perintah.
Katakanlah kita melakukannya untuk Windows (itu mudah untuk port ke Linux).
Dalam direktori nampan instalasi SubGit (subgit-2.XX \ bin), buat dua file .bat.
Konten file / perintah untuk migrasi:
Perintah "mulai" adalah opsional di sini (Windows). Ini akan memungkinkan untuk melihat kesalahan saat memulai dan membiarkan shell dibuka setelah SubGit selesai.
Anda dapat menambahkan parameter tambahan di sini mirip dengan git-svn . Saya hanya menggunakan --default-domain myCompanyDomain.com untuk memperbaiki domain dari alamat email penulis SVN.
Saya memiliki struktur repositori SVN standar (trunk / branch / tag) dan kami tidak memiliki masalah dengan "pemetaan penulis". Jadi saya tidak melakukan apa-apa lagi.
(Jika Anda ingin memigrasi tag seperti cabang atau SVN Anda memiliki beberapa folder cabang / tag, Anda dapat mempertimbangkan untuk menggunakan pendekatan SubGit yang lebih verbose )
Tips 1 : Gunakan --minimal-revisi YourSvnRevNumber untuk melihat dengan cepat bagaimana hal-hal mendidih (semacam debugging). Yang sangat berguna adalah untuk melihat nama atau email penulis yang diselesaikan.
Atau untuk membatasi kedalaman riwayat migrasi.
Tip 2 : Migrasi dapat terganggu ( Ctrl+ C) dan dikembalikan dengan menjalankan perintah / file pembaruan berikutnya.
Saya tidak menyarankan melakukan ini untuk repositori besar. Saya telah menerima "Kehabisan memori Java + Windows exception".
Tip 3 : Lebih baik membuat salinan dari repositori telanjang hasil Anda.
Konten file / perintah untuk memperbarui:
Anda dapat menjalankannya berapapun kali ketika Anda ingin mendapatkan komitmen tim terakhir ke repositori Git Anda.
Peringatan! Jangan menyentuh gudang kosong Anda (misalnya membuat cabang).
Anda akan mengambil kesalahan fatal berikutnya:
3. Jalankan perintah / file pertama. Ini akan membutuhkan waktu lama untuk repositori besar. 30 jam untuk repositori saya yang sederhana.
Itu semua.
Anda dapat memperbarui repositori Git Anda dari SVN kapan saja berapapun dengan menjalankan file / perintah kedua. Dan sebelum beralih dari tim pengembangan Anda ke Git.
Ini akan memakan waktu hanya beberapa detik.
Ada satu tugas lagi yang bermanfaat.
Dorong repositori Git lokal Anda ke repositori Git jarak jauh
Apakah ini kasus Anda? Mari kita lanjutkan.
Lari:
Secara default, Git Anda tidak dapat mengirim potongan besar. fatal: Ujung yang jauh menutup secara tak terduga
Mari kita jalankan untuk itu:
524288000 - 500 MB 1073741824 - 1 GB, dll.
Perbaiki masalah sertifikat lokal Anda . Jika git-server Anda menggunakan sertifikat yang rusak.
Saya telah menonaktifkan sertifikat .
Juga server Git Anda mungkin memiliki batasan jumlah permintaan yang perlu diperbaiki .
Jalankan dengan Git lokal:
( git push origin '*: *' untuk versi Git lama)
Jika Anda mendapatkan yang berikut: kesalahan: tidak dapat menelurkan git: Tidak ada file atau direktori seperti itu ... Bagi saya rekreasi penuh dari repositori saya menyelesaikan kesalahan ini (30 jam). Anda dapat mencoba perintah selanjutnya
Atau coba instal ulang Git ( tidak berguna bagi saya ). Atau Anda dapat membuat cabang dari semua tag Anda dan mendorongnya. Atau, atau, atau ...
sumber
reposurgeon
Untuk kasus-kasus rumit, reposurgeon oleh Eric S. Raymond adalah alat pilihan. Selain SVN, ia mendukung banyak sistem kontrol versi lain melalui
fast-export
format, dan juga CVS . Penulis melaporkan konversi repositori kuno yang berhasil seperti Emacs dan FreeBSD .Alat ini tampaknya bertujuan konversi yang hampir sempurna (seperti mengkonversi
svn:ignore
properti SVN ke.gitignore
file) bahkan untuk tata letak repositori yang sulit dengan sejarah panjang. Untuk banyak kasus, alat lain mungkin lebih mudah digunakan.Sebelum mempelajari dokumentasi
reposurgeon
baris perintah, pastikan untuk membaca panduan migrasi DVCS yang luar biasa yang membahas proses konversi langkah demi langkah.sumber
Panduan ini di situs web atlassian adalah salah satu yang terbaik yang saya temukan:
https://www.atlassian.com/git/migration
Alat ini - https://bitbucket.org/atlassian/svn-migration-scripts - juga sangat berguna untuk menghasilkan pengarang Anda.txt di antara hal-hal lain.
sumber
Anda harus Instal
Disalin dari tautan ini http://john.albin.net/git/convert-subversion-to-git .
1. Ambil daftar semua pengalih Subversion
Subversi cukup mencantumkan nama pengguna untuk setiap komit. Komit Git memiliki banyak data yang lebih kaya, tetapi yang paling sederhana, pembuat komit perlu memiliki nama dan email yang terdaftar. Secara default alat git-svn hanya akan mencantumkan nama pengguna SVN di bidang penulis dan surel. Tetapi dengan sedikit kerja, Anda dapat membuat daftar semua pengguna SVN dan apa nama dan email Git yang sesuai. Daftar ini dapat digunakan oleh git-svn untuk mengubah nama pengguna svn polos menjadi commiter Git yang tepat.
Dari akar checkout Subversion lokal Anda, jalankan perintah ini:
Itu akan mengambil semua pesan log, mencabut nama pengguna, menghilangkan setiap nama pengguna duplikat, mengurutkan nama pengguna dan menempatkannya ke dalam file "penulis-transform.txt". Sekarang edit setiap baris dalam file. Misalnya, konversi:
dalam hal ini:
2. Kloning repositori Subversion menggunakan git-svn
Ini akan melakukan transformasi git-svn standar (menggunakan file author-transform.txt yang Anda buat pada langkah 1) dan menempatkan repositori git di folder “~ / temp” di dalam direktori home Anda.
3. Konversi svn: abaikan properti menjadi .gitignore
Jika repo svn Anda menggunakan svn: abaikan properti, Anda dapat dengan mudah mengonversi ini ke file .gitignore menggunakan:
4. Dorong repositori ke repositori kosong
Pertama, buat repositori kosong dan buat pencocokan cabang default dengan nama cabang "trunk" svn.
Kemudian dorong repositori temp ke repositori kosong yang baru.
Anda sekarang dapat menghapus repositori ~ / temp dengan aman.
5. Ganti nama cabang "trunk" menjadi "master"
Cabang pengembangan utama Anda akan diberi nama "trunk" yang cocok dengan nama di Subversion. Anda akan ingin menamainya menjadi cabang "master" standar Git menggunakan:
6. Bersihkan cabang dan tag
git-svn membuat semua tag Subversi menjadi cabang yang sangat pendek di Git dari bentuk "tag / nama". Anda ingin mengonversi semua cabang tersebut menjadi tag Git aktual menggunakan:
Langkah ini akan membutuhkan sedikit pengetikan. :-) Tapi, jangan khawatir; shell unix Anda akan memberikan prompt sekunder untuk perintah ekstra panjang yang dimulai dengan git untuk-masing-masing ref.
sumber
GitHub sekarang memiliki fitur untuk mengimpor dari repositori SVN . Saya tidak pernah mencobanya.
sumber
svn2git
program yang disarankan dalam jawaban lain .Jawaban yang agak panjang hanya menggunakan git, SVN, dan bash. Ini termasuk langkah-langkah untuk repositori SVN yang tidak menggunakan tata letak konvensional dengan tata letak direktori trunk / cabang / tag (SVN sama sekali tidak melakukan apa pun untuk menegakkan tata letak semacam ini).
Pertama-tama gunakan skrip bash ini untuk memindai repo SVN Anda untuk orang-orang berbeda yang berkontribusi dan membuat templat untuk file pemetaan:
Gunakan ini untuk membuat
authors
file di mana Anda memetakan nama pengguna ke nama pengguna dan email yang ditetapkan oleh pengembang Anda menggunakangit config
propertiuser.name
danuser.email
(perhatikan bahwa untuk layanan seperti GitHub hanya memiliki email yang cocok sudah cukup).Kemudian
git svn
klon repositori svn ke repositori git, ceritakan tentang pemetaan:git svn clone --authors-file=authors --stdlayout svn://example.org/Folder/projectroot
Ini bisa memakan waktu sangat lama, karena git svn akan memeriksa setiap revisi untuk setiap tag atau cabang yang ada. (perhatikan bahwa tag di SVN benar-benar cabang, sehingga berakhir seperti itu di Git). Anda dapat mempercepat ini dengan menghapus tag dan cabang lama di SVN yang tidak Anda butuhkan.
Menjalankan ini di server di jaringan yang sama atau di server yang sama juga bisa mempercepat ini. Juga, jika karena alasan tertentu proses ini terganggu Anda dapat melanjutkannya menggunakan
git svn rebase --continue
Dalam banyak kasus Anda selesai di sini. Tetapi jika repo SVN Anda memiliki tata letak yang tidak konvensional di mana Anda hanya memiliki direktori di SVN yang ingin Anda masukkan ke dalam cabang git, Anda dapat melakukan beberapa langkah tambahan.
Yang paling sederhana adalah dengan hanya membuat repo SVN baru di server Anda yang tidak mengikuti konvensi dan digunakan
svn copy
untuk meletakkan direktori Anda di trunk atau cabang. Ini mungkin satu-satunya cara jika direktori Anda berada di akar repo, ketika saya terakhir mencoba inigit svn
hanya menolak untuk melakukan checkout.Anda juga dapat melakukan ini menggunakan git. Untuk
git svn clone
cukup menggunakan direktori yang ingin Anda masukkan ke dalam cabang git.Setelah lari
Perhatikan bahwa ini membutuhkan Git 1.7 atau lebih tinggi.
sumber
Saya telah memposting panduan langkah demi langkah (di sini ) untuk mengkonversi svn ke git termasuk mengkonversi svn tag ke git tag dan svn branch in menjadi git branch.
Versi pendek:
1) mengkloning svn dari nomor revisi tertentu. (nomor revisi harus yang tertua yang ingin Anda migrasikan)
2) mengambil data svn. Langkah ini yang paling memakan waktu.
ulangi git svn fetch sampai selesai tanpa kesalahan
3) perbarui cabang utama
4) Buat cabang lokal dari cabang svn dengan menyalin referensi
5) mengkonversi svn tag menjadi git tag
6) Letakkan repositori di tempat yang lebih baik seperti github
Jika Anda ingin detail lebih lanjut, baca posting saya atau tanyakan kepada saya.
sumber
Kita dapat menggunakan
git svn clone
perintah seperti di bawah ini.svn log -q <SVN_URL> | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt
Perintah di atas akan membuat file penulis dari komit SVN.
svn log --stop-on-copy <SVN_URL>
Perintah di atas akan memberi Anda nomor revisi pertama ketika proyek SVN Anda dibuat.
git svn clone -r<SVN_REV_NO>:HEAD --no-minimize-url --stdlayout --no-metadata --authors-file authors.txt <SVN_URL>
Perintah di atas akan membuat repositori Git di lokal.
Masalahnya adalah itu tidak akan mengkonversi cabang dan tag untuk mendorong. Anda harus melakukannya secara manual. Misalnya di bawah ini untuk cabang:
Untuk tag:
Sekarang dorong master, cabang dan tag ke repositori git jarak jauh.
utilitas svn2git
utilitas svn2git menghapus upaya manual dengan cabang dan tag.
Instal menggunakan perintah
sudo gem install svn2git
. Setelah itu jalankan perintah di bawah ini.$ svn2git <SVN_URL> --authors authors.txt --revision <SVN_REV_NO>
Sekarang Anda dapat membuat daftar cabang, memberi tag dan mendorongnya dengan mudah.
Bayangkan Anda memiliki 20 cabang dan tag, jelas svn2git akan menghemat banyak waktu dan itu sebabnya saya lebih suka daripada perintah asli. Ini pembungkus yang bagus di sekitar
git svn clone
perintah asli .Untuk contoh lengkap, lihat entri blog saya .
sumber
TortoiseGit melakukan ini. lihat posting blog ini: http://jimmykeen.net/articles/03-nov-2012/how-migrate-from-svn-to-git-windows-using-tortoise-clients
Ya, saya tahu menjawab dengan tautan tidak bagus, tetapi itu solusi, eh?
sumber
Saya sangat merekomendasikan rangkaian screencast pendek yang baru saya temukan ini. Penulis menuntun Anda melalui operasi dasar, dan menampilkan beberapa penggunaan yang lebih maju.
sumber
Jika Anda menggunakan SourceTree, Anda dapat melakukan ini langsung dari aplikasi. File Goto -> Baru / Klon kemudian lakukan hal berikut:
Buka repo di SourceTree dan Anda akan melihat pesan komit Anda juga telah dimigrasi.
Sekarang pergi ke Repositori -> Pengaturan Repositori dan tambahkan detail repo jarak jauh yang baru. Hapus remote SVN jika Anda mau (saya melakukan ini melalui opsi "Edit File Config".
Dorong kode ke repo jarak jauh yang baru saat Anda siap dan kode bebas.
sumber
Untuk pengguna GitLab saya telah membuat inti tentang bagaimana saya bermigrasi dari SVN di sini:
https://gist.github.com/leftclickben/322b7a3042cbe97ed2af
Langkah-langkah untuk bermigrasi dari SVN ke GitLab
Mendirikan
svn.domain.com.au
.http
(protokol lain harus berfungsi).git.domain.com.au
dan:dev-team
.ssh [email protected]
).favourite-project
ini dibuat didev-team
namespace.users.txt
berisi rincian pengguna yang relevan, satu pengguna per baris, dari formulirusername = First Last <[email protected]>
, di manausername
nama pengguna diberikan dalam log SVN. (Lihat tautan pertama di bagian Referensi untuk detail, khususnya jawaban oleh pengguna Casey).Versi
Perintah
Itu dia! Muat ulang halaman proyek di GitLab web UI dan Anda akan melihat semua komit dan file sekarang terdaftar.
Catatan
git svn clone
perintah akan berhenti, dalam hal ini, perbaruiusers.txt
,cd favourite-project
dangit svn fetch
akan melanjutkan dari tempat itu berhenti.trunk
- standar untuk repositori SVN.tags
branches
git svn clone
perintah berhenti di tingkat tepat di atastrunk/
,tags/
danbranches/
.git svn clone
perintah menghasilkan banyak output, termasuk beberapa peringatan di atas; Saya mengabaikan peringatan itu.sumber
Sebagai samping lain, perintah git-simpanan adalah anugerah ketika mencoba untuk git dengan komit git-svn.
Proses yang khas:
svn-dcommit
Solusinya (membutuhkan git 1.5.3+):
sumber
Berikut ini adalah skrip shell sederhana tanpa dependensi yang akan mengonversi satu atau lebih repositori SVN ke git dan mendorongnya ke GitHub.
https://gist.github.com/NathanSweet/7327535
Di sekitar 30 baris skrip: klon menggunakan git SVN, membuat file .gitignore dari SVN :: abaikan properti, dorong ke dalam repositori bare git, ganti nama SVN trunk menjadi master, ubah tag SVN menjadi git tag, dan dorong ke GitHub sambil menjaga tag.
Saya mengalami banyak rasa sakit untuk memindahkan selusin repositori SVN dari Google Code ke GitHub. Tidak membantu saya menggunakan Windows. Ruby adalah semua jenis rusak pada kotak Debian lama saya dan membuatnya bekerja di Windows adalah lelucon. Solusi lain gagal bekerja dengan jalur Cygwin. Bahkan ketika saya mendapatkan sesuatu yang berfungsi, saya tidak tahu bagaimana cara agar tag muncul di GitHub (rahasianya adalah --follow-tag).
Pada akhirnya saya membuat dua skrip pendek dan sederhana, dihubungkan di atas, dan itu bekerja dengan baik. Solusinya tidak perlu lebih rumit dari itu!
sumber
Saya menggunakan mesin windows dan membuat batch kecil untuk mentransfer repo SVN dengan sejarah (tetapi tanpa cabang) ke repo GIT hanya dengan menelepon
transfer.bat http://svn.my.address/svn/myrepo/trunk https://git.my.address/orga/myrepo
Mungkin siapa saja bisa menggunakannya. Itu menciptakan folder TMP memeriksa repo SVN di sana dengan git dan menambahkan asal baru dan mendorongnya ... dan menghapus folder itu lagi.
Anda masih membutuhkan users.txt dengan pemetaan pengguna seperti
sumber
Saya hanya ingin menambahkan kontribusi saya ke komunitas Git. Saya menulis skrip bash sederhana yang mengotomatiskan impor penuh. Tidak seperti alat migrasi lainnya, alat ini bergantung pada git asli dan bukan jGit. Alat ini juga mendukung repositori dengan riwayat revisi besar dan atau gumpalan besar. Ini tersedia melalui github:
https://github.com/onepremise/SGMS
Skrip ini akan mengonversi proyek yang disimpan di SVN dengan format berikut:
Skema ini juga populer dan didukung:
Setiap proyek akan disinkronkan dengan nama proyek:
Jika Anda ingin mengonversi repo penuh menjadi lebih, gunakan sintaks berikut:
sumber
Efektif menggunakan Git dengan Subversion adalah pengantar lembut untuk git-svn. Untuk repositori SVN yang ada, git-svn membuatnya sangat mudah. Jika Anda memulai repositori baru, jauh lebih mudah untuk membuat repositori SVN kosong dan kemudian mengimpor menggunakan git-svn daripada menuju ke arah yang berlawanan. Membuat repositori Git baru kemudian mengimpor ke SVN dapat dilakukan, tetapi itu sedikit menyakitkan, terutama jika Anda baru mengenal Git dan berharap untuk melestarikan sejarah komit.
sumber
Unduh pemasang Ruby untuk Windows dan instal versi terbaru dengannya. Tambahkan Ruby yang dapat dieksekusi ke jalur Anda.
Kemudian ketik "gem install svn2git" dan masukkan
Migrasikan repositori Subversion
Buka prompt perintah Ruby dan buka direktori tempat file akan dimigrasi
Kemudian svn2git http: // [ nama domain ] / svn / [repositori root]
Mungkin butuh beberapa jam untuk memigrasi proyek ke Git tergantung pada ukuran kode proyek.
Langkah utama ini membantu dalam membuat struktur repositori Git seperti yang disebutkan di bawah ini.
Batang SVN (/ Project_components) -> Cabang Git master SVN (/ Project_components) -> Cabang Git Tag SVN (/ Project_components) -> Tag Git
Buat repositori jarak jauh dan dorong perubahan.
sumber
GitHub memiliki importir. Setelah Anda membuat repositori, Anda dapat mengimpor dari repositori yang ada, melalui URL-nya. Itu akan meminta kredensial Anda jika berlaku dan pergi dari sana.
Saat berjalan, ia akan menemukan penulis, dan Anda bisa memetakannya ke pengguna di GitHub.
Saya telah menggunakannya untuk beberapa repositori sekarang, dan itu cukup akurat dan jauh lebih cepat juga! Butuh 10 menit untuk repositori dengan ~ 4000 komitmen, dan setelah itu butuh teman saya empat hari!
sumber
Beberapa jawaban di sini merujuk ke https://github.com/nirvdrum/svn2git , tetapi untuk repositori besar ini bisa lambat. Saya sudah mencoba menggunakan https://github.com/svn-all-fast-export/svn2git yang merupakan alat dengan nama yang persis sama tetapi digunakan untuk memigrasi KDE dari SVN ke Git.
Sedikit lebih banyak pekerjaan untuk mengaturnya tetapi ketika melakukan konversi itu sendiri bagi saya butuh beberapa menit di mana script lain menghabiskan berjam-jam.
sumber
Ada berbagai metode untuk mencapai tujuan ini. Saya sudah mencoba beberapa dari mereka dan menemukan benar-benar bekerja dengan hanya git dan svn diinstal pada OS Windows.
Prasyarat:
svnadmin dump /path/to/repository > repo_name.svn_dump
Langkah-langkah untuk mencapai tujuan akhir (pindahkan semua repositori dengan sejarah ke git, pertama git lokal, lalu jauh)
Buat repositori kosong (menggunakan alat konsol atau tortoiseSVN) di direktori REPO_NAME_FOLDER
cd REPO_NAME_PARENT_FOLDER
, masukkan dumpfile.dump ke REPO_NAME_PARENT_FOLDERsvnadmin load REPO_NAME_FOLDER < dumpfile.dump
Tunggu operasi ini, mungkin lamaPerintah ini diam, jadi buka jendela cmd kedua:
svnserve -d -R --root REPO_NAME_FOLDER
Mengapa tidak hanya menggunakan file: /// ......? Penyebab perintah berikutnya akan gagalUnable to open ... to URL:
, berkat jawaban https://stackoverflow.com/a/6300968/4953065Buat folder baru SOURCE_GIT_FOLDER
cd SOURCE_GIT_FOLDER
Akhirnya, apa yang kita dapat?
Mari kita periksa repositori lokal kami:
Lihat komit Anda sebelumnya? Jika ya - baiklah
Jadi sekarang Anda memiliki repositori git lokal yang berfungsi penuh dengan sumber dan riwayat svn lama Anda. Sekarang, jika Anda ingin memindahkannya ke beberapa server, gunakan perintah berikut:
Dalam kasus saya, saya tidak perlu perintah tag karena repo saya tidak punya tag.
Semoga berhasil!
sumber
Mengubah submodule / folder svn 'MyModule' menjadi git dengan histori tanpa tag atau cabang.
Untuk mempertahankan daftar abaikan svn gunakan komentar di atas setelah langkah 1
sumber