Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Saat pindah ke Git dari sistem kontrol versi lain seperti Subversion (SVN), kami umumnya menyarankan agar Anda melakukan "migrasi tip", yang hanya memigrasikan versi terbaru konten repositori, tanpa menyertakan riwayat. Namun, banyak orang ingin melakukan migrasi yang lebih canggih, termasuk riwayat. Panduan yang diberikan dalam artikel ini memperkenalkan migrasi dengan riwayat.
Migrasi SVN ke Git dapat bervariasi dalam kompleksitas, tergantung pada berapa lama repositori dan berapa banyak cabang yang dibuat dan digabungkan, dan apakah Anda menggunakan SVN biasa atau relatif dekat seperti SVK.
Bisa jadi sederhana jika:
- Anda memiliki repositori baru
- Anda memiliki pengaturan standar batang, cabang, dan direktori tag
Kemungkinan akan rumit jika:
- Tim Anda telah melakukan banyak operasi percabangan dan penggabungan
- Repositori Anda mengikuti penyiapan direktori non-standar
- Penyiapan direktori Anda telah berubah dari waktu ke waktu
Ada beberapa cara untuk bermigrasi dari SVN ke Git. Pendekatan yang diuraikan dalam artikel ini didasarkan pada penggunaan git-svn, ekstensi Git, yang dapat digunakan untuk memeriksa repositori Subversi ke repositori Git lokal dan kemudian mendorong perubahan dari repositori Git lokal kembali ke repositori Subversi. Langkah-langkah ini memberikan gambaran terperinci tentang proses migrasi dari SVN ke Git di lingkungan Windows, tanpa menyinkronkan kembali ke repositori SVN asli. Hasilnya akan menjadi repositori Git kosong untuk dibagikan dengan tim Anda lainnya.
Catatan
Sebelum Anda mencoba memigrasikan kode sumber Anda dari sistem kontrol versi terpusat ke Git, pastikan Anda membiasakan diri dengan perbedaan antara sistem kontrol versi terpusat dan terdistribusi, dan merencanakan migrasi tim Anda. Setelah menyiapkan, Anda dapat memulai migrasi.
Alur kerja tingkat tinggi untuk migrasi dari SVN ke Git adalah sebagai berikut:
- Menyiapkan lingkungan migrasi
- Mengonversi repositori SVN sumber ke repositori Git lokal
- (Opsional) Menyinkronkan repositori Git lokal dengan perubahan apa pun dari repositori SVN saat pengembang terus menggunakan SVN
- Mendorong repositori Git lokal ke repositori Git jarak jauh yang dihosting di Azure Repos
- Kunci repositori SVN, sinkronkan perubahan yang tersisa dari repositori SVN ke repositori Git lokal dan dorong perubahan akhir ke repositori Git jarak jauh di Azure Repositori
- Pengembang beralih ke Git sebagai sistem kontrol sumber utama
Menyiapkan lingkungan migrasi
Konfigurasikan lingkungan migrasi di stasiun kerja lokal dan instal perangkat lunak berikut:
- Git
- Subversion
- utilitas git-svn (sudah menjadi bagian dari Git)
Anda juga harus membuat repositori Git agar organisasi Anda dapat menghosting repositori SVN yang dikonversi, Anda dapat mengikuti Membuat repositori Git baru di proyek Anda
Mengonversi repositori SVN sumber ke repositori Git lokal
Tujuan dari langkah ini adalah untuk mengonversi repositori Subversion sumber menjadi repositori Git telanjang lokal. Repositori Git telanjang tidak memiliki pemeriksaan kerja lokal file yang dapat diubah, sebaliknya hanya berisi riwayat repositori dan metadata tentang repositori itu sendiri. Ini adalah format yang direkomendasikan untuk berbagi repositori Git melalui repositori jarak jauh yang dihosting pada layanan seperti Azure Repos.
Tip
Repositori Bare Git disusun secara berbeda dan mengingat fakta bahwa repositori tersebut tidak memiliki direktori kerja mencegah penerapan langsung ke repositori.
Mengambil daftar semua penulis Subversion
Subversi hanya menggunakan nama pengguna untuk setiap penerapan, sementara Git menyimpan nama asli dan alamat email. Secara default, alat git-svn akan mencantumkan nama pengguna SVN di bidang penulis dan email. Namun, Anda dapat membuat file pemetaan untuk pengguna SVN bersama dengan nama dan email Git yang sesuai.
Pengguna subversi
Pengguna Git
Untuk mengekstrak daftar semua pengguna SVN dari akar checkout Subversion lokal Anda, jalankan perintah PowerShell ini:
Untuk hasil dalam utf8NoBOM
pengodean, jalankan perintah berikut:
svn.exe log --quiet | ? { $_ -notlike '-*' } | % { "{0} = {0} " -f ($_ -split ' | ')[1] } | Select-Object -Unique | Sort-Object | Out-File 'authors-transform.txt' -Encoding utf8NoBOM
Untuk hasil dalam ASCII
pengodean, jalankan perintah berikut:
svn.exe log --quiet | ? { $_ -notlike '-*' } | % { "{0} = {0} " -f ($_ -split ' | ')[1] } | Select-Object -Unique | Sort-Object | Out-File 'authors-transform.txt' -Encoding ASCII
Perintah ini akan mengambil semua pesan log, mengekstrak nama pengguna, menghilangkan nama pengguna duplikat, mengurutkan nama pengguna, dan menempatkannya ke dalam file authors-transform.txt dalam format UTF-8 (atau format ASCII, tergantung pada pengodean mana yang Anda tentukan). Anda kemudian dapat mengedit setiap baris dalam file untuk membuat pemetaan pengguna SVN ke pengguna Git yang diformat dengan baik. Misalnya, Anda dapat memetakan jamal = jamal <jamal>
ke jamal = Jamal Hartnett <jamal@fabrikam-fiber.com>
.
Mengkloning repositori Subversi menggunakan git-svn
Perintah berikut akan melakukan transformasi git-svn standar menggunakan file authors-transform.txt yang dibuat pada langkah sebelumnya. Ini akan menempatkan repositori Git di c:\mytempdir
folder di komputer lokal Anda.
git svn clone ["SVN repo URL"] --prefix=svn/ --no-metadata --authors-file "authors-transform.txt" --stdlayout c:\mytempdir
Catatan
--prefix=svn/
diperlukan karena jika tidak, alat tidak dapat memberi tahu revisi SVN dari yang diimpor. Sebaiknya atur awalan (dengan garis miring berikutnya), karena ref pelacakan SVN Anda kemudian akan terletak di refs/remotes/$prefix/
, yang kompatibel dengan tata letak cabang pelacakan jarak jauh Git sendiri (refs/remotes/$remote/
).
Mengatur awalan juga berguna jika Anda ingin melacak beberapa proyek yang berbagi repositori umum. Secara default, awalan diatur ke origin/
.
Jika Anda menggunakan batang standar, cabang, tata letak tag, Anda hanya akan menempatkan --stdlayout
. Namun, jika Anda memiliki sesuatu yang berbeda, Anda mungkin harus meneruskan --trunk
, --branches
, dan --tags
untuk menemukan apa itu. Misalnya, jika struktur repositori Anda adalah trunk/companydir
dan Anda bercabang bahwa alih-alih batang, Anda mungkin ingin --trunk=trunk/companydir --branches=branches
.
git svn clone ["SVN repo URL"] --prefix=svn/ --no-metadata --trunk=/trunk --branches=/branches --tags=/tags --authors-file "authors-transform.txt" c:\mytempdir
Catatan
Perintah ini dapat memakan waktu beberapa menit hingga beberapa jam tergantung pada ukuran repositori SVN. Setelah selesai, Anda akan memiliki git checkout repositori Anda.
Mengonversi konfigurasi khusus kontrol versi
Jika repositori SVN Anda menggunakan properti svn:ignore, Anda dapat mengonversi ke file .gitignore menggunakan:
cd c:\mytempdir
git svn show-ignore --id=origin/trunk > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'
Tip
Baca selengkapnya tentang .gitignore: Abaikan perubahan file dengan Git
Dorong repositori ke repositori git telanjang
Dalam langkah ini, Anda akan membuat repositori kosong dan membuat cabang defaultnya cocok dengan nama cabang batang SVN.
Membuat repositori Git kosong
git init --bare c:\new-bare.git cd c:\new-bare.git git symbolic-ref HEAD refs/heads/svn/trunk
Dorong repositori Git lokal ke repositori Git telanjang baru
cd c:\mytempdir git remote add bare c:\new-bare.git git config remote.bare.push refs/remotes/*:refs/heads/* git push bare
Ganti nama cabang menjadi
trunk
main
. Cabang pengembangan utama Anda akan diberi nama "trunk", yang cocok dengan nama yang ada di Subversion. Anda harus mengganti namanya menjadi cabang standarmain
Git menggunakan:cd c:\new-bare.git git branch -m svn/trunk main
Membersihkan cabang dan tag git-svn membuat semua tag Subversions menjadi cabang yang sangat pendek di Git dari bentuk "tag/nama". Anda akan ingin mengonversi semua cabang tersebut menjadi tag Git yang sebenarnya atau menghapusnya.
Memigrasikan tag SVN menjadi tag Git
cd c:\new-bare.git
git for-each-ref --format='%(refname)' refs/heads/svn/tags | % { $_.Replace('refs/heads/svn/tags/','') } | % { git tag $_ "refs/heads/svn/tags/$_"; git branch -D "svn/tags/$_" }
Migrasi tingkat lanjut
Membuat semua cabang SVN sebagai cabang Git yang tepat
Meskipun mudah untuk membuat semua cabang SVN sebagai cabang Git yang tepat, disarankan agar Anda mengevaluasi poin-poin berikut sebelum melanjutkan:
Jika ada cabang Fitur: Dapatkah Anda menunggu hingga berintegrasi ke bagasi sebelum bermigrasi?
Jika ada cabang Rilis: Apakah masuk akal untuk menjaga SVN tetap siap melayani? Jika Anda memigrasikan cabang fitur, apakah Anda siap untuk melayani cabang dari Git?
Jika Anda masih ingin memigrasikan cabang yang ada, jalankan perintah PowerShell berikut ini:
git for-each-ref --format='%(refname)' refs/remotes | % { $_.Replace('refs/remotes/','') } | % { git branch "$_" "refs/remotes/$_"; git branch -r -d "$_"; }
Catatan
Perintah ini dapat memakan waktu beberapa menit hingga beberapa jam tergantung pada ukuran repositori SVN. Setelah selesai, Anda akan memiliki git checkout repositori Anda.
Memigrasikan hanya revisi tertentu
Ketika tidak ditentukan, git-svn clone
akan memigrasikan semua revisi dari penerapan pertama (r1) ke HEAD. Jika Anda hanya perlu memigrasikan sekumpulan revisi tertentu, perintah untuk git-svn clone
harus ditambahkan dengan opsi .-r
Misalnya, jika Anda perlu bermigrasi dari rev 100 ke HEAD, perintah terlihat seperti ini:
git svn clone ["SVN repo URL"] --prefix=svn/ --no-metadata --authors-file "authors-transform.txt" --stdlayout c:\mytempdir -r100:HEAD
Memperbarui alur kerja Anda
Berpindah dari sistem kontrol versi terpusat ke Git lebih dari sekadar memigrasikan kode. Tim Anda memerlukan pelatihan untuk memahami bagaimana Git berbeda dari sistem kontrol versi yang ada dan bagaimana perbedaan ini memengaruhi pekerjaan sehari-hari. Pelajari selengkapnya.
Informasi referensi
- Memilih kontrol versi yang tepat untuk proyek Anda
- Pelajari Git
- Abaikan perubahan file dengan Git
- Migrasi dari TFVC ke Git
Penulis: Hosam Kamel, William H. Salazar | Temukan asal artikel ini dan sambungkan dengan ALM | Panduan Percabangan DevOps Rangers
(c) 2017 Microsoft Corporation. Semua hak dilindungi undang-undang. Dokumen ini disediakan "apa adanya." Informasi dan tampilan yang dinyatakan dalam dokumen ini, termasuk URL dan referensi situs Web Internet lainnya, dapat berubah tanpa pemberitahuan. Anda menanggung risiko menggunakannya.
Dokumen ini tidak memberi Anda hak hukum apa pun atas kekayaan intelektual apa pun dalam produk Microsoft apa pun. Anda dapat menyalin dan menggunakan dokumen ini sebagai referensi internal.