Lorsque j'exécute git svn clone, l'erreur suivante apparaît:
0 [main] Perl 24432 cygwin_exception::open_stackdumpfile: Dumping stack trace to Perl.exe.stackdump fatal: malformed index info 100644 362f1c18ceed5d593eb021432545685283a93
Lorsque j'ouvre le fichier, je vois ce qui suit:
Exception: STATUS_ACCESS_VIOLATION à rip = 0048360C537 rax = 00000006039F81E0 rbx = 000000005219E248 rcx = 000000060003A3C0 rdx = 0000000000000000 rsi = 000000000000FDB4 rdi = 0000000000000004 r8 = 0000000000000000 r9 = 0000000000000000 r10 = 0000000000230000 r11 = 000000048D785FBA r12 = 0000000000000003 r13 = 000006FFFF7FEDB8 r14 = 00000006014D4030 r15 = 000006FFFF7FEDD0 rbp = 000000000007EDA8 rsp = 000000000022BE80 programme = C:\Program Files\Git\usr\bin\Perl.exe, pid 24432, thread principal cs = 0033 ds = 002B es = 002B fs = 0053 gs = 002B ss = 002B
J'ai vérifié les liens suivants:
Problème lors du clonage d'une branche SVN via git svn
Liaisons SVN Python pour Windows
Documentation sur les liaisons Python Subversion?
Malheureusement, je ne suis pas assez au courant pour que les technologies sous-jacentes comprennent exactement ce que je devrais faire. Cela pourrait être la cause et comment pourrais-je être capable de résoudre?
J'ai eu cette erreur lors de la migration d'un énorme référentiel svn vers git à l'aide de l'outil svn2git. J'ai ajouté des lignes ci-dessous dans mon fichier .git/config et cela a commencé à fonctionner:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
packedGitLimit = 256m
packedGitWindowSize = 256m
longpaths = true
[http]
postBuffer = 524288000
[pack]
deltaCacheSize = 256m
packSizeLimit = 256m
windowMemory = 1024m
Ces paramètres sont expliqués à la page de manuel git-config .
Mise à jour: Après la mise à jour vers Ubuntu 17.04 avec 2.11.0 et git-svn 1: 2.11.0-2ubuntu0.2, le clone a parfaitement fonctionné.
J'ai trouvé une solution amusante à ce problème lors du débogage à l'aide des scripts Perl:
git svn
dans le débogueur Perl.Démarrez git svn fetch
à l'aide de la commande suivante (vous devrez peut-être modifier les chemins. Cela devrait également fonctionner avec clone). Assurez-vous d’exécuter la commande dans votre répertoire/répertoire git:
Perl -d /usr/lib/git-core/git-svn fetch
Entrez ce qui suit dans le débogueur et appuyez surENTREZ:
b /usr/share/Perl5/Git/SVN/Fetcher.pm:368 $base==undef or $dup==undef
Cela ajoute essentiellement un point d'arrêt conditionnel à la position où j'obtiens le signal 11. Il s'agit de la ligne de code:
[ SVN::TxDelta::apply($base, $dup, undef, $fb->{path}, $fb->{pool}) ];
Ensuite, entrez c
pour continuer l'exécution et appuyez surENTREZ.
Quelqu'un peut-il expliquer pourquoi cela aide?
Edit: Cela a fonctionné: 213000 révisions et 1780 branches clonées dans git!
J'ai eu des exceptions similaires et des messages d'erreur, pour moi un
git gc
et/ou un
git svn gc
ramené le référentiel dans un état utilisable. Voir aussi https://stackoverflow.com/a/1436386/411846
Les commits sont générés par la commande git svn clone
, précédée d'un r. Le dernier commit produit est celui qui pose problème.
L'exemple suivant montre ce que la commande git svn clone
génère au début du traitement de la révision Subversion 15
en tant que Git commit 373fb1...
:
r15 = 373fb1de430a6b1e89585425f276aae0058c3deb (refs/remotes/svn/trunk)
git svn clone
à l'aide de l'option -r
(révision)Utilisez cette méthode:
git svn clone -r 0:<problematic_revision - 1> <repo URL>
git svn clone -r <problematic_revision - 1>:problematic_revision <repo URL>
git svn clone -r <problematic_revision>:HEAD <repo URL>
En supposant que la révision 15
soit celle qui pose problème et que le référentiel soit dans /tmp/svn/repo/
, la solution serait la suivante:
git svn clone -r 0:14 file:///tmp/svn/repo/
git svn clone -r 14:15 file:///tmp/svn/repo/
git svn clone -r 15:HEAD file:///tmp/svn/repo/
Pour moi, la seule solution qui fonctionnait utilisait une ancienne version de Git .J'ai utilisé le paquet portable de Git 1.8.3 qui peut être téléchargé ici:
https://github.com/msysgit/msysgit/releases/tag/Git-1.8.3-preview20130601
avec elle, il n’était pas nécessaire d’éditer les modifications .git/config, les extractions fractionnées ou les instructions de débogage Perl.
Updated - Le problème persiste après git gc pour moi. J'ai essayé toutes les versions de Windows Git (32 et 64 bits), mais j'ai quand même eu cette erreur. Ensuite, je suis passé à utiliser git sur linux et cela fonctionne très bien pour moi, même pour les commits extrêmement volumineux. Je recommande de passer à Linux, sinon vous n'avez aucune chance, car le problème soulevé ici - https://github.com/git-for-windows/git/issues/274 a presque 6 mois.
Updated - Pour ajouter à la réponse de centic, le git gc
fonctionne uniquement pour Git 32 bits sous Windows, pour ce problème particulier.
Je pense que le problème existe pour git 64 bits pour Windows. J'avais le même problème avec git 64 bits, mais après le passage à git 2.7.2 Windows 32 bits, les problèmes semblent être résolus pour moi.
Voici le problème que j'ai:
Informations de trace de Perl -d /usr/lib/git-core/git-svn fetch
:
Signal SEGV at /usr/local/share/Perl/5.22.1/Git/SVN/Fetcher.pm line 368
Git::SVN::Fetcher::apply_textdelta(Git::SVN::Fetcher=HASH(0x20ee160), HASH(0x2488a40), undef, _p_apr_pool_t=SCALAR(0x2488bf0)) called at /usr/lib/x86_64-linux-gnu/Perl5/5.22/SVN/Ra.pm line 623
SVN::Ra::Reporter::AUTOLOAD(SVN::Ra::Reporter=ARRAY(0x8d0fa0), SVN::Pool=REF(0x20ee910)) called at /usr/local/share/Perl/5.22.1/Git/SVN/Ra.pm line 308
Git::SVN::Ra::gs_do_update(Git::SVN::Ra=HASH(0x20df170), 42560, 42560, Git::SVN=HASH(0x20dea08), Git::SVN::Fetcher=HASH(0x20ee160)) called at /usr/local/share/Perl/5.22.1/Git/SVN.pm line 1205
Git::SVN::do_fetch(Git::SVN=HASH(0x20dea08), HASH(0x20ee1d8), 42560) called at /usr/local/share/Perl/5.22.1/Git/SVN/Ra.pm line 471
Git::SVN::Ra::gs_fetch_loop_common(Git::SVN::Ra=HASH(0x20df170), 42500, 95400, ARRAY(0x1637c08), ARRAY(0x1637c20)) called at /usr/local/share/Perl/5.22.1/Git/SVN.pm line 179
Git::SVN::fetch_all("svn", HASH(0x20dee28)) called at /usr/lib/git-core/git-svn line 570
main::cmd_fetch() called at /usr/lib/git-core/git-svn line 386
eval {...} called at /usr/lib/git-core/git-svn line 384
Aborted (core dumped)
J'ai finalement résolu ce problème en procédant comme suit (ceci concerne les utilisateurs Ubuntu Linux 16.04):
Sudo apt build-dep Subversion
Sudo apt install libneon27-dev
Sudo cpan SVN::Core
Ensuite, je peux utiliser git svn fetch/clone
sans aucun crash.
La cause première de ce problème est que le script de bibliothèque SVN :: Core de Perl ne correspond pas aux fichiers binaires installés dans Perl (des fichiers binaires Subversion distincts sont installés dans Perl à côté des systèmes installés).
Attention, cela rétrogradera la version svn de votre git-svn à la version 1.8.11 (avant la version 1.9.3), et pourrait causer d'autres problèmes.
J'ai pu vérifier correctement le dépôt svn en utilisant Cygwin .
Je recevais toutes sortes d'erreurs avec git-svn: le script Perl mourrait à différents endroits, les extractions en mémoire seraient cassées ou le serveur interromprait la connexion. C’était un énorme dépôt qui prenait des dizaines de Go lorsqu’il était extrait via svn.
Ce qui a résolu cela pour moi était simplement d’utiliser SmartGit au lieu de git-svn. Il nécessitait Java 8, était extrêmement rapide et ne signalait aucune erreur, complétant de manière transparente en quelques heures la tâche qui prenait plusieurs jours.
Je peux reproduire ce problème à chaque fois et git svn fonctionne parfaitement
version 1.9.5
Vous pouvez l’installer à partir de Git-1.9.5-preview20141217.exe à partir de
https://github.com/msysgit/msysgit/releases/tag/Git-1.9.5-preview20141217
Je me demande si quelqu'un peut vérifier la différence entre l'ancienne version 1.9.5 et la version actuelle (après avoir passé de msysgit à ici)
Il est difficile d’utiliser l’ancienne version pour git, simplement parce que git svn ne peut pas fonctionner correctement dans la nouvelle version.
Dans mon cas, je n'étais pas connecté à notre VPN, ce qui est nécessaire pour notre connexion svn. C'est mon erreur
Exception: STATUS_ACCESS_VIOLATION at rip=00000000000
rax=0000000000000000 rbx=00000006010BBDA8 rcx=00000006010BBDA8
rdx=00000006010C40E8 rsi=0000000000000011 rdi=0000000000000000
r8 =0000000000000000 r9 =00000006010EBCA8 r10=0000000100000000
r11=000000049F2423C9 r12=00000000FFFFC190 r13=00000000FFFFC198
r14=00000006010B2DF8 r15=00000006010B2D68
rbp=00000000FFFFC1A8 rsp=00000000FFFFC138
program=C:\Program Files\Git\usr\bin\Perl.exe, pid 7884, thread main
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame Function Args
End of stack trace
dans mon cas, cette erreur s'est produite sous Ubuntu 16.04 et la version est git-svn version 2.17.0 (svn 1.9.3) après avoir exécuté la commande git svn --version
, je passe sur mon MacOS dont les informations de version sont git- svn version 2.17.0 (svn 1.7.20) après avoir exécuté la commande git svn --version
, puis être revenu à ubuntu après la réussite du clonage et de l'extraction et d'autres opérations sous MacOS.
Dans mon cas, cette erreur est survenue avec un grand référentiel. Donc, essayez de cloner le sous-dossier si possible.