Je voudrais créer une sauvegarde d'un dépôt git que j'utilise pour suivre un référentiel svn (avec git-svn). Puis-je utiliser git push --mirror à cet effet ou est-ce que je perdrais des informations relatives à git-svn quand je devrais restaurer la sauvegarde?Git push --mirror est-il suffisant en tant que sauvegarde du référentiel utilisé avec git-svn?
Répondre
Il est possible que git push
ou git bundle
ne comprennent pas svn metadata. Mais selon git svn
intro, vous pouvez essayer de restaurer ces svn metadata.
(disclaimer: non testé directement)
reconstruction des métadonnées git-svn
Si vous avez copié le dépôt d'ailleurs (par exemple, de repo.utsl.gen.nz
) par l'intermédiaire git-clone
, ou si vous venez de fait sauter loin, alors vous n'aurez pas de métadonnées SVN - juste commits.
Dans ce cas, vous devez reconstruire vos métadonnées SVN, par exemple, pour simplement garder le tronc à jour - git-svn
reconstruira ses métadonnées lorsque vous exécuterez git-svn fetch
.
$ git update-ref refs/remotes/trunk origin/svn/trunk
$ git svn init https://svn.perl.org/parrot/trunk
Using higher level of URL: https://svn.perl.org/parrot/trunk => https://svn.perl.org/parrot
$ git svn fetch
Rebuilding .git/svn/git-svn/.rev_db.d31e2699-5ff4-0310-a27c-f18f2fbe73fe ...
r17220 = 78ad11bf2f61b35e1cb32a978ab546d198be8a2e
r17219 = 605264b06d84670ec402d7a7a21c0016cae3a928
r17218 = a8ceba9c503d2be8e8e69a3df454017322906cf5
...
L'essentiel de se rappeler à la reconstruction
git-svn
métadonnées est de rendre les refs regardent comme ils regarderaient d'une importation fraîche; vous pouvez le faire en utilisantgit update-ref
comme ci-dessus, en copiant des fichiers refs autour de.git/refs/
, ou en utilisantgit pack-refs
puis en éditant.git/packed-refs
.
Pour tester que vous l'avez bien fait, utilisezgit show-ref
- peut-être comparer avec un nouveau clone SVNHEAD
.
Merci pour votre réponse. Le git update-ref me donne le message: "fatal: origin/svn/trunk: pas un SHA1 valide", mais git show-ref liste les refs/remotes/trunk pour le miroir git repo. Puis-je ignorer la mise à jour-réf? – fawick
J'ai eu de meilleurs résultats avec 'git update-ref refs/télécommandes/trunk origin/master' _after_ le' git svn init'. Mais, contrairement à l'exemple ci-dessus, j'avais utilisé 'git svn init' avec les options -t/-b qui définissaient aussi les balises et les branches, donc je devais aussi configurer les références pour chacune des balises. (Obtenu en exécutant 'git show-ref' sur le clone git-svn original.) – seanf