web-dev-qa-db-fra.com

Comment puis-je dire à Git d'ignorer tout sauf un sous-répertoire?

Je souhaite ignorer tous les fichiers de mon référentiel, à l'exception de ceux figurant dans le sous-répertoire bin. J'ai essayé d'ajouter ce qui suit à mon .gitignore:

*
!bin/*

Cela n'a cependant pas l'effet souhaité: j'ai créé un nouveau fichier à l'intérieur de bin/, Mais faire git status Montre toujours nothing to commit (working directory clean).

Aucune suggestion?

195
Michael Goerz

Ceci ignore les fichiers racine et les répertoires racine, puis annule le répertoire racine bin:

/*
/*/
!/bin/

De cette façon, vous obtenez tout le répertoire bin, y compris les sous-répertoires et leurs fichiers.

258
Tyler Laing

Ici, comment ignorer tout sauf un répertoire "MY_SUPER_DUPER_TEMPLATE_directory" dans certains répertoires

Structure:/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory

/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore
95

Vous devez tout exclure sur le chemin menant aux destinations, mais vous devez inclure les destinations:

Remarque: il s'agit d'un fichier d'exclusion (c'est-à-dire .gitignore), la logique est donc inversée. Ignorer tout, sauf le répertoire tsp, ignorer tout dans le répertoire tsp, sauf le répertoire src ...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
54
nikc

Le seul problème que vous avez est que le répertoire bin lui-même ne correspond pas au répertoire bin/* motif pour que git ne regarde même pas dans le répertoire bin.

Deux solutions nous viennent à l’esprit.

.gitignore:

*
!/bin/
!bin/*

ou

.gitignore:

*
!/bin/

bin/.gitignore:

!*

Je préfère la deuxième solution car la première solution ne cessera pas d'ignorer les fichiers du répertoire bin qui se trouvent dans des sous-répertoires qui ne s'appellent pas bin. Cela peut ou peut ne pas avoir d'importance dans votre situation.

38
CB Bailey

L'officiel git doc , un des exemples dit:

Exemple pour tout exclure sauf un répertoire spécifique foo/bar (notez le/* - sans la barre oblique, le caractère générique exclurait également tout ce qui se trouve dans foo/bar):

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

Pour une explication sur la barre oblique suivante: Quand utiliser la barre oblique principale dans gitignore .

18
solstice333

Essayez de suivre la dernière version de GIT.

*
!*/
!/path/to/your/dir/**
12
Kirby

Je pense qu'un meilleur moyen serait d'ancrer chaque modèle dans le répertoire git en commençant par le slash:

/*
!/public_html
!/.gitignore

Au lieu d'ignorer tous les fichiers, seuls les fichiers de niveau supérieur seront ignorés, pas ceux du répertoire que vous ne souhaitez pas ignorer.

11
Jake

Cette .gitignore travaille pour moi:

*/
/*
!bin/
7
Trianam

essayez cet obscur bug git.

!bin**/**

J'espère que ça aide :)

Documents de support exemple de bogue git

PS: essayez-le avant de commenter.

5
david