web-dev-qa-db-fra.com

Forcer git à ajouter des fichiers dot au référentiel

Comment puis-je ajouter des fichiers commençant par un point (fichiers cachés) dans git repo? Git semble toujours les ignorer.

Quand je tape git add ., fichiers dot dans GIT_DIR sont ajoutés, mais pas à partir de sous-répertoires. D'autre part, git add subdir/.dotfile ne fonctionnera pas.

J'ai essayé git add -f et mettre !.* dans GIT_DIR/.git/info/exclude. Pas de chance.

30
Sergey Kovalev

git add . et git add dir/.dot fonctionne bien pour moi avec les versions 1.6.6.1 et 1.7.0 sans fioritures de Git que j'ai à portée de main en ce moment.

% git --version
git version 1.6.6.1
% git ls-files -o
.baz/baz
.foo
bar/.bar
quuux/quuux
quux
% git add .
% git ls-files -o
% git ls-files 
.baz/baz
.foo
bar/.bar
quuux/quuux
quux

Quelle version de Git utilisez-vous? Vos sous-répertoires sont-ils réellement des sous-modules (qui sont gérés indépendamment)?

Les "fichiers dot" ne sont pas exclus par défaut, mais peut-être qu'un peu de configuration sur votre système, référentiel ou arborescence de travail les a définis de cette façon. S'ils apparaissent dans git ls-files --exclude-standard -oi alors ils sont ignorés et "!. *" est la bonne façon de les "ignorer". Mais pour être efficace, ce modèle doit être au bon endroit. Les ignorés sont traités dans cet ordre:

  • . gitignore du répertoire contenant immédiatement, puis
  • . gitignore du répertoire parent (chaque parent, jusqu'à la racine du référentiel), puis
  • $ GIT_DIR/info/exclude, puis
  • le fichier signalé par git config core.excludesfile (qui pourrait être défini par
    • $ GIT_DIR/config,
    • $ HOME/.gitconfig, ou
    • le fichier de configuration système (essayez GIT_EDITOR=echo git config --system --edit pour obtenir son chemin d'accès)).

Lorsqu'un nom de chemin correspond à un modèle dans un fichier, les fichiers suivants ne sont pas consultés. La dernière correspondance de chaque fichier "gagne". Un modèle dans $ GIT_DIR/info/exclude ne peut jamais remplacer un modèle dans un fichier . Gitignore. Donc, si les fichiers sont ignorés (par git ls-files --exclude-standard -oi) et si "!. *" dans $ GIT_DIR/info/exclude est inefficace, alors vérifiez toutes les .gitignore fichiers pour le coupable.

29
Chris Johnsen

Vous pouvez les ajouter spécifiquement par nom de chemin, par exemple,

git add */.*

ou

find . -name '.[a-z]*' -exec git add '{}' ';'

(Il est bon d'être prudent avec le -name parce que vous ne voulez pas nécessairement récupérer chaque répertoire avec son . entrée.)

Mais de loin la façon la plus simple de le faire est avec git gui. Cliquez simplement sur les fichiers.

15
Norman Ramsey

Fait intéressant sous Windows 10 avec git version 2.12.0.windows.1 fonctionnant sous "Git-Bash", un "git add. *" Échoue également. Les fichiers tels que .classpath et .project etc. ne sont pas ajoutés et ne sont donc pas validés ultérieurement. Mais bon, ce n'est pas la bonne façon de déposer un rapport de bogue.

1
Angel O'Sphere