web-dev-qa-db-fra.com

Mercurial ignore file

J'essaie de faire en sorte que Mercurial ignore un fichier de configuration, mais je n'arrive pas à le faire fonctionner.

J'ai créé un référentiel sur mon serveur avec hg init et cloné ce référentiel sur mon ordinateur. Je veux ensuite pouvoir modifier le fichier configurationj mais ne pas valider ces modifications sur le serveur.

J'ai essayé de créer un .hgignore à la racine de mon clone, mais Mercurial marque le fichier avec un ? et que je le valide ou non, il continue d'enregistrer mes modifications de configuration.

Suis-je en train de créer le .hgignore fichier au mauvais endroit, ce fichier doit-il être validé? Doit-il être créé avant de lancer le référentiel sur le serveur?

65
Tom
  • .hgignore n'a pas besoin d'être créé avant init
  • Si le fichier de configuration sera utilisé par d'autres, vous feriez mieux de valider le .hgignore pour que les autres n'aient pas à le créer, mais cela n'est pas nécessaire pour que Mercurial ignore vos fichiers locaux (voir l'exemple)
  • Oui .hgignore doit être dans le répertoire racine

Exemple simple.

Initiez le dépôt:

$ mkdir test 
$ cd test 
$ hg init 

Créer un fichier

$ touch foo 
$ hg st 
? foo 

Créez maintenant un .hgignore, dans le répertoire racine de votre dépôt:

$ echo 'foo' > .hgignore 

foo est maintenant ignoré:

$ hg st 
? .hgignore 

Notez que .hgignore n'a pas besoin d'être validé pour que cela fonctionne.

Un peu plus compliqué

Si le fichier de configuration et un .hgignore (ignorant le fichier de configuration) sont validés dans le référentiel, alors oui, les modifications du fichier de configuration seront suivies (en d'autres termes, .hgignore n'aura aucun effet)

Créer une configuration et la valider

$ touch config
$ hg ci config -Am 'adding conf'

Ignorez-le:

$ echo 'config' >> .hgignore

Validez .hgignore:

$ hg ci .hgignore -Am '.hgignore'

Ensuite, si vous clonez le référentiel:

$ cd ..
$ hg clone test other-user
$ cd other-user

et modifiez la configuration:

$ echo 'new config param' >> config

alors hg montrera les changements:

$ hg st
M config

Comment y faire face?

Vous voulez probablement avoir un fichier de configuration par défaut principal, qui est versionné, dans le référentiel, global.cfg

Et vous demanderez aux utilisateurs de créer un local.cfg où ils mettront leurs paramètres locaux. Et votre script source le local.cfg si présent: les paramètres locaux remplacent les paramètres globaux. Bien sûr, ajoutez une ligne à .hgignore ignorer local.cfg;)

Alternative: pas de fichier de configuration global, seulement un config.example que les utilisateurs copient et modifient localement. Le problème ici est que vous ne suivrez pas facilement les changements entre les versions.

69
Nicolas Dumazet

Même si vous avez ignoré les fichiers, Mercurial les suivra une fois qu'ils auront été ajoutés au référentiel.

Pour supprimer votre fichier de configuration du référentiel, vous pouvez utiliser

hg remove -Af file.cfg

Cela supprimera le fichier du référentiel (une fois validé) sans supprimer votre fichier local. Voir hg help remove Cependant, il y a maintenant une suppression enregistrée dans le dépôt, et Mercurial supprimera ce fichier lorsque votre ou quelqu'un d'autre mettra à jour cette révision.

Vous pouvez également le renommer et demander aux utilisateurs de copier le masque dans leur fichier local, mais vous devrez coordonner les mises à jour du fichier local.

hg rename file.cfg file.cfg.example
29
Justin Love

Ajoutez le fichier .hgignore lui-même au fichier .hgignore:

syntax: glob

.hgignore

ou, vérifiez simplement le fichier .hgignore dans votre clone local ...

15
John Weldon