1453 votes

.gitignore exclure un dossier mais inclure un sous-dossier spécifique

J'ai le dossier application/ que j'ajoute à la .gitignore . A l'intérieur de la application/ le dossier est le dossier application/language/gr . Comment puis-je inclure ce dossier ?

J'ai essayé ceci

application/
!application/language/gr/

sans succès...

1 votes

Espérons que le " .gitignore La documentation sur le "format de motif" vient d'être clarifiée (décembre 2013). Voir ma réponse ci-dessous

1 votes

Ma question et réponse préférée, ajoutée aux favoris ainsi qu'aux signets du navigateur.

2 votes

3voto

Adrian Dunston Points 2115

Encore un exemple de la nécessité de parcourir la structure des répertoires pour obtenir exactement ce que l'on veut. Note : Je n'ai pas exclu Library/ mais Library/**/*

# .gitignore file
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme

> git add Library

> git status

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
    new file:   Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
    new file:   Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
    new file:   Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
    new file:   Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
    new file:   Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
    new file:   Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings

2voto

Je voulais suivre les fichiers jquery production js et cela a fonctionné :

node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*

2voto

Abhirup Das Points 121

J'utilise souvent cette solution de contournement dans le CLI où, au lieu de configurer mon .gitignore je crée un fichier séparé .include où je définis les (sous-)répertoires que je veux inclure malgré les répertoires directement ou récursivement ignorés par .gitignore .

Ainsi, j'utilise en plus

git add `cat .include`

pendant la mise en scène, avant de s'engager.

Pour le PO, je suggère d'utiliser un .include qui contient ces lignes :

<parent_folder_path>/application/language/gr/*

REMARQUE : L'utilisation de cat n'autorise pas l'utilisation d'alias (dans le cadre de l'option .include ) pour spécifier $HOME (ou tout autre répertoire spécifique). Cela est dû au fait que la ligne homedir/app1/* lorsqu'il est passé à git add en utilisant la commande ci-dessus apparaît comme git add 'homedir/app1/*' et le fait de placer les caractères entre guillemets simples ('') préserve la valeur littérale de chaque caractère entre guillemets, ce qui empêche les alias (tels que homedir ) du fonctionnement (voir Citations de Bash Single ).

Voici un exemple de .include que j'utilise dans mon répertoire aquí .

/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc

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