Ignorer les répertoires dans Git repos sous Windows

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

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

 dir_to_ignore/ 

Plus d’infos ici .

Par défaut, Windows Explorer affichera .gitignore alors que le nom du fichier est .gitignore.txt

Git n’utilisera pas .gitignore.txt

Et vous ne pouvez pas renommer le fichier en .gitignore car l’explorateur pense que c’est un fichier de type gitignore sans nom.

Solution sans ligne de commande:

  Vous pouvez renommer un fichier en ".gitignore".  et il va créer ".gitignore" 

Il semble que pour ignorer les fichiers et les répertoires, il existe deux manières principales:

  1. .gitignore

    • Placer le fichier .gitignore dans la racine de votre repo en plus .git dossier .git (dans Windows, assurez-vous de voir la véritable extension de fichier , puis créez .gitignore. (Avec le point à la fin pour créer une extension de fichier vide))
    • Faire la configuration globale ~/.gitignore_global et exécuter git config --global core.excludesfile ~/.gitignore_global pour l’append à votre configuration git

    note: les fichiers suivis avant peuvent être dépistés en exécutant git rm --cached filename

  2. Repo exclude – Pour les fichiers locaux qui n’ont pas besoin d’être partagés, il vous suffit d’append le modèle de fichier ou le répertoire au fichier .git/info/exclude . Ces règles ne sont pas validées, donc ne sont pas vues par d’autres utilisateurs plus d’informations ici

[mis à jour] Pour faire des exceptions dans la liste des fichiers ignorés, consultez cette question .

J’ai eu quelques problèmes à créer un fichier dans l’explorateur Windows avec un. au début.

une solution de contournement consistait à entrer dans la coquille de commande et à créer un nouveau fichier en utilisant “edit”

pour demander à GIT d’ignorer certains fichiers ou dossiers, vous devez créer .gitignore fichier .gitignore .

mais dans l’explorateur Windows, vous devez fournir un nom pour le fichier, vous ne pouvez simplement pas créer un fichier avec une extension, l’astuce consiste à créer un fichier texte vide et aller à l’invite de commande et 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 fichiers / dossiers que vous souhaitez ignorer. vous pouvez également utiliser des caractères génériques comme celui-ci *.txt

j’espère qu’il répond à votre question

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 ignorera tout le contenu du référentiel. Mais .gitignore sera inclus dans votre repo.

 $ 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 

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

dir_to_exclude /

travaillera peut-être, mais exclut 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 la distinction entre / et \ .

Pour exclure tous les répertoires, mieux utiliser:

** /

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

Dans votre \.git\info projets \.git\info , il existe également un fichier d’exclusion identique à celui de .gitignore (je pense). Vous pouvez append des fichiers et des répertoires à ignorer.

J’ai eu des problèmes pour que git récupère le fichier .gitignore sous Windows. Le fichier $ GIT_DIR / info / exclude semble toujours fonctionner. L’inconvénient de cette approche est que les fichiers du répertoire $ GIT_DIR ne sont pas inclus dans l’enregistrement et ne sont donc pas partagés.

(ps $ GIT_DIR est généralement le dossier caché nommé .git)

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

 * !.gitignore 

Ça marche pour moi et pour les simples.

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 .gitignore vous décrivez. Cela vous donnera une sortie d’ git status comme:

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

si les fichiers index.html n’ont pas encore été ajoutés au référentiel. (git voit qu’il y a des fichiers non signés dans les répertoires du cache, mais ne rapporte que les répertoires.) Pour résoudre ce problème, assurez-vous d’avoir ajouté et de index.html fichiers index.html :

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

… et votre git status ressemblera alors à:

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

(Évidemment, vous voulez aussi commettre .gitignore , j’étais juste paresseux avec ce cas de test.)

Pour ignorer un répertoire entier dans git, le 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 /

Niveau supérieur .gitignore (/root/.gitignore)

  • C’est là que vont vos infos gitignore standard

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

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

et c’est aussi simple que ça 🙂

Juste au cas où vous auriez besoin d’exclure des sous-dossiers, vous pouvez utiliser le caractère générique ** pour exclure tout niveau de sous-répertoire.

 **/build/output/Debug/ 

Si tout le rest échoue, essayez de modifier le fichier

/.git/info/exclude

et en ajoutant les répertoires que vous voulez à 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/ comstackd/ 

J’ai ajouté les dossiers “assets” et “comstackd” à la liste des fichiers et répertoires à ignorer.

Sur Unix:

 touch .gitignore 

Sous Windows:

 echo > .gitignore 

Ces commandes exécutées dans un terminal créeront un fichier .gitignore à l’emplacement actuel.

Ensuite, ajoutez simplement des informations à ce fichier .gitignore (en utilisant Notepad ++ par exemple), quels fichiers ou dossiers doivent être ignorés. Enregistrez vos modifications. C’est tout 🙂

Plus d’informations: https://www.atlassian.com/git/tutorials/saving-changes/gitignore

J’ai eu des problèmes similaires, je travaille sur une chaîne d’outils Windows avec un repository partagé avec les gars de Linux, ils créent des fichiers avec le même nom [sauf pour les cas] dans un dossier donné.

L’effet est que je peux cloner le repo et avoir immédiatement des dizaines de fichiers “modifiés” qui, si je m’inscrivais, créeraient des dégâts.

J’ai Windows mis à la casse et git pour ne pas ignorer la casse mais il échoue toujours (dans les appels d’api win32 apparemment).

Si je gore les fichiers, je dois me souvenir 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