2013-06-21 3 views
2

J'ai deux branches dans mon dépôt Mercurial avec le même fichier .hgignore: dir/hg ajouter répertoire entier en dépit d'être répertorié dans la .hgignore

Une branche (développement) devrait ignorer ce répertoire, tandis que l'autre (communiqué) devrait pas l'ignorer. Je sais que je peux utiliser hg add dir/somefile malgré l'entrée dans le fichier .hgignore. Mais maintenant je voudrais ajouter le directore entier récursivement.

J'ai cherché pour cela et essayé

hg add dir # does not add anything 
hg add dir* # does not add anything 
hg add dir/ # does not add anything 
hg add dir/* # only adds the files in dir but not in sub-directories 
hg add dir/** # only adds the files in dir but not in sub-directories 

Mais ce STAM fonctionne pas récursive. Je pourrais utiliser add dir/* dir/*/* dir/*/*/* et ainsi de suite, mais c'est ennuyeux. Y a-t-il un autre caractère générique que je devrais utiliser à la place ou peut-être un autre moyen d'accomplir ceci? PS: Je voudrais éviter de changer le .hgignore.

+0

Pourquoi ne pas changer temporairement la '.hgignore' localement, et de revenir après? Vous n'avez pas besoin de le vérifier ... –

Répondre

5

En attendant, j'ai pu trouver-ce qui semble être-une solution:

hg add --dry-run --verbose `hg status --ignored --no-status --exclude **.DS_Store dir/` 

Ceci affiche une liste de fichiers qu'il ajouterait. Si vous voulez vraiment les ajouter, utilisez la commande suivante:

hg add `hg status --ignored --no-status --exclude **.DS_Store dir/` 

Espérons que cela aide quelqu'un.

0

Malheureusement, .hgignore ignorera tout ce qui n'est pas un chemin d'accès complet à un fichier et est respecté même lors de l'évaluation des modèles. Il y a a post on StackExchange qui contient des solutions de rechange que vous pourriez utiliser (en supposant que vous ne vouliez pas changer .hgignore)

+0

J'ai déjà essayé ces ensembles de fichiers, mais je n'ai pas réussi à trouver une solution qui fonctionne. – str

+0

Vous pourriez jeter un oeil à ma propre solution, il semble fonctionner jusqu'à présent. – str

1

Si vous avez accès à find, vous pouvez faire quelque chose comme ce qui suit:

find docs -exec hg add {} \; 

Chaque fois que l'exécution des commandes avec FIND il est toujours agréable de faire une course sèche d'abord, je bâton généralement une echo devant d'abord la commande:

find docs -execechohg add {} \;

Si vous devez ajouter en Si les fichiers de cette performance sont une préoccupation, vous pouvez utiliser + au lieu de \;, qui ajoutera tous les noms de fichiers correspondants à la même commande au lieu d'exécuter la commande une fois pour chaque nom de fichier. Pour hg add cela ne devrait pas être un problème, mais il est important de comprendre comment fonctionne find.

find docs -exec hg add {}+

Questions connexes