63 votes

Empêcher les changements locaux d'être poussés dans Git

J'ai cloné un référentiel et l' master de la branche dans mon repo est suivi origin/master. J'ai créé un work de la branche et modifié des fichiers de configuration spécifiques à ma machine de dev à faire ce que l'application fonctionne.

Mon flux normal sera de passer à master de la branche, de fusionner les modifications apportées en work la branche et de l' push ces modifications en amont. Le problème est que je ne veux pas que mon spécifiques chnages pour obtenir poussé. Quand je fusionne mon work de la branche en master ces changements sont fusionnées.

La seule solution que j'ai trouvé pour l'instant est de ne pas commettre ces changements en work mais ce n'est pas une solution satisfaisante.

82voto

Mauricio Scheffer Points 70470

Si vous souhaitez empêcher la validation (et donc le transfert) de ces fichiers de configuration locaux, vous pouvez utiliser git update-index --assume-unchanged . Les fichiers marqués avec ce drapeau seront supposés ne jamais changer (jusqu'à ce que vous réinitialisiez le drapeau avec --no-assum-unchanged)

8voto

Waleed Al-Balooshi Points 4742

Si les fichiers ne font pas déjà l'objet d'un suivi, vous pouvez les ajouter à un fichier .gitignore dans votre référentiel local. Dans le cas contraire, vous devrez utiliser git update-index --assume-unchanged comme indiqué par Mauricio.

Voici plus d’informations sur les fichiers .gitignore:

http://git-scm.com/docs/gitignore

6voto

Greg Hewgill Points 356191

Une façon de résoudre ce problème consiste à "sélectionner" chaque changement de votre branche de travail dans le maître avant de pousser en amont. J'ai utilisé une technique qui consiste à inclure un mot tel que NOCOMMIT dans le message de validation pour les modifications locales uniquement, puis à utiliser un script shell de la manière suivante:

 #!/bin/sh

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2`
if [ $BRANCH != "master" ]; then
  echo "$0: Current branch is not master"
  exit 1
fi

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick
 

Cette sélection sélectionne chaque modification non marquée avec NOCOMMIT (ou DEBUG) dans la branche principale.

1voto

Finau Points 40

Ce que vous avez besoin est un .gitignore fichier et ajoutez tous vos fichiers de configuration à l'intérieur de l' .gitignore fichier.

Une fois que votre .gitignore fichier est prêt, vous pourriez avoir besoin de supprimer vos fichiers de configuration à partir du Cache

Voici la commande:

(Supposons que vous utilisiez linux) vi .gitignore //Ajouter tous vos fichiers de configuration à l'intérieur de

//exécuter la commande suivante pour supprimer votre fichier de configuration de GIT cache si vos fichiers de configuration est déjà suivi par GIT

git rm --cached myconfig.php

J'espère que ça aidera quelqu'un là-bas :)

fkaufusi

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