git update-index --assume-inchangée dans l'annuaire
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) Essaie de générer une liste de fichiers à la marque. cd
dans le dossier de votre choix, 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 le 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
pour .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.
Vous devez vous connecter pour publier un commentaire.
git update-index
veut les noms de fichier sur la ligne de commande, pas sur son entrée standard.Étape 1:
cd
dans le dossier que vous souhaitez assumer est inchangéÉtape 2:
Vous pouvez faire ceci:
ou
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:
Edit: incorporé d'entrée de @MatthewScharley concernant
git ls-files -z
.Commandes De Windows
tr '\n' '\0'
cas (dans ce cas, il est nécessaire)...git ls-files -z
git ls-files -z | git update-index -z --stdin
est plus propre.La
find
commande à partir de GNU Findutils a un-exec
option qui supprime la plupart des tracas liés à l'utilisationxargs
, 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:
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é, bien que le remplacement de{}
(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-exec
vous pouvez faire toute sorte de choses puissantes.Pas sûr d'autres implémentations de la
find
de commande. YMMV.-exec
est une option standard. Vous pouvez également-exec git update-index --assume-unchanged {} +
(également défini par la norme) qui passe de multiples noms de fichier de la commande à la fois, de réduire le nombre de fois que la commande git est invoquée.Ajouter le nom du répertoire à
.git/info/exclude
. Cela fonctionne pour les sans traces de fichiers.Yeap,
fonctionne avec les fichiers uniquement, pas avec des répertoires.
Je crois que l'une des manières plus rapides:
cd
, vous pouvez passer à la dir comme un dernier argument:git ls-files -- $DIR | xargs -l git update-index --assume-unchanged -- $DIR
.