2010-09-09 7 views
7

J'essaye d'ajouter quelques modèles à mon fichier .gitignore pour ignorer les fichiers * .mode1v3 et * .pbxuser générés par Xcode. Cependant, le nom de mon application contient un espace, les fichiers que je veux ignorer se trouvent dans le répertoire Foo Bar.xcodeproj/. Ajout de variantes de ces modèles ne semblent pas fonctionner:git ignore pour les répertoires avec des espaces sur Mac OS X

*.mode1v3 
Foo Bar.xcodeproj/ 
Foo Bar.xcodeproj/*.mode1v3 
Foo Bar.xcodeproj/username.mode1v3 

Quels devraient être les modèles .gitignore?

Répondre

3

Les espaces AFAIK ne sont pas traités spécialement; ni Pro Git ni gitignore(5) ni fnmatch(3) ne les mentionne. Quoi qu'il en soit le premier motif *.mode1v3 est totalement suffisant; les modèles sans barres obliques sont appliqués à tous les sous-répertoires. Si vous souhaitez ignorer des critères supplémentaires pour un sous-répertoire spécifique, placez simplement un .gitignore dédié dans ce répertoire.

+0

Vous avez raison. J'ai eu un moment de débutant où je m'attendais à ce que les fichiers validés soient ignorés simplement parce qu'ils étaient en .gitignore. Comme ils sont déjà enregistrés, ce n'est pas le cas. Cela m'a éclairci: http://www.gitready.com/beginner/2009/03/06/ignoring-doesnt-remove-a-file.html – pmc255

2

Avez-vous essayé d'échapper des espaces dans le dossier ou les noms de fichiers avec des barres obliques inverses?

*.mode1v3 
Foo\ Bar.xcodeproj/ 
Foo\ Bar.xcodeproj/*.mode1v3 
Foo\ Bar.xcodeproj/username.mode1v3 

De plus, ces fichiers sont-ils déjà suivis par git? De man gitignore:

A gitignore file specifies intentionally untracked files that git should ignore. 
Note that all the gitignore files really concern only files that are not already 
tracked by git; in order to ignore uncommitted changes in already tracked files, 
please refer to the git update-index --assume-unchanged documentation. 

De plus, voici quelques-uns des motifs abordés dans man gitignore:

o If the pattern ends with a slash, it is removed for the purpose of the 
    following description, but it would only find a match with a directory. In 
    other words, foo/ will match a directory foo and paths underneath it, but will 
    not match a regular file or a symbolic link foo (this is consistent with the 
    way how pathspec works in general in git). 

o If the pattern does not contain a slash /, git treats it as a shell glob 
    pattern and checks for a match against the pathname relative to the location of 
    the .gitignore file (relative to the toplevel of the work tree if not from a 
    .gitignore file). 

o Otherwise, git treats the pattern as a shell glob suitable for consumption by 
    fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match 
    a/in the pathname. For example, "Documentation/*.html" matches 
    "Documentation/git.html" but not "Documentation/ppc/ppc.html" or 
    "tools/perf/Documentation/perf.html". 

o A leading slash matches the beginning of the pathname. For example, "/*.c" 
    matches "cat-file.c" but not "mozilla-sha1/sha1.c".