Ignorer les répertoires dans les référentiels Git sous Windows

1106

Comment ignorer les répertoires ou dossiers dans Git en utilisant msysgit sous Windows?

sf.
la source
Souhaitez-vous que le dossier de cache soit complètement exclu du référentiel, ou seulement son contenu?
Gareth
1
Je suppose que l'OP a plusieurs répertoires de cache, dont le contenu doit être ignoré, mais veut s'assurer que ces répertoires sont créés pour quiconque clone le référentiel.
Mark Longair
@Gareth: puisque les dossiers vides ne sont pas suivis avec git, si le contenu est ignoré, le dossier le sera aussi, n'est-ce pas?
eckes
3
J'ai seulement mentionné cela parce que certaines personnes utilisent des fichiers cachés (généralement .gitkeep) pour indiquer un répertoire qui devrait être conservé
Gareth
2
Est-ce /qu'à la fin ce qui lui fait savoir que c'est un répertoire qu'il devrait ignorer?
Charlie Parker

Réponses:

1595

Créez un fichier nommé .gitignoredans le répertoire de votre projet. Ignorez les répertoires en entrant le nom du répertoire dans le fichier (avec une barre oblique ajoutée):

dir_to_ignore/

Plus d'informations ici .

Ragoût
la source
130
Dans une invite Windows cmd, vous pouvez soit utiliser «modifier .gitignore» ou «bloc-notes .gitignore» pour créer le fichier correct.
Joey Green
44
Ou vous pouvez également utiliser 'touch .gitignore' à partir de l'invite de commande windows git bash et cela créera le fichier correctement nommé qui peut ensuite être édité à son tour par le bloc-notes ou similaire ...
SGB
39
Ou créez simplement un fichier nommé .gitignore. avec l'explorateur et modifiez-le avec le bloc-notes (le point de fin sera supprimé). De cette façon, vous n'avez pas besoin d'utiliser l'invite de commande.
P. Galbraith
6
Ou vous pouvez vim .gitignore depuis le terminal. :)
MollyCat
34
Ou, ce qui, étonnamment, n'a pas été mentionné même si c'est le moyen le plus rapide, il suffit de taper "echo folder_to_ignore >> .gitignore" dans la console.
Godsmith
205

Par défaut, l'Explorateur Windows s'affichera .gitignorealors qu'en fait le nom du fichier est .gitignore.txt.

Git n'utilisera pas .gitignore.txt

Et vous ne pouvez pas renommer le fichier .gitignore, car l'Explorateur Windows pense qu'il s'agit d'un fichier de type gitignore sans nom.

Solution sans ligne de commande:

Vous pouvez renommer un fichier en ".gitignore". , et cela créera ".gitignore"
brainwavedave
la source
46
Ça marche? J'ai toujours dit aux gens d'ouvrir le bloc-notes et dans la boîte de dialogue Enregistrer sous, tapez le nom de fichier entouré de guillemets doubles, donc par exemple ".gitignore"et il l'enregistre sans ajouter automatiquement une extension.
Arrowmaster
9
Soigné. Inclure une période de fin fonctionne. L'Explorateur supprime la dernière période, résultant en un fichier nommé ".gitignore". Je pense que la méthode des devis est plus propre et moins susceptible de créer des surprises.
Triynko
4
Ou, dans la boîte de dialogue Enregistrer sous, changez le type de fichier en "Tous les fichiers ( . )" - puis Windows n'ajoutera aucune extension.
OsakaWebbie
5
ou dans git bash, tapez simplement "touch .gitignore" dans votre dossier
Rayjax
3
".gitignore."- C'est une super astuce! J'ai toujours eu du mal avec .htaccess...
Obmerk Kronen
105

Il semble que pour ignorer les fichiers et les répertoires, il existe deux méthodes principales:

  1. .gitignore

    • Placer le .gitignorefichier dans la racine de votre référentiel en plus du .gitdossier (dans Windows, assurez-vous que vous voyez la véritable extension de fichier , puis faites .gitignore.(avec le point à la fin pour créer une extension de fichier vide))
    • Faire la configuration globale ~/.gitignore_globalet exécuter git config --global core.excludesfile ~/.gitignore_globalpour l'ajouter à votre configuration Git

    Remarque: les fichiers suivis avant peuvent être non suivis en exécutant git rm --cached filename

  2. Exclusion du référentiel - Pour les fichiers locaux qui n'ont pas besoin d'être partagés, il vous suffit d'ajouter le modèle de fichier ou le répertoire au fichier .git/info/exclude. Ces règles ne sont pas validées, elles ne sont donc pas vues par les autres utilisateurs . Plus d'informations ici .

Pour faire des exceptions dans la liste des fichiers ignorés, consultez cette question .

Vairis
la source
36
bon travail en soulignant le git rm --cached <filename>. Absolument critique pour les repos qui existaient AVANT de créer le.gitignore
MaurerPower
2
git rm --cached <nomfichier> a corrigé le problème que j'avais avec .gitignore :)
JeremyFelix
1
Ouais git rm - le nom de fichier caché est absolument crucial. Cela me rendait fou car git était toujours en train de mettre en scène des fichiers que j'ai clairement déclaré ignoré (créé gitignore après la validation initiale). Merci beaucoup!
Potaito
1
Résolu mon problème. Git suivait le dossier du fournisseur dans mon dépôt laravel même si j'avais ajouté un dossier du fournisseur dans gitignore. Merci beaucoup.
Jayant
44

J'ai eu quelques problèmes pour créer un fichier dans l' Explorateur Windows avec un .au début.

Une solution de contournement consistait à entrer dans la commande et à créer un nouveau fichier à l'aide de "modifier".

sf.
la source
2
ou ajoutez simplement un supplément .à la fin pour que l'explorateur cesse de penser à .gitignorel'extension. Ensuite, à l'entrée, ce point de fuite sans extension est simplement mangé et vous vous retrouvez avec .gitignore TL; DR: essayez de le nommer .gitignore.=> vous vous retrouvez avec.gitignore
leerssej
43

Pour demander à Git d'ignorer certains fichiers ou dossiers, vous devez créer un .gitignorefichier.

Mais dans l'Explorateur Windows, vous devez fournir un nom pour le fichier. Vous ne pouvez tout simplement pas créer de fichier avec juste une extension. L'astuce est de créer un fichier texte vide et d'aller à l'invite de commande et de changer le nom du fichier en .gitignore:

ren "New Text Document.txt" .gitignore

Ouvrez maintenant le fichier avec votre éditeur de texte préféré et ajoutez les noms de fichier / dossier que vous souhaitez ignorer. Vous pouvez également utiliser des caractères génériques comme ceci: *.txt.

Mahes
la source
15
Ou tout simplement: echo dir_to_ignore /> .gitignore
Oliver
2
Ou type nul > .gitignorepour créer un fichier vide
Castro Roy
Ou appelez simplement le fichier .gitignore.lorsque les extensions de fichier ne sont pas masquées dans votre explorateur Windows
Vairis
22

Si vous souhaitez conserver un dossier et non les fichiers qu'il contient, placez simplement un fichier ".gitignore" dans le dossier avec "*" comme contenu. Ce fichier obligera Git à ignorer tout le contenu du référentiel. Mais .gitignoresera inclus dans votre référentiel.

$ git add path/to/folder/.gitignore

Si vous ajoutez un dossier vide, vous recevez ce message (.gitignore est un fichier caché)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Donc, utilisez "-f" pour forcer l'ajout:

$ git add path/to/folder/.gitignore -f
sensorario
la source
19

Dans Windows, il y a un hic supplémentaire avec des barres obliques. Exclure un seul répertoire dans .gitignore avec

dir_to_exclude /

fonctionnera éventuellement, mais en excluant tous les répertoires avec

/

provoque des problèmes lorsque vous avez des noms de fichiers avec des espaces (comme my file.txt) dans votre répertoire: Git Bash échappe à ces espaces avec une barre oblique inverse (comme my\ file.txt) et Git pour Windows ne fait pas de distinction entre /et \.

Pour exclure tous les répertoires, mieux utiliser:

** /

Deux astérisques consécutifs indiquent le contenu du répertoire.

millepertuis
la source
15

Toujours dans le \.git\inforépertoire de vos projets, il y a un fichier d'exclusion qui est en fait la même chose que .gitignore(je pense). Vous pouvez ajouter des fichiers et des répertoires à ignorer.

Si3
la source
J'aime cette approche, je ne peux tout simplement pas m'entendre avec le chemin, je veux ignorer un dossier dans le référentiel principal, comment faire?
Shimmy Weitzhandler
Mais n'êtes-vous pas censé laisser les fichiers en .git seuls (manipuler le contenu par des moyens officiels)?
Peter Mortensen
13

Au cas où vous auriez besoin d'exclure des sous-dossiers, vous pouvez utiliser le **caractère générique pour exclure n'importe quel niveau de sous-répertoire.

**/build/output/Debug/
Manger chez Joes
la source
12

Pour ignorer un répertoire entier dans Git, la manière la plus simple est d'inclure un fichier .gitignore dans le répertoire cible qui contient simplement "*".

Un exemple illustratif,

Exemple de système

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Objectif

  • ignorer le contenu de / dirB /

Top Level .gitignore (/root/.gitignore)

  • C'est là que vont vos informations gitignore standard

Répertoire ignoré .gitignore (/root/dirB.gitignore)

  • Ce fichier se lit juste comme '*' et le répertoire est complètement ignoré, lui-même et tous les fichiers!

Et c'est aussi simple que cela :)

J-Dizzle
la source
10

Lorsque tout le reste échoue, essayez de modifier le fichier

/.git/info/exclude

et en ajoutant les répertoires souhaités à la fin du fichier, comme ceci:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

J'ai ajouté les dossiers "assets" et "compiled" à la liste des fichiers et répertoires à ignorer.

Xedret
la source
1
J'utilise Atom sur Windows 10. Ça marche! Merci mec!
Putu De
J'ai essayé tous les autres avec ma configuration actuelle et c'était ma réponse définitive ultime.
Xedret
10

Vous pouvez créer le fichier ".gitignore" avec le contenu:

*
!.gitignore

Ça marche pour moi.

Claudionor Oliveira
la source
2
C'est la meilleure réponse, elle apporte également des avantages supplémentaires dans le déploiement et la maintenance de projets.
Nitin ...
Qui est "simple" ?
Peter Mortensen
9

Sous Unix:

touch .gitignore

Sous Windows:

echo > .gitignore

Ces commandes exécutées dans un terminal créeront un .gitignorefichier à l'emplacement actuel.

Ajoutez ensuite des informations à ce .gitignorefichier (en utilisant Notepad ++ par exemple) quels fichiers ou dossiers doivent être ignorés. Enregistrez vos modifications. C'est ça :)

Plus d'informations: .gitignore

fvolodimir
la source
8

J'ai rencontré des problèmes pour que Git récupère le .gitignorefichier sous Windows. Le $GIT_DIR/info/excludefichier semble toujours fonctionner bien.

L'inconvénient de cette approche, cependant, est que les fichiers du $GIT_DIRrépertoire ne sont pas inclus dans l'archivage et ne sont donc pas partagés.

ps $GIT_DIRest généralement le dossier caché nommé.git

Jason
la source
Oui, git sur Windows est vraiment capricieux à propos de .gitignore - le fichier d'exclusion local fait cependant ce dont j'ai besoin. Merci!
andersop
6

Je suppose que le problème est que votre arbre de travail est comme:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... avec le que .gitignorevous décrivez. Cela vous donnera une git statussortie comme:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... si les index.htmlfichiers n'ont pas encore été ajoutés au référentiel. (Git voit qu'il y a des fichiers non ignorés dans les répertoires de cache, mais il ne signale que les répertoires.) Pour résoudre ce problème, assurez-vous d'avoir ajouté et validé les index.htmlfichiers:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... et votre git statustestament ressemblera alors à:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Évidemment, vous voulez vous engager .gitignoreégalement. J'étais juste paresseux avec ce cas de test.)

Mark Longair
la source
1
Vous avez probablement ne voulez engager .gitignore d' autant plus que vous êtes susceptibles de vouloir suivre des modifications, et est donc votre équipe (si vous travaillez avec un). Voir stackoverflow.com/a/767213/123033
Dave Everitt
2
@Dave Everitt: C'est exactement la raison pour laquelle j'ai dit "Evidemment, vous voulez aussi engager .gitignore".
Mark Longair
6

Sous Windows et Mac, si vous souhaitez ignorer un dossier nommé Flower_Data_Folder dans le répertoire en cours, vous pouvez faire:

echo Flower_Data_Folder >> .gitignore

S'il s'agit d'un fichier nommé data.txt:

echo data.txt >> .gitignore

Si c'est un chemin comme "Data / passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 
Olusola Omosola
la source
2

J'ai eu des problèmes similaires. Je travaille sur une chaîne d'outils Windows avec un référentiel partagé avec des gars de Linux, et ils créent avec plaisir des fichiers avec les mêmes noms (sauf pour le cas) dans un dossier donné.

L'effet est que je peux cloner le référentiel et avoir immédiatement des dizaines de fichiers «modifiés» qui, si je m'enregistrais, créeraient des ravages.

J'ai Windows réglé sur sensible à la casse et Git pour ne pas ignorer la casse, mais cela échoue toujours (dans les appels à l'API Win32 apparemment).

Si je gitignore les fichiers, je dois me rappeler de ne pas suivre le fichier .gitignore.

Mais j'ai trouvé une bonne réponse ici:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html

Chris Aaaaa
la source
Le lien semble rompu (il redirige d'abord vers la version 'https'): "Échec de la connexion sécurisée. Une erreur s'est produite lors d'une connexion à archive.robwilkerson.org. PR_END_OF_FILE_ERROR"
Peter Mortensen
0

Créez simplement un .gitignorefichier dans votre dossier de projet Ajoutez ensuite le nom du dossier dedans par exemple:

frontend/node_modules
DINA TAKLIT
la source