405 votes

git : synchroniser repo locale avec une distance

Je suis un git noob donc cela pourrait ressembler à une question stupide.

J'ai locale et à distance dépôts git. 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 si il y a des fichiers dans le local de repos qui n'existent pas dans la distance repo, local les fichiers supprimés.

Est-il un moyen pour atteindre d'autres que de faire une nouvelle clone de distance repo?

511voto

jobwat Points 1213
<pre><code></code><blockquote> <p>-p,--prune<br> Après récupération, supprimer toute branche de suivi à distance qui n’existe plus sur la télécommande.</p> </blockquote></pre>

190voto

FractalSpace Points 739

Ces étapes permettra de le faire:

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

Cela va prendre soin de tous les changements locaux. Maintenant les commits...

git status

et notez la ligne comme:

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

Prenez note du nombre "N" maintenant:

git reset --hard HEAD~N
git pull

et enfin:

git status

devrait montrer rien à ajouter/commit. Toutes les opérations de nettoyage.

Cependant, un nouveau clone peut faire la même chose (mais il est beaucoup plus lent).

===Mise à jour===

Comme mon git connaissances légèrement améliorée au cours du temps, j'ai encore un autre moyen plus simple de faire de même. Voici comment (#avec explication). Alors que dans votre branche:

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 vos modifications locales, et les changements vont disparaître de la vue après cela, il est possible de récupérer commis des modifications, si nécessaire.

159voto

zack Points 324

Vous voulez faire

Ce qui rend votre repo local exactement comme votre repo distant.

N’oubliez pas de remplacer l’origine et le master avec la télécommande et la branche que vous souhaitez synchroniser avec.

100voto

Paŭlo Ebermann Points 35526

Vous devez comprendre qu'un dépôt Git n'est pas seulement une arborescence de répertoires et de fichiers, mais aussi de stocker un historique de ces arbres qui peuvent contenir des branches et les fusions.

Lors de l'extraction à partir d'un référentiel, vous permettra de copier tout ou partie des branches à votre référentiel. Ces derniers sont alors dans votre référentiel "suivi à distance des branches", par exemple les agences nommé comme remotes/origin/master ou tel.

Aller chercher de nouveaux commits sur le dépôt distant ne changera rien au sujet de votre copie de travail locale.

Votre copie de travail a normalement un commit vérifié, appelés HEAD. Cette validation est généralement la pointe de l'une de vos branches locales.

Je pense que vous voulez mettre à jour votre succursale locale (ou peut-être toutes les branches locales?) à la distance correspondante de la branche, et de vérifier ensuite la dernière branche.

Pour éviter tout conflit avec votre copie de travail (qui pourrait avoir des modifications locales), vous devez d'abord nettoyer tout ce qui n'est pas versionné (à l'aide d' 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 intégrera toutes les mises à jour de la branche distante dans votre local, qui pourrait faire la même chose, ou de créer une fusion engager si vous avez locales s'engage.)

(Mais alors, vous allez vraiment perdre tout changement local - à 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 utiliser git stash pour enregistrer les modifications qui ne sont pas encore validées.)


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

git pull

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

Cela permettra de récupérer la version actuelle de tous suivi à distance des branches et de la mise à jour de la branche courante (et le répertoire de travail) à la version actuelle de la branche distante, il est suivi.

5voto

tjb Points 2869

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

Je suis aussi de l'apprentissage, de sorte que cela peut ne pas être exactement la réponse à la question, mais elle peut aider quelqu'un:

  1. Lorsqu'un dépôt distant est initialement clonés des copies de toutes les branches sont stockés dans votre référentiel local (vue avec git branch -r)
  2. Mise à jour de ces copies et de les rendre actuel (c'est à dire les synchroniser avec la branche à distance), utilisez git fetch. Ce ne sera pas pour effet de vous existant, personnalisé créé des branches.
  3. Pour remplacer votre succursale locale commander une nouvelle version de quelle que soit la branche que vous travaillez (en Supposant que vous avez déjà exécuté git add origin /path/to/repository) utilisation git checkout origin/branch_name, cela va remplacer votre les habitants des modifications sur la branche branch_name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X