2009-07-20 17 views
6

Bu soru this one ve this one benzer, ancak senaryo biraz daha karmaşıktır.Git-svn düzeni değiştirilmiş svn depolarıyla nasıl davranıyor?

(Ben paylaşılan yapılandırma dosyaları ve çeşitli makineler arasındaki benzerleri için ağırlıklı kullanın) özel svn deposu ile birkaç yıl önce başladı. Deponun düzenine (şubeler, git, vb.) Çok dikkatli değildim, bu yüzden zamanla çok değişti. Bu elbette bir hataydı, ama şimdi çok geç. Daha yakın bir zamanda, daha çok svn move komutları ile daha standart bir svn trunk/branch/tags mizanpajına geçtim, ama tabiki eski tarih hala depoda mevcut (ve açıkçası biraz karışıklık var) .

Şimdi bir git deposuna kalıcı olarak dönüştürmek istiyorum. Git-svn'yi kullanarak denedim, ancak yalnızca tutarlı bir gövde/şube/etiket sözleşmesinin izlendiği durumları ele alıyor gibi görünüyor (evet, alternatif adlar sağlayabilirsiniz, ancak her biri için bir tane görünür). Depomun tarihçesinin birçoğunun, depoların kökünde etkili bir şekilde gövdesi vardır, örneğin, etiketler/ve dallar/alt-direkler olarak.

tüm bu işlemek için en iyi yolu nedir? İdeal olarak, ben en geç gitme havuzuna gitmem, en azından geçmişin bir şekilde erişilebilir olmasını istiyorum, dallar ve etiketler git sınıfındaki birinci sınıf kavramlar olarak doğru şekilde temsil edilmese bile. Daha spesifik

, nasıl svn-git edecek onunla sağladığının gövde/şube/etiketleri alt dizinleri dışında dosyaları işlemek? Şu ana kadarki gözlemlerim onları bazen kaçırıyor (kesinlikle Tamam değil), ve diğer zamanlarda onları yeni depoya ekliyor.

Herhangi bir düşünce takdir edilecektir.

+0

Bunu davranması edeceğiz nasıl sormak değil, aynı zamanda bunu denedim derler. Gözlemlediğiniz istenmeyen davranışların belirli örnekleri yararlı olacaktır. Git, genellikle karmaşık birleştirme işlemlerinde, örneğin aynı işlemdeki bir alt ağacın değiştirilmesi ve hareket ettirilmesinde şaşırtıcı derecede iyidir. –

+0

Tamam - Denedim. Sonuçlara tamamen girmemiş olabileceğimi itiraf ediyorum, fakat yüzeysel gözlemlerim kesinlikle git-svn'nin svn kökünden bazı dizinleri (yani, gövde/dallar/etiket direkleri dışında) içerdiği, fakat başkalarını içermediği görünüyordu. Neden olduğu konusunda kafam karıştı. Evet, karmaşık birleşimleri işleme yeteneğine sahip olduğundan eminim, ancak bu sorunun git-svn hakkında git kendisinden daha fazla olduğunu düşünüyorum. –

+0

['subversion'] etiketi yerine [' svn'] etiketini kullanın http://meta.stackexchange.com/questions/2601/batch-retag-request-merge-svn-and-subversion –

cevap

2

Deneyimlerime göre, bunun üstesinden gelmenin tek yolu, deponun konumunu zaman içinde takip etmektir ve projenin tek bir konumda kaldığı her dönem için ayrı bir git-svn-clone oluşturur.

(veya en azından kadar geriye rahatsız olabilir gibi) zaman içinde farklı aşamaları için depoları oluşturduktan sonra, birlikte depoları graft. Burada bu tekniği gösteren bir ekran kaydı oluşturduk

:

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html