2010-11-21 26 views
6

Ben budala-svn aşağıdaki proje ile kullanmaya çalışıyorum sonra, dcommit başarısız olur.git-svn bile temiz kasada

git checkout -b ve git svn branch ile dallanmadan sonra git-svn ile git-svn dcommit'i kullanırken sorun yaşamaya başladım ve daha sonra bu yerel şubeyi master'a geri birleştirip, dağıtmayı denedim. Şimdi, garip bir şekilde, temiz bir ödeme yaptıktan sonra bile, iş yapmayı denediğimde hala hatalar yaşıyorum.

[email protected]:~/workspace/gsoc2010/scxml-js$ git svn dcommit 
Committing to https://[email protected]/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk ... 
     M  build-common.xml 
     M  src/xslt/backends/js/StateTableStatechartGenerator.xsl 
     M  src/xslt/backends/js/SwitchyardStatechartGenerator.xsl 
     M  src/xslt/ir-compiler/appendTransitionInformation.xsl 
     M  src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl 
     M  src/xslt/ir-compiler/flattenTransitions.xsl 
     M  src/xslt/ir-compiler/nameTransitions.xsl 
     M  src/xslt/ir-compiler/numberStatesAndTransitions.xsl 
     M  src/xslt/ir-compiler/splitTransitionTargets.xsl 
     M  src/xslt/util/language-frontend-module-generators/sh-from-topo-sort-list-generator.xsl 
     M  src/xslt/util/topo-sort.xsl 
Committed r1037491 
W: 502073c202cb1fbe089f0e8b7100304f0aa74729 and refs/remotes/trunk differ, using rebase: 
:100644 100644 7930fd690be01a5716490704b5556e2b5cab5ba6 51047f2c8cf1daaa94ae44433a9aa2acc222ae43 M  build-common.xml 
:040000 040000 59251941b33bda1376881b33bb2263ea87b1b947 2f5e2586e26bc7d05def065cfcf05327982b81d7 M  src 
Current branch master is up to date. 
# of revisions changed 
before: 
39c6f7e2d7b82cc782b8770d1ddb0ecb4f86e780 
c5f360feb3a6bdaab2fb2f48d05e8691824e3231 

after: 
502073c202cb1fbe089f0e8b7100304f0aa74729 
39c6f7e2d7b82cc782b8770d1ddb0ecb4f86e780 
c5f360feb3a6bdaab2fb2f48d05e8691824e3231 
If you are attempting to commit merges, try running: 
     git rebase --interactive --preserve-merges refs/remotes/trunk 
Before dcommitting 
[email protected]:~/workspace/gsoc2010/scxml-js$ git svn rebase 
     M  build-common.xml 
     M  src/xslt/ir-compiler/nameTransitions.xsl 
     M  src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl 
     M  src/xslt/ir-compiler/appendTransitionInformation.xsl 
     M  src/xslt/ir-compiler/flattenTransitions.xsl 
     M  src/xslt/ir-compiler/numberStatesAndTransitions.xsl 
     M  src/xslt/ir-compiler/splitTransitionTargets.xsl 
     M  src/xslt/backends/js/SwitchyardStatechartGenerator.xsl 
     M  src/xslt/backends/js/StateTableStatechartGenerator.xsl 
     M  src/xslt/util/language-frontend-module-generators/sh-from-topo-sort-list-generator.xsl 
     M  src/xslt/util/topo-sort.xsl 
r1037491 = e8d820cfdca882a57fbfa003b9673313be6c9621 (refs/remotes/trunk) 
First, rewinding head to replay your work on top of it... 
Applying: Changed some paths around so python fronend works. 
Applying: Removed test_with_xsltproc.sh. This file no longer needed, as we now generate a bash backend module. 
[email protected]:~/workspace/gsoc2010/scxml-js$ git svn dcommit 
Committing to https://[email protected]/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk ... 
     M  src/python/scxml/cgf/backends/js 
     M  src/python/scxml/cgf/xslt 
Committed r1037493 
W: 8563b885bfca77ccb33a87f56f78e6323af022a9 and refs/remotes/trunk differ, using rebase: 
:040000 040000 c33b3d66ecc6735af3241d7f9cee383d2736f614 59251941b33bda1376881b33bb2263ea87b1b947 M  src 
Current branch master is up to date. 
# of revisions changed 
before: 
574e2e495fa12cf3d81004638a06e3315d0abba5 

after: 
8563b885bfca77ccb33a87f56f78e6323af022a9 
574e2e495fa12cf3d81004638a06e3315d0abba5 
If you are attempting to commit merges, try running: 
     git rebase --interactive --preserve-merges refs/remotes/trunk 
Before dcommitting 

Temelde her bir git svn rebase ardından git svn dcommit son dcommit beri taahhüt yapmanız gerekir:

aşağıdaki oldukça uzun iz git-svn ile benim şimdiki iş akışının temsilcisidir. Bu genellikle temiz çalışır, ancak bazen başarısız olur ve daha fazla manuel çalışma gerektirir.

Bu sorunu dcommit ile neden olabilir, öyle ki temiz bir ödeme kullanmak bile sorunu çözmez?

+1

Düşünebildiğim tek şey, uzak SVN sunucusunun bir şekilde taahhüdü karıştırmasıdır. Böylece, sonuçta elde edilen SVN taahhüdü,% 100'ün, itiraf ettiğiniz Git işlemini eşleştirmemesidir. Aynı dalda yeni bir şube oluşturmayı deneyebilirsiniz (bu şekilde taahhütler saklanır) ve SVN'ye aktarılan bir işlem ile Git'in bu durumun söz konusu olup olmadığına bakmakla yükümlü olduğu arasındaki fark arasındaki farktır. – cdhowie

cevap

5

Sadece bu koştum ve sonunda neler anladım: HTTP ve write-through proxying üzerinden bir SVN deposunu erişirken, önerilen post-commit kanca arka planda svnsync çalışır. SVN sunucusu bittikten hemen sonra HTTP üzerinden yapılan işlem tamamlanır, ancak okuduğunuz HTTP proxy'si yeni revizyona güncellendi. git-svn hızlı bir şekilde bir getirme işlemini gerçekleştirir ve eski HTTP proxy'sini yeni düzeltme olmadan görür. Yeni bir revizyona sahip olduğunu varsayar ve uzak duruşunun ne yapması gerektiğine ve çatışmayı görmesine engel olur.

SVN proxy yapılandırmasını denetlerseniz, svnsync eşzamanlı yapabilirsiniz (bu, birisi beni bir yapılandırma değişikliğiyle şaşırtana kadar uzun bir süre boyunca çalıştı). Aksi takdirde ben git-svn bir yeniden deneme mekanizması gerektiğini düşünüyorum: Bu akşam hala iyi bir fikir gibi görünüyor

diff --git a/git-svn.perl b/git-svn.perl 
index 09c4ca5..af9aea1 100755 
--- a/git-svn.perl 
+++ b/git-svn.perl 
@@ -57,6 +57,7 @@ use File::Spec; 
use File::Find; 
use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/; 
use IPC::Open3; 
+use Time::HiRes qw/usleep/; 
use Git; 

BEGIN { 
@@ -574,7 +575,17 @@ sub cmd_dcommit { 
           $gs->{inject_parents_dcommit}->{$cmt_rev} = 
                   $parents->{$d}; 
         } 
-      $_fetch_all ? $gs->fetch_all : $gs->fetch; 
+      my $retry; 
+      fetch: for ($retry = 0; $retry < 30; ++$retry) { 
+       $_fetch_all ? $gs->fetch_all : $gs->fetch; 
+       last fetch if ($gs->rev_map_max >= $cmt_rev); 
+       # Asynchronous commit push not complete 
+       usleep(20000 * ($retry + 1)); 
+      } 
+      if ($retry > 0 && $gs->rev_map_max < $cmt_rev) { 
+       fatal "New revision $cmt_rev did not appear", 
+         "in repository after $retry retries."; 
+      } 
         $last_rev = $cmt_rev; 
         next if $_no_rebase; 

$ 

ben bir yama gönderirsiniz.

Güncelleme: Kendi kaydedilmesini birinde

Author: syncuser <[email protected]> 

: Ben ile sona erdi bu kullanırken. Bu yüzden, komut dosyasının kısmi bir senkronizasyon gördüğünde hala bir yarış durumu olabilir. Bu can sıkıcı ama ölümcül değil.

+0

Cevabınız için teşekkür ederiz. Bence bu çözüm muhtemelen işe yarayacak, ancak problemin çözümü için başka bir yol buldum. Şu anda Avrupa'dayım ve svn.apache.org şeffaf bir şekilde svn.us.apache.org'un bir aynası olan svn.eu.apache.org ile eşleşiyor. Sanırım aynaya bağlı olmak, muhtemelen bahsettiğin problem için işe yaramıyor. Ancak, svn.us.apache.org'dan açıkça klonlanarak, dcommit şimdi iyi çalışıyor gibi görünüyor. – jbeard4

+0

Kendime sadece benim notu kullanarak (yukarıda) 5 FPGA bit dosya ile bir devir iadesi ve 30 denemeden sonra bile vekil yeni versiyonu (yaklaşık 10s toplam bekleme) görmemişti. Bleah. –