SORU
17 EYLÜL 2008, ÇARŞAMBA


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
19 EKİM 2010, Salı


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GamingAndTech

    GamingAndTec

    16 NİSAN 2013
  • njhaley

    njhaley

    24 NİSAN 2006
  • NPR

    NPR

    22 NİSAN 2006