107 votes

Comment suivre les répertoires mais pas leurs fichiers avec Git ?

Je viens de commencer à utiliser Git récemment et j'ai des problèmes avec une seule chose. Comment puis-je suivre les répertoires sans suivre leur contenu?

Par exemple, le site sur lequel je travaille autorise les téléversements. Je veux suivre le répertoire de téléversements afin qu'il soit créé lors du branchement, etc. mais évidemment pas les fichiers à l'intérieur (fichiers de test en mode développement ou les vrais fichiers en mode principal).

Dans mon fichier .gitignore, j'ai ce qui suit:

uploads/\*.\*

J'ai aussi essayé (ce qui ignore tout le répertoire):

uploads/

Ce répertoire peut également contenir des sous-répertoires (uploads/thumbs/ uploads/videos/) que j'aimerais pouvoir suivre mais pas leurs fichiers.

Est-ce possible avec Git? J'ai cherché partout sans trouver de réponse.

134voto

Peter Farmer Points 1506

Git ne suit pas les répertoires, il suit les fichiers, donc pour y parvenir vous devez suivre au moins un fichier. Donc en supposant que votre fichier .gitignore ressemble à ceci :

upload/*

Vous pouvez faire ceci :

$ touch upload/.placeholder
$ git add -f upload/.placeholder

Si vous oubliez le -f vous verrez :

$ git add upload/.placeholder
Les chemins suivants sont ignorés par l'un de vos fichiers .gitignore :
upload
Utilisez -f si vous voulez vraiment les ajouter.
fatal: aucun fichier ajouté

Ensuite, lorsque vous faites git status, vous verrez :

\# Sur la branche master
#
# Commit initial
#
# Modifications à valider:
#   (utilisez "git rm --cached ..." pour désindexer)
#
#   nouveau fichier:   upload/.placeholder
#

Évidemment, vous pouvez ensuite faire :

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder

53voto

gonzalo.cao Points 161

La meilleure réponse que j'ai trouvée est d'inclure un fichier .gitignore dans votre dossier de téléchargement avec ce contenu

# Ignorer tout dans ce répertoire
*
# Sauf ce fichier
!.gitignore

Ici, vous avez Comment puis-je ajouter un répertoire vide à un dépôt Git ?

40voto

Abizern Points 52378

J'ai écrit à ce sujet ici.

Ajoutez un fichier .gitignore dans le répertoire.

18voto

mejiamanuel57 Points 2149

La meilleure solution jusqu'à présent:

1) Créer un fichier .gitignore

2) Écrire à l'intérieur:

*
*/
!.gitignore

3) Ajouter le fichier .gitignore au dossier que vous voulez.

Source: https://stackoverflow.com/a/5581995/2958543

10voto

metinsenturk Points 301

Pour suivre uniquement les répertoires mais pas les fichiers, j'ai fait ce qui suit. Grâce au commentaire de @PeterFarmer sur le suivi des fichiers git seulement, j'ai pu garder tous les répertoires à l'exception des fichiers comme décrit ci-dessous.

# exclure tout dans chaque dossier
/data/**/*.*

# inclure uniquement les fichiers .gitkeep
!/data/**/*.gitkeep

Ajouter ceci au fichier .gitignore fera le travail. Voici ma structure de dossier :

data/
├── processed
│   ├── dataset1.csv
│   └── dataset2.csv
├── raw
│   ├── raw_dataset1.json
└── test
    ├── subfolder
    │   └── dataset2.csv
    └── reviews.csv

Quand je fais git add . && git status, git ne reconnaît que les dossiers, mais pas les fichiers.

Modifications à valider :
  (utilisez "git reset HEAD ..." pour désindexer)

        modifié :   .gitignore
        nouveau fichier :   data/processed/.gitkeep
        nouveau fichier :   data/raw/.gitkeep
        nouveau fichier :   data/test/.gitkeep
        nouveau fichier :   data/test/subfolder/.gitkeep

Gardez à l'esprit ce qui suit pour vos fichiers .gitignore :

L'ajout d'un slash regarde seulement le répertoire racine.

/dir

Deux astérisques cherchent zéro ou plusieurs répertoires.

/**/

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