J'ai créé un référentiel nu pour publier mon référentiel, mais je ne peux pas comprendre comment mettre à jour le référentiel nu avec l'état actuel du référentiel principal.
J'ai créé un référentiel nu pour publier mon référentiel, mais je ne peux pas comprendre comment mettre à jour le référentiel nu avec l'état actuel du référentiel principal.
Réponses:
Si vous souhaitez dupliquer tous les objets du référentiel principal, procédez comme suit dans le référentiel principal:
git push --all <url-of-bare-repo>
Vous pouvez également effectuer une récupération à l'intérieur du dépôt nu:
git fetch <url-of-main-repo>
Vous ne pouvez pas faire un pull, car un pull veut fusionner avec HEAD, ce qu'un repo nu n'a pas.
Vous pouvez les ajouter en tant que télécommandes pour vous éviter de taper à l'avenir:
git remote add <whatever-name> <url-of-other-repo>
Ensuite, vous pouvez simplement faire
git push --all <whatever-name>
ou
git fetch <whatever-name>
selon le repo dans lequel vous vous trouvez. Si <whatever-name>c'est le cas origin, vous pouvez même l'omettre complètement.
Avertissement: je ne suis pas un gourou git. Si je dis quelque chose de mal, j'aimerais être éclairé!
Mise à jour: lisez les commentaires!
git-fetch --allà l'intérieur du référentiel nu, je n'ai pas vu les mises à jour que j'avais apportées au référentiel principal, mais lorsque git push --all <url-of-bare-repo>je les ai poussées à partir du référentiel principal avec, je vois les mises à jour dans git log. Il y a probablement une explication simple à cela - quelqu'un peut-il expliquer?
                    git logne montre pas ces mises à jour dans le dépôt nu. (Ni l'un ni l'autre git log --all, et pas plus qu'un dépôt fonctionnel créé en clonant le dépôt nu - soit via git log --allou simplement en regardant de nouveaux fichiers qui devraient apparaître là-haut). C'est un test assez rapide à voir par vous-même. La plupart du temps, je suis juste curieux de ce que je manque.
                    git fetch -q origin master:masterdans votre dépôt nu local. Cela récupérera les nouveaux éléments de la branche principale de github et mettra à jour votre branche principale locale.
                    master:masterest ce qu'il faut pour faire avancer HEAD vers celui du repo distant. Dans mon cas, à cause d'un problème, je ne pouvais plus me connecter à notre dépôt nu car git manquait. Jusqu'à ce que cela soit résolu, je fais un tunnel inverse et je vais au repo central en utilisant: git fetch ssh://localhost:8765/... master:masteret cela fonctionne comme un charme. Merci!
                    git fetch origin *:*
                    J'ai créé un référentiel à l'aide de la commande suivante
git clone --bare <remote_repo> 
Ensuite, j'ai essayé de mettre à jour le clone nu en utilisant la réponse de Thomas, mais cela n'a pas fonctionné pour moi. Pour mettre à jour le référentiel nu (ce que je pense que Let_Me_Be demandait), j'ai dû créer un référentiel miroir:
git clone --mirror <remote_repo>
Ensuite, je pourrais exécuter la commande suivante dans le référentiel en miroir pour récupérer les mises à jour du référentiel principal:
git fetch --all
Je suis tombé sur cette solution en lisant Mirror a Git Repository By Pulling
[remote "origin"]section, ajoutez fetch = +refs/*:refs/*etmirror = true
                    La seule solution en plus de recréer avec git clone --mirrorest de Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
alors vous pouvez git fetchet vous verrez les mises à jour. La chose étrange est qu'avant cela, même s'il y a un remoteconfiguré, il n'a pas de branches répertoriées dans git branch -a.
git remote updatede faire le travail.
                    --forceet --pruneà la git fetchligne.
                    En supposant:
$ git clone --bare https://github.com/.../foo.git
Récupérer avec:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Remarque: --git-dir=foo.gitn'est pas nécessaire si vous accédez cdd'abord au répertoire.
originn'est pas défini, vous pouvez toujours remplacer la originpièce par le chemin / l'URL de votre référentiel d'origine. par exemple$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
                    Après beaucoup de déconner, j'ai trouvé que cela fonctionnait pour moi.
Une fois que:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
À chaque fois que je souhaite synchroniser:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git  fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
              git config remote.origin.fetch 'refs/heads/*:refs/heads/*') est la clé. Bonne réponse, merci!
                    git config remote.origin.fetch 'refs/heads/*:refs/heads/*'est la réponse. Après avoir appuyé sur cette commande, je peux simplement git fetchet le repo se synchronise avec le distant.
                    Ajoutez le référentiel nu en tant que référentiel distant, puis utilisez git push.
Pour moi, cette combinaison a fonctionné:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
-u paramètre pour fetch était nécessaire, sinon j'obtiens le message d'erreur: "Refusing to fetch dans la branche actuelle refs / heads / master of non-bare repository" (voir aussi https://stackoverflow.com/a/19205680/4807875 )