Nasıl yeni bir Git deposuna tarihi ile SVN deposuna geçirilecek?
Gıt kılavuzu, SSS, Git - SVN kurs, vb okudum. ve hepsi bu, bunu açıklayın, ama hiçbir yerde basit bir talimat gibi bulabilirsiniz:
SVN deposu: svn://myserver/path/to/svn/repos
Git deposu: 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
Bende bu kadar basit olmasını beklemiyorum, tek bir komut olmasını beklemiyorum. Ama bir şey - sadece ne bu örnek verilen söylemek açıklamak için denemek için bekliyorum.
CEVAP
Kullanıcılar bir dosya (örneğin users.txt
) SVN kullanıcıları GIT eşleme oluşturmak için:
user1 = First Last Name <email@address.com>
user2 = First Last Name <email@address.com>
...
Bu oyunu mevcut SVN repo bir şablon oluşturmak için kullanabilirsiniz:
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /'
SVN eğer dosya eksik SVN bir kullanıcı bulursa keser. Ama dosyayı güncellemek ve pick-up sonra kaldığınız yerden.
Şimdi Çek repo SVN veri:
git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir-tmp
Bu komut dest_dir-tmp
yeni bir git repo oluşturmak ve SVN repo çekmeye başlayacak. "Bayrak ortak "/ Şubeler/ etiketler/" svn düzeni. bagajı var anlamına gelir "--stdlayout unutmayın Eğer düzeni farklıysa, --tags
, , * --branches
*22 seçenekleri aşina (genel olarak git svn help
).
Tüm ortak: , *, https://
*http://
24. Url base depo, http://svn.mycompany.com/myrepo/repository gibi bir hedef olmalı. O gerekirdeğil/trunk
, /tag
/branches
vardır.
Bu komutu yürüttükten sonra bu işlemi"/", Yeni repo başlatılıyor sonra uzun bir süre kalmış olabilir. çok normal birşey Don asılı gibi çok sık görünüyor unutmayın Sonunda o zaman göç olduğunu belirten günlük mesajlarını göreceksiniz.
Ayrıca eğer --no-metadata
bayrak atlarsanız, gıt mesaj (31* yani *) işlemeye karşılık gelen SVN revision hakkında bilgi ekler unutmayın
Eğer bir kullanıcı adı bulunursa, users.txt
dosya güncelleme:
cd dest_dir-tmp
git svn fetch
Subversion tüm getirildi tamamlar kadar büyük bir proje varsa, bu son komut birkaç kez tekrarlayın gerekebilir:
git svn fetch
Tamamlandığında, git SVN trunk
yeni bir şube halinde teslim edecektir. Diğer dallar uzaktan kumanda olarak ayarlanmıştır. Diğer SVN dalları ile görüntüleyebilirsiniz:
git branch -r
Eğer repo diğer dalları uzak tutmak istiyorsanız, her biri için yerel bir şube el ile oluşturmak istiyorum. (Trunk/ana atlayın.) Eğer bunu yapmak istemezsen, dalları son adımda klonlanmış götürmez.
git checkout -b local_branch remote_branch
# it's ok if local_branch and remote_branch are the same name
Etiketler dalları olarak alınır. Yerel bir şube oluşturmak için, bir etiket yapmak ve şube gıt etiketleri oldukları için silin. Tag ile bunu yapmak için"": . v1
git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag v1 tag_v1
git branch -D tag_v1
Temiz bir git repo içine GİT-SVN repo klon:
git clone dest_dir-tmp dest_dir
rm -rf dest_dir-tmp
cd dest_dir
Uzak dallardan daha önce oluşturduğunuz yerel dalları yalnızca yeni klonlanmış deposuna uzak dallar olarak kopyalanmış olacak. (Trunk/ana atlayın.) Her şube için tutmak istiyorum:
git checkout -b local_branch origin/remote_branch
Son olarak, artık silinmiş temp repo işaret eden temiz git repo uzak kaldırın:
git remote rm origin
Nasıl bir çıplak biri için normal bir ...
Orijinal Github gelen yeni güncellemel...
Nasıl yerel Java Uygulaması Motor depo...
Nasıl Git bir şube kendi deposuna taşı...
Nasıl göz ardı desen svn deposuna için...