123 votes

git update-index --assume-unchanged sur le répertoire

git 1.7.12

Je veux marquer tous les fichiers ci-dessous un répertoire donné à assumer inchangé.

1) git update-index --assume-unchaged dir/ donne "en Ignorant le chemin."

2) git update-index --assume-unchaged dir/* rapidement en échec parce qu'il va rencontrer les fichiers qui ne sont pas suivis, par conséquent, il donne "fatal: Impossible de marquer un fichier" et se ferme.

3) Essayez de générer une liste de fichiers à la marque. cd dans le répertoire souhaité, puis exécutez git ls-files | tr '\n' ' ' | git update-index --assume-unchanged. Ce qui ne produit pas de message d'erreur, mais il n'a pas réussi à marquer les fichiers. La première partie de la commande, git ls-files | tr '\n' ' ', produit correctement un espace délimité liste de tous les fichiers que je veux souligner. Si je fais un copier-coller de la sortie de cette commande dans la ligne de commande, puis l' git update-index commande fonctionne. Ce n'est pas de travailler avec les tuyaux?

Non, il n'est pas suffisant pour moi pour ajouter dir .gitignore. J'ai besoin de ces fichiers dans le référentiel, mais les modifications non seront prises sur place qui doivent être ignorés, de sorte que les utilisateurs peuvent ne tire.

221voto

twalberg Points 19804

git update-index veut les noms de fichier sur la ligne de commande, pas sur son entrée standard. Après l' cding dans le dossier que vous souhaitez assumer est inchangé, vous pouvez faire ceci:

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

ou

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged

Même si, avec l'un ou l'autre cas, les noms de fichiers avec des espaces sera problématique. Si vous avez cela, vous pouvez utiliser ceci:

git ls-files -z | xargs -0 git update-index --assume-unchanged

Edit: incorporé d'entrée de @MatthewScharley concernant l' git ls-files -z.

31voto

user2661977 Points 81

L' find commande à partir de GNU Findutils a un -exec option qui supprime la plupart des tracas liés à l'utilisation xargs, bien que sa syntaxe est un peu spécial. Il n'est cependant composer parfaitement avec les noms de fichiers avec des espaces.

Cette commande va obtenir git d'assumer tous les fichiers et sous la liste répertoire sont inchangés:

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;

Trouver, à chaque argument après -exec jusqu' ; (que vous avez pour échapper à la peur que votre shell mange) et s'exécute une fois pour chaque fichier trouvé, tout en remplaçant {} (encore une fois, seule cité de sorte que votre shell de ne pas en manger) avec le fichier trouvé son nom.

À l'aide de find's des critères de correspondance (profondeur maximum de récursivité, si le match est un fichier ou un répertoire, si le nom de fichier correspond à une expression) et à l' -exec vous pouvez faire toute sorte de choses puissantes.

Ce n'est pas sûr d'autres implémentations de l' find commande. YMMV.

3voto

Oui,

 git update-index --assume-unchanged
 

fonctionne avec des fichiers uniquement, pas avec des répertoires. Je pense, un des moyens plus rapides:

 cd dir
ls | xargs -l git update-index --assume-unchanged
 

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