web-dev-qa-db-fra.com

Mercurial: Comment ignorer les modifications apportées à un fichier de suivi

J'ai un fichier avec les paramètres de la base de données dans mon projet que j'ai défini sur certaines valeurs par défaut. Le fichier est suivi par Mercurial et vérifié. Puisque ce fichier sera édité avec différentes valeurs de différentes machines de développeur, est-ce que je peux dire à Mercurial d'ignorer de nouvelles modifications à ce fichier?

J'ai essayé d'ajouter le fichier au .hgignore Fichier, mais puisque le fichier est suivi, il n'est pas ignoré. C'est bien et bon dans d'autres situations, mais je me demande s'il y a quelque chose que je peux faire ici?

52
Svish

L'utilisation d'un modèle de fichier est définitivement la meilleure solution. Par exemple, si vous avez un database.ini Fichier, commettre un database.ini.template Fichier et ignorer la base de données.ini dans .hgignore

26
yanjost

Si vous voulez toujours ignorer le fichier, vous pouvez ajouter le -X option comme valeur par défaut pour commit à votre .hg/hgrc fichier de configuration:

[defaults]
commit = -X program.conf
27
sth

Nous avons écrit une extension pour cela appelé exclure . Il ajoutera automatiquement le -X options sur les commandes qui les soutiennent - alors hg status et hg commit ne verra pas le fichier modifié. Cela fonctionne en lisant un .hgexclude Dossier de la racine de votre référentiel, comme le .hgignore déposer. Vous ajoutez les fichiers que vous souhaitez exclure là-bas:

syntax: glob
db.conf

L'extension fonctionne assez bien, mais il y a une situation connue où elle échoue: la fusion et le commit qui suit une fusion (ceci est documenté sur le wiki). Il faudrait être amélioré pour que cela permettrait d'enregistrer les modifications à un fichier temporaire, puis de les restaurer ensuite. S'il vous plaît entrer en contact si vous avez besoin de cette fonctionnalité.

12
Martin Geisler

Il n'y a pas de processus vraiment automatisé, mais vous pouvez essayer (comme dans la présente tellement question ) le -X option sur hg commit :

% hg stat
M myfile
% hg commit -X 'myfile'

(D'autres solutions pourraient impliquer SLIVE ou HQ )

Cependant, ce n'est pas la "bonne" solution. Je préférerais recommander la version suivante:

  • un modèle de fichier
  • un script capable de générer le fichier final (que vous modifiez mais peut ignorer complètement)
8
VonC

Si vous utilisez Tortoisehg, ouvrez les paramètres du repo, accédez à la section de validation (2e icône vers le bas à gauche) et ajoutez le nom de fichier à la liste d'exclusion automatique à droite (~ 3ème du bas dans le liste).

À partir de - https://tortoisehg.readthedocs.io/fr/Latest/Settings.html#Commit

4
CAD bloke

Tu peux essayer hg forget. Pour plus de détails, voir le Manuel officiel à propos de la même commande . Cela a fonctionné pour moi.

Je pense que quelque chose comme cela est plus proche d'une réponse correcte à la question originale Mercurial: Comment ignorer les modifications apportées à un fichier de suivi , plutôt que les autres suggérant Un modèle, etc.

2
András

Vous allez généralement vérifier une copie de référence du fichier et la suivre pour que les développeurs effectuent une copie de celle-ci pour le développement local, vous ne souhaiteriez pas vraiment que les développeurs modifient le fichier Source contrôlé pour leurs propres environnements.

Si votre système de configuration le prend en charge, il est encore plus facile si vous pouvez utiliser un fichier de remplacement qui remplace simplement les valeurs de la copie de référence (par exemple, la chaîne de connexion de base de données). De cette façon, Devs ne doit que garder un ensemble local très minimal de valeurs de remplacement.

2
Paolo

Si le fichier est déjà suivi, vous pouvez émettre la commande d'oublier au fichier. Si vous utilisez TortoiseHG, cliquez avec le bouton droit de la souris sur le fichier pendant que Select et sélectionnez Oubliez. Le fichier doit également être déjà dans la liste des ignorés.

J'ai eu le même problème que le vôtre, je dépose sur la figure sur chaque commit, même si c'est déjà dans la liste des ignorés. J'ai essayé la commande oublie et ça fait l'affaire.

1
radztech