web-dev-qa-db-fra.com

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

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

Par exemple, le site sur lequel je travaille autorise les téléchargements. Je veux suivre le répertoire des téléchargements afin qu'il soit créé lors de la création de branches, etc. mais évidemment pas les fichiers qu'il contient (fichiers de test pendant le développement de la branche ou les vrais fichiers en master).

Dans mon .gitignore, j'ai les éléments suivants:

télécharge /*.*

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

téléchargements /

Ce répertoire peut également contenir des sous-répertoires (uploads/thumbs/uploads/videos /) Je voudrais pouvoir suivre ces derniers mais pas leurs fichiers.

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

67
Ben

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

upload/*

Tu peux le faire:

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

Si vous oubliez le -f tu verras:

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

Ensuite, lorsque vous faites git status tu verras:

 # Sur le maître de succursale 
 # 
 # Validation initiale 
 # 
 # Modifications à valider: 
 # (Utiliser "git rm --cached ... "to unstage) 
 # 
 # nouveau fichier: upload/.placeholder 
 # 

Évidemment, vous pouvez alors faire:

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder
92
Peter Farmer

J'ai écrit à ce sujet ici .

Ajoutez un .gitignore dans le répertoire.

37
Abizern

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

# Ignore everything in this directory
*
# Except this file
!.gitignore

Ici, vous avez Comment puis-je ajouter un répertoire vide à un référentiel Git?

16
Gonzalo Cao

La meilleure solution à ce jour:

1) Créez un fichier . Gitignore

2) Écrivez à l'intérieur:

*
*/
!.gitignore

3) Ajoutez le fichier .gitignore dans le dossier souhaité.

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

12
mejiamanuel57

Afin de 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 uniquement par git, j'ai pu conserver tous les répertoires à l'exception des fichiers comme décrit ci-dessous.

# exclude everything in every folder
/data/**/*.*

# include only .gitkeep files
!/data/**/*.gitkeep

L'ajouter au fichier .gitignore fera le travail. Voici ma structure de dossiers.

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.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   data/processed/.gitkeep
        new file:   data/raw/.gitkeep
        new file:   data/test/.gitkeep
        new file:   data/test/subfolder/.gitkeep

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

La barre oblique en attente ne recherche que le répertoire racine.

/ dir

Le double astérisque recherche zéro ou plusieurs répertoires.

/ ** /

2
metinsenturk