Latar belakang
Musim panas lalu, sebuah posting blog resmi dipublikasikan di blog resmi BitBucket yang mengumumkan akhir dukungan untuk repositori Mercurial.
Penghentian Mercurial akan terjadi dalam dua tahap:
- Mulai 1 Februari 2020, pengguna tidak lagi dapat membuat repositori baru.
- Mulai 1 Juni 2020, pengguna tidak akan dapat menggunakan fungsi Mercurial di Bitbucket atau melalui API-nya, dan semua repositori Mercurial akan dihapus.
Alasan untuk keputusan ini kurang lebih jelas, tetapi saya menggunakan beberapa repositori tentang Mercurial dalam pekerjaan saya (saya selalu lebih menyukai Mercurial, tetapi saya akan meninggalkan pertanyaan ini di luar ruang lingkup artikel ini), yang perlu saya konversi ke GIT.
Sebenarnya, tempat ini dimulai ...
Masalah
Pengembang dan layanan dukungan BitBucket menawarkan beberapa opsi untuk konversi semacam itu, saya mencoba semuanya, dan pada saat yang sama saya mencoba alat pihak ketiga, seperti
mengimpor repositori ke GitHub.
Ternyata semua alat ini merusak nama file dan direktori yang berisi karakter dalam alfabet Cyrillic, dan saya memiliki banyak file seperti itu (TK, spesifikasi, dan file serupa lainnya). Lucu bahwa melakukan komentar yang mengandung Cyrillic ditoleransi dengan baik dan ditampilkan setelah migrasi.
Saya menemukan informasi di Internet bahwa ada alat di Mercurial (kunci dalam file konfigurasi repositori) yang memungkinkan Anda untuk mengontrol pengkodean karakter secara default, tetapi pertama-tama, mereka hanya disertakan secara eksplisit, dan kedua, tidak ada alat untuk mengkonversi repositori yang ada . Ya, saya tidak memeriksa bagaimana opsi ini membantu migrasi menggunakan alat yang sudah jadi - sudah terlambat bagi saya untuk melakukannya.
Tidak ada keinginan untuk mencari file masalah secara manual dan melakukan pengisian ulang secara manual, jadi saya harus menggali sedikit dan menemukan solusinya.
Mungkin, mentransfer repositori dengan karakter Rusia dalam nama file juga relevan untuk seseorang, dan artikel saya akan menghemat sedikit waktu.
Solusi
Prosedur dasar
- Ambil sendiri repositori git@github.com: seewindcn / tortoisehg.git - ia memiliki plugin fixutf8, yang tidak ada dalam distribusi utama. Lebih jauh diasumsikan bahwa salinan lokal akan berlokasi di direktori D: \ Development \ tortoisehg
- Buat salinan repositori Mercurial Anda agar tidak merusak lokasi utama. Selanjutnya, semua perintah dieksekusi di direktori copy.
- Perbaiki nama file dan direktori dengan perintah D: \ Development \ tortoisehg \ hg.exe addremove -s 100
- Berkomitmen pada repositori D: \ Development \ tortoisehg \ hg.exe commit -m "Perbaiki nama file"
- Aktifkan plugin hggit - dalam file .hg \ hgrc yang perlu Anda tambahkan
[ekstensi]
hggit = - Bersiap untuk mengonversi ke GIT - buat label master dengan perintah D: \ Development \ tortoisehg \ hg.exe bookmark -r master default
- Buat repositori GIT di BitBucket
- Kami berkomitmen pada repositori hg push git + ssh: //git@bitbucket.org: <user> / <reponame> .git ( perhatikan , ini menggunakan hg reguler karena klon dari seewindcn tidak ingin bekerja pada SSH)
- Kami memeriksa situs web BitBucket, memastikan bahwa nama file Cyrillic tidak rusak
- Kami mengkloning repositori GIT ke diri kami sendiri, memeriksa nama file, melakukan perbandingan byte dari semua file, membangun proyek, menguji
- Setelah membangun, mungkin akan ada satu ton file baru yang akan disarankan oleh GIT. File .hgignore harus dikonversi ke .gitignore dengan tangan. Untungnya, Anda dapat melakukan ini sekali dan menggunakan satu file untuk semua repositori lainnya.
Sebagai hasilnya, kami berhasil mentransfer cabang default utama dari repositori Mercurial asli dengan seluruh riwayat commit ke master repositori GIT dan bahkan dengan label. Dari minus, saya perhatikan hanya kurangnya informasi lengkap tentang perubahan pada file dengan Cyrillic dalam sejarah commit - ada commit, dan bahkan tidak ada referensi ke file dengan Cyrillic (sisa file, tentu saja, dalam urutan sempurna).
Secara umum, tugas itu bisa dianggap selesai, tetapi karena minat olahraga, itu juga menarik bagi saya untuk mentransfer cabang yang tersisa.
Pembungkus cabang kecuali default
- Dapatkan daftar cabang hg cabang
- Untuk setiap cabang
- Beralih ke hg cabang <branchname>
- Buat label (nama label tidak boleh cocok dengan nama cabang): hg bookmark -r <hgbranchname> <gitbranchname>
- Tuang cabang ke dalam GIT hg push git@bitbucket.org: <user> / <reponame> .git
Bisa terjadi bahwa nama cabang juga mengandung alfabet Cyrillic, dalam hal ini cabang hg akan menunjukkan krakozyabry. Dalam hal ini, saya menggunakan meja kerja hg visual - beralih ke cabang dan membuat label di sana.
Pada titik ini datanglah Feng Shui lengkap.
Jika seseorang tertarik menggali lebih dalam, maka saya meninggalkan ...
Daftar referensi