git: synchronisation Local repo avec remote one

j'ai des dépôts git locaux et distants. Je veux synchroniser mon dépôt local avec dépôt distant pour que mon dépôt local devient 100% copie de dépôt distant. Ce qui signifie que si certains fichiers sont différents dans ces repos nous remplacer locaux avec télécommande. Et s'il y a des fichiers dans les repos locaux qui n'existent pas dans les repos à distance, les fichiers locaux sont supprimés.

Est-il un moyen autre que de faire une nouvelle clone de distance repo?

la même question Sync repo git local avec télécommande d'un seul coup de jeter les modifications locales/s'engage .

191
demandé sur Community 2011-06-16 18:10:06

8 réponses

git fetch --prune

- p, --prune

Après la récupération, supprimez toutes les branches de suivi à distance qui n'existent plus sur la télécommande. prune "options de 151960920"

227
répondu jobwat 2017-11-04 05:31:19

vous devez comprendre qu'un dépôt Git n'est pas seulement un arbre de répertoires et de fichiers, mais conserve aussi une histoire de ces arbres - qui peuvent contenir des branches et des fusions.

lors de la récupération d'un dépôt, vous copiez la totalité ou une partie des branches qui s'y trouvent dans votre dépôt. Ceux-ci sont alors dans votre dépôt en tant que "branches de suivi à distance", par exemple les branches nommées comme remotes/origin/master ou tel.

recherche de nouvelles propagations à partir de la télécommande le dépôt ne changera rien à votre copie de travail locale.

votre copie de travail a normalement une propagation vérifiée, appelée HEAD . Ce commit est généralement la pointe d'une de vos branches locales.

je pense que vous voulez mettre à jour votre branche locale (ou peut-être toutes les branches locales?) à la branche distante correspondante, puis vérifier la dernière branche.

pour éviter tout conflit avec votre copie de travail (qui pourrait avoir des modifications locales), vous nettoyez d'abord tout ce qui n'est pas versionné (en utilisant git clean ). Puis vous découvrez la section locale correspondant à la distance que vous souhaitez mettre à jour et d'utilisation git reset pour passer à la prochaine branche distante. ( git pull incorporera toutes les mises à jour de la branche distante dans votre locale, qui pourrait faire la même chose, ou créer une commit de fusion si vous avez des commits locaux.)

(mais alors vous perdrez vraiment tous les changements locaux - à la fois dans la copie de travail locale et s'engage. Assurez-vous que vous voulez vraiment cela - sinon mieux utiliser une nouvelle branche, il enregistre vos modifications locales. Et utilisez git stash pour enregistrer les changements qui ne sont pas encore engagés.)


modifier: Si vous avez une seule branche locale et sont suivi une branche distante, tout ce que vous devez faire est de

git pull

de l'intérieur du répertoire de travail.

This récupérera la version actuelle de toutes les branches distantes suivies et mettra à jour la branche actuelle (et le répertoire de travail) à la version actuelle de la branche distante qu'elle suit.

85
répondu Paŭlo Ebermann 2011-06-17 13:53:46

Ces étapes permettra de le faire:

git reset --hard HEAD
git clean -f -x -d -n

puis sans -n

cela s'occupera de tous les changements locaux. Maintenant le commet...

git status

et noter la ligne telle que:

Your branch is ahead of 'xxxx' by N commits.

prendre note du numéro "N" maintenant:

git reset --hard HEAD~N
git pull

et enfin:

git status

ne doit rien montrer à ajouter/commettre. Toutes les opérations de nettoyage.

cependant, un clone frais peut faire la même chose (mais est très lent).

===mise à Jour===

comme ma connaissance de git légèrement améliorée au fil du temps, je suis venu avec encore une autre façon plus simple de faire la même chose. Voici comment (#avec explication). Dans votre branche de travail:

git fetch # This updates 'remote' portion of local repo. 
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.

bien que votre commits local et les changements disparaîtront de la vue après cela, il est possible de récupérer les changements engagés, si nécessaire.

85
répondu FractalSpace 2015-05-13 16:39:45

Vous voulez faire

git fetch origin
git reset --hard origin/master
git clean -f -d

cela rend votre repo local exactement comme votre repo à distance.

n'oubliez pas de remplacer origin et master par la télécommande et la branche que vous voulez synchroniser.

47
répondu aandis 2014-05-23 18:14:20

sonne comme si vous vouliez un miroir du dépôt distant:

git clone --mirror url://to/remote.git local.git

Cette commande crée un dépôt nu. Si vous ne voulez pas un dépôt nu, les choses deviennent plus compliquées.

3
répondu Richard Hansen 2011-06-17 05:50:15

(Cette info est à partir de Le Git Manuel de l'Utilisateur )

j'apprends aussi, donc ce n'est peut-être pas exactement une réponse à la question, mais ça pourrait aider quelqu'un:

  1. lorsqu'un dépôt distant est initialement cloné, des copies de toutes les branches sont stockées dans votre dépôt local (regardez-les avec git branch -r )
  2. pour mettre à jour ces copies et les mettre à jour (c'est-à-dire les synchroniser avec la télécommande branche) utiliser git fetch . Cela n'affectera aucune de vos branches existantes, créées sur mesure.
  3. pour passer outre à votre caisse de branche locale une nouvelle version de la branche sur laquelle vous travaillez (en supposant que vous avez déjà exécuté git add origin /path/to/repository ) utilisez git checkout origin/branch_name , cela va passer outre vos changements locaux sur la branche branch_name
3
répondu tjb 2012-02-16 10:34:16

si vous parlez de synchroniser un repo Fourché alors vous pouvez suivre ces étapes.

Comment synchroniser une fourchette référentiel git

  1. vérifiez votre branche git actuelle

    git branch

  2. caisse à maîtriser si vous n'êtes pas sur le master

    git checkout master

  3. Extraire le dépôt en amont si vous avez des droits d'accès corrects

    git fetch upstream

  4. si vous obtenez une erreur inférieure, Lancez

    git remote add upstream git@github.com:upstream_clone_repo_url/xyz.git

    fatal: 'upstream/master' does not appear to be a git repository  
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights and the repository exists.
    
  5. exécutez maintenant la commande ci-dessous.

    git fetch upstream

  6. maintenant si vous êtes sur master alors fusionner l'amont / master en master branche

    git merge upstream/master

    C'est ça!!

    Crosscheck via git remote commande, plus spécifique git remote -v

    si j'ai aussi des droits de commit sur le repo amont, je peux créer une branche locale amont et faire du travail qui ira en amont là.

3
répondu Nishant Upadhyay 2015-03-11 09:49:48

Vous pouvez utiliser git crochets pour que. Il suffit de créer un crochet qui pousse changé à l'autre repo après une mise à jour.

bien sûr, vous pouvez obtenir des conflits de fusion donc vous devez comprendre comment les traiter.

-2
répondu Makis 2011-06-16 14:13:24