Buna da ihtiyacım vardı ve Bombe'nin cevabı + etrafta dolaşmakla işe başladım. İşte tarif:
İçe Aktar Git -> Alt Sürüm
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
# 3'ten sonra böyle şifreli bir mesaj alacaksınız:
Daha yüksek URL seviyesi kullanma: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Sadece görmezden gel.
# 5 çalıştırdığınızda, çakışmalar yaşayabilirsiniz . Durum "birleştirilmemiş" dosyaları ekleyerek ve rebase devam ettirerek bunları çözün. Sonunda, işiniz bitti; daha sonra kullanarak SVN deposuna geri senkronize edin dcommit
. Bu kadar.
Depoları senkronize tutma
Şimdi aşağıdaki komutları kullanarak SVN'den Git'e senkronize edebilirsiniz:
git svn fetch
git rebase trunk
Git'ten SVN'ye senkronize etmek için şunu kullanın:
git svn dcommit
Son not
Canlı bir veri havuzuna başvurmadan önce bunu yerel bir kopyada denemek isteyebilirsiniz. Git deponuzun geçici bir yere kopyasını alabilirsiniz; cp -r
tüm veriler depoda olduğu için kullanın . Daha sonra aşağıdakileri kullanarak dosya tabanlı bir test havuzu oluşturabilirsiniz:
svnadmin create /home/name/tmp/test-repo
Ve aşağıdakileri kullanarak çalışan bir kopyayı kontrol edin:
svn co file:///home/name/tmp/test-repo svn-working-copy
Bu, kalıcı değişiklikler yapmadan önce bir şeylerle oynamanıza izin verecektir.
Zeyilname: Berbat olursanız git svn init
Yanlışlıkla git svn init
yanlış URL ile çalışırsanız ve çalışmanızın yedeğini alacak kadar akıllı değilseniz (sormayın ...), aynı komutu tekrar çalıştıramazsınız. Ancak, aşağıdakileri yaparak değişiklikleri geri alabilirsiniz:
rm -rf .git/svn
edit .git/config
Ve bölüm [svn-remote "svn"]
bölümünü kaldırın .
Daha sonra git svn init
yeniden çalıştırabilirsiniz .