SubGit (Ölümün Mavi Ekranı vs)
subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo
Hepsi bu.
+ SVN'den güncellemek için, ilk komut tarafından oluşturulan bir Git deposu.
subgit import directory/path/Local.git.Repo
Büyük bir depo için Git'e anında geçiş yapmanın bir yolunu kullandım.
Tabii ki bazı hazırlıklara ihtiyacınız var.
Ancak geliştirme sürecini hiç durduramazsınız.
İşte benim yolum.
Benim çözümüm şöyle:
- SVN'yi Git deposuna taşıma
- Git deposunu takımın geçişine başlamadan hemen önce güncelleyin .
Geçiş, büyük bir SVN deposu için çok zaman alıyor.
Ancak tamamlanan taşıma işleminin yalnızca birkaç saniyede güncellenmesi.
Tabii ki SubGit kullanıyorum anne. git-svn beni Ölümün Mavi Ekranı yapar . Sadece sürekli. Git-svn beni Git'in " dosya adı çok uzun " ölümcül hatasıyla sıkıyor .
ADIMLARI
1. SubGit'i indirin
2. Taşıma ve güncelleme komutlarını hazırlayın.
Diyelim ki Windows için yapıyoruz (Linux'a bağlanmak önemsizdir).
Bir SubGit'in kurulum kutusu dizininde (subgit-2.XX \ bin) iki .bat dosyası oluşturun.
Taşıma için bir dosyanın / komutun içeriği:
start subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo
"Başlat" komutu burada isteğe bağlıdır (Windows). Başlangıçta hataları görmeye izin verir ve SubGit tamamlandıktan sonra bir kabuk açıldı.
Buraya git-svn benzeri ek parametreler ekleyebilirsiniz . SVN yazarlarının e-posta adresinin etki alanını düzeltmek için yalnızca --default-domain myCompanyDomain.com kullanıyorum .
Ben standart SVN deposunun yapısı (gövde / dalları / etiketleri) var ve biz "yazarlar haritalama" ile sorun yoktu. Bu yüzden artık hiçbir şey yapmıyorum.
(Dallar gibi etiketleri taşımak istiyorsanız veya SVN'nizde birden çok dal / etiket klasörü varsa, daha ayrıntılı SubGit yaklaşımını kullanmayı düşünebilirsiniz )
İpucu 1 : İşlerin nasıl kaynadığını hızlı görmek için --minimal-revizyon YourSvnRevNumber kullanın (bir tür hata ayıklama). Çözülmüş yazar adlarını veya e-postalarını görmek özellikle yararlıdır.
Veya geçiş geçmişi derinliğini sınırlamak için.
İpucu 2 : Taşıma kesintiye uğramış olabilir ( Ctrl+C ) ve bir sonraki güncelleme komutu / dosyası çalıştırılarak geri yüklenebilir.
Bunu büyük depolar için tavsiye etmiyorum. "Bellek yetersiz Java + Windows istisnası" aldım.
3. İpucu : Sonuç havuzunuzun bir kopyasını oluşturmak daha iyidir.
Güncelleme için bir dosyanın / komutun içeriği:
start subgit import directory/path/Local.git.Repo
Git deponuza son takımın taahhütlerini almak istediğiniz zaman bunu çalıştırabilirsiniz.
Uyarı! Çıplak deponuza dokunmayın (örneğin dalların oluşturulması).
Bir sonraki ölümcül hatayı alacaksınız:
Kurtarılamaz hata: senkronize değil ve senkronize edilemiyor ... Subversion revizyonlarını Git taahhütlerine çevirme ...
3. İlk komutu / dosyayı çalıştırın. Büyük bir depo için çok uzun zaman alacaktır. Mütevazı deposum için 30 saat.
Hepsi bu.
Git deponuzu SVN'den istediğiniz zaman ikinci dosyayı / komutu çalıştırarak güncelleyebilirsiniz. Geliştirme ekibinizi Git'e geçirmeden önce.
Sadece saniyeler sürecek.
Bir tane daha yararlı görev var.
Yerel Git veri havuzunuzu uzak bir Git veri havuzuna aktarın
Sizin durumunuz mu? Devam edelim.
- Uzaktan kumandalarınızı yapılandırın
Çalıştırmak:
$ git remote add origin url://your/repo.git
- Büyük yerel Git deponuzu uzak bir depoya ilk kez göndermeye hazırlanın
Varsayılan olarak Git'in büyük parçalar gönderemez.
ölümcül: Uzak uç beklenmedik bir şekilde telefonu kapattı
Bunun için koşalım:
git config --global http.postBuffer 1073741824
524288000 - 500 MB 1073741824 - 1 GB, vb.
Yerel sertifika sorunlarınızı düzeltin . Git sunucunuz bozuk bir sertifika kullanıyorsa.
Sertifikaları devre dışı bıraktım .
Ayrıca Git sunucunuzun düzeltilmesi gereken bir istek miktarı sınırlamaları olabilir .
- Tüm taşımayı ekibin uzak Git deposuna aktarın.
Yerel bir Git ile çalıştırın:
git push origin --mirror
( eski Git sürümleri için git push origin '*: *' )
Aşağıdakileri alırsanız: hata: spawn git olamaz: Böyle bir dosya veya dizin yok ... Benim için depomun tamamen yeniden oluşturulması bu hatayı (30 saat) çözer. Sonraki komutları deneyebilirsiniz
git push origin --all
git push origin --tags
Veya Git'i yeniden yüklemeyi deneyin ( benim için işe yaramaz ). Veya tüm etiketlerinizden dallar oluşturabilir ve onları itebilirsiniz. Veya, veya, veya ...