J'ai besoin de transférer un dépôt complet sur une nouvelle machine non connectée au réseau, de préférence en tant qu'entité de fichier unique. Le paquet git permet git fetch
, git pull
opération de style dans un environnement sneakernet mais semble supposer que vous avez déjà une version de travail de la mise en pension sur la machine de destination.
Quelle est la bonne invocation pour:
- Regroupez toutes les branches du référentiel actuel
- Démarrez le nouveau dépôt sur le répertoire de destination, c'est-à-dire que le commit racine est correctement installé
J'ai envoyé un correctif en amont pour clarifier:
`git clone` can use any bundle created without negative refspecs
(e.g., `new`, but not `old..new`).
If you want to match `git clone --mirror`, which would clone other
refs such as `refs/remotes/*`, use `--all`.
If you want to provide the same set of refs that a clone directly
from the source repository would get, use `--branches --tags` for
the `<git-rev-list-args>`.
Donc, le $ git bundle create repo.bundle --branches --tags
meilleur correspond au clonage.
$ git bundle create repo.bundle --all
fournira une image miroir de votre machine source, y compris ses références distantes.
--all
options ne sont pas dans ma page de manuel pourbundle
(je regarde la version 1.7.6.msysgit.0), ni l'utilisation du fichier .bundle dans la section URL pourclone
. Cela me donne une plus grande confiance pour recommander son utilisation.git bundle create <file> <git-rev-list-args>
. Courirman git-rev-list
(ouman git-log
) vous donnerait--all
. Mais je suis d'accord qu'il devrait être plus visible dans la documentation de la commande bundle.git show-ref
", ce qui n'inclut pas [list] les options de git-rev-list.git-rev-list-args
ainsi que vous sélectionnez les références affichées pargit show-ref
commande.--all
a inclus des branches de suivi à distance pour moi (git 2.1.4). Je pourrais voirrefs/remotes/origin/*
avecgit bundle list-heads bundlefile
ougit ls-remote bundlefile
. Bien que les récupérer à partir du lot soit peu délicat.Clonez d'abord le référentiel et incluez l'
--mirror
option.git clone --mirror [email protected]:path/repo.git
Cela garantit que toutes les succursales distantes sont également des succursales locales prêtes à être regroupées.
Puis cours
git bundle create repo.bundle --all
comme décrit par la réponse de Jakub Narębskila source
Je vous suggère de tarer ou de compresser le dossier .git et de le décompresser simplement dans le nouvel emplacement, puis de le faire
git reset --hard HEAD
. Tout ce qui est requis pour toutes les branches est sous .git et tout ce que vous devez faire est d'ajuster les télécommandes dans le fichier .git / config ou de les supprimer.la source