SubGit (vs Blue Screen of Death)
subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo
C'est tout.
+ Pour mettre à jour depuis SVN, un référentiel Git créé par la première commande.
subgit import directory/path/Local.git.Repo
J'ai utilisé un moyen de migrer instantanément vers Git pour un énorme référentiel.
Bien sûr, vous avez besoin d'une préparation.
Mais vous ne pouvez pas du tout arrêter le processus de développement.
Voici ma voie.
Ma solution ressemble à:
- Migrer SVN vers un référentiel Git
- Mettez à jour le référentiel Git juste avant le passage de l'équipe à .
La migration prend beaucoup de temps pour un grand référentiel SVN.
Mais mise à jour de la migration terminée en quelques secondes.
Bien sûr, j'utilise SubGit , maman. git-svn me fait Blue Screen of Death . Juste constamment. Et git-svn m'ennuie avec l' erreur fatale " Nom de fichier trop long " de Git .
PAS
1. Téléchargez SubGit
2. Préparez les commandes de migration et de mise à jour.
Disons que nous le faisons pour Windows (c'est trivial de porter sur Linux).
Dans l'installation d'un SubGit répertoire bin d' (subgit-2.XX \ bin), créez deux fichiers .bat.
Contenu d'un fichier / commande pour la migration:
start subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo
La commande "start" est ici facultative (Windows). Cela permettra de voir les erreurs au démarrage et de laisser un shell ouvert après la fin du SubGit.
Vous pouvez ajouter ici des paramètres supplémentaires similaires à git-svn . J'utilise uniquement --default-domain myCompanyDomain.com pour corriger le domaine de l'adresse e-mail des auteurs SVN.
J'ai la structure du référentiel SVN standard (tronc / branches / balises) et nous n'avons eu aucun problème avec la "cartographie des auteurs". Alors je ne fais plus rien.
(Si vous souhaitez migrer des balises comme des branches ou votre SVN a plusieurs dossiers de branches / balises, vous pouvez envisager d'utiliser l' approche SubGit plus verbeuse )
Astuce 1 : Utilisez --minimal-revision YourSvnRevNumber pour voir rapidement comment les choses se résument (une sorte de débogage). Il est particulièrement utile de voir les noms d'auteur ou les e-mails résolus.
Ou pour limiter la profondeur de l'historique de migration.
Astuce 2 : la migration peut être interrompue ( Ctrl+C ) et restaurée par l'exécution de la prochaine commande / fichier de mise à jour.
Je ne conseille pas de faire cela pour les grands référentiels. J'ai reçu "Exception de mémoire Java + Windows insuffisante".
Astuce 3 : Mieux vaut créer une copie de votre référentiel nu.
Contenu d'un fichier / commande de mise à jour:
start subgit import directory/path/Local.git.Repo
Vous pouvez l'exécuter autant de fois que vous le souhaitez pour obtenir les validations de la dernière équipe dans votre référentiel Git.
Attention! Ne touchez pas votre dépôt nu (création de branches par exemple).
Vous prendrez la prochaine erreur fatale:
Erreur irrécupérable: ne sont pas synchronisés et ne peuvent pas être synchronisés ... Traduction des révisions Subversion en Git commits ...
3. Exécutez la première commande / fichier. Cela prendra beaucoup de temps pour un grand référentiel. 30 heures pour mon humble dépôt.
C'est tout.
Vous pouvez mettre à jour votre référentiel Git à partir de SVN à tout moment et à tout moment en exécutant le deuxième fichier / commande. Et avant de passer de votre équipe de développement à Git.
Cela ne prendra que quelques secondes.
Il y a encore une tâche utile.
Poussez votre référentiel Git local vers un référentiel Git distant
Est-ce votre cas? Continuons.
- Configurez vos télécommandes
Courir:
$ git remote add origin url://your/repo.git
- Préparez-vous à l'envoi initial de votre énorme référentiel Git local vers un référentiel distant
Par défaut, votre Git ne peut pas envoyer de gros morceaux.
fatal: l'extrémité distante a raccroché de façon inattendue
Courons pour lui:
git config --global http.postBuffer 1073741824
524288000 - 500 Mo 1073741824 - 1 Go, etc.
Corrigez vos problèmes de certificat local . Si votre git-server utilise un certificat cassé.
J'ai désactivé les certificats .
Votre serveur Git peut également avoir des limitations de quantité de demande devant être corrigées .
- Poussez toute la migration vers le référentiel Git distant de l'équipe.
Exécutez avec un Git local:
git push origin --mirror
( git push origin '*: *' pour les anciennes versions de Git)
Si vous obtenez ce qui suit: erreur: ne peut pas générer git: aucun fichier ou répertoire ... Pour moi, la recréation complète de mon référentiel résout cette erreur (30 heures). Vous pouvez essayer les commandes suivantes
git push origin --all
git push origin --tags
Ou essayez de réinstaller Git ( inutile pour moi ). Ou vous pouvez créer des branches à partir de tous vos tags et les pousser. Ou, ou, ou ...