211 votes

git pull en gardant les changements locaux

Comment puis-je sans risque de mise à jour (pull) un projet git, en gardant les fichiers spécifiques intacte, même si il y a des changements en amont?

myrepo/config/config.php

Est-il un moyen, même si ce fichier a été modifié sur la télécommande, quand j'ai git pull, tout le reste est mis à jour, mais ce fichier est inchangé (même pas fusionné)?

PS. J'ai besoin de faire ce que je demande car je suis le seul à écrire git à base de déployer des scripts. Je ne peux pas modifier les fichiers de configuration de modèles.

donc, j'ai besoin de la façon d'écrire des scripts de mise à jour à ne pas perdre ce qui a été modifiée localement. Je m'attendais à quelque chose d'aussi simple que:

git assume-remote-unchanged file1
git assume-remote-unchanged file2

ensuite, git pull

379voto

GoZoner Points 15679

Il existe une solution simple basée sur Git Stash. Rangez tout ce que vous avez changé, récupérez toutes les nouveautés, appliquez votre cachette.

 git stash
git pull
git stash pop
 

Sur Stash Pop, il peut y avoir des conflits. Dans le cas que vous décrivez, il y aurait en fait un conflit pour config.php . Mais résoudre le conflit est facile car vous savez que ce que vous mettez dans la réserve est ce que vous voulez. Alors faites ceci:

 git checkout --theirs -- config.php
 

17voto

KurzedMetal Points 4351

Si vous avez un fichier dans votre référentiel qui est supposé être personnalisé par la plupart des extracteurs, renommez-le en quelque chose comme config.php.template et ajoutez config.php à votre .gitignore .

7voto

Mark Longair Points 93104

Mise à jour: c'est littéralement la réponse à la question posée, mais je pense que KurzedMetal la réponse est vraiment ce que vous voulez.

En supposant que:

  1. Vous êtes sur la branche master
  2. En amont de la branche est - master en origin
  3. Vous n'avez pas de modifications non validées

.... vous pourriez faire:

# Do a pull as usual, but don't commit the result:
git pull --no-commit

# Overwrite config/config.php with the version that was there before the merge
# and also stage that version:
git checkout HEAD config/config.php

# Create the commit:
git commit -F .git/MERGE_MSG

Vous pouvez créer un alias pour que si vous avez besoin de le faire souvent. Notez que si vous avez des modifications non validées à l' config/config.php, ce serait de les jeter.

0voto

Thach Mai Points 522

Une façon de le faire:

  • Ajouter le (s) fichier (s) à .gitignore
  • Lorsque vous devez modifier le fichier, ajoutez-le manuellement avec git add --force

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