Ajouter un dossier spécifique nouvellement créé à .gitignore dans Git

88

J'ai eu un répertoire de travail propre et j'ai apporté un clone d'un dépôt Git la nuit dernière. Mais maintenant, mon serveur local a créé et contient un dossier de statistiques que je veux ignorer.

Je n'arrive pas à faire en sorte que Git ignore ce dossier lorsque j'exécute un statut git.

On branch master
Your branch is ahead of 'origin/master' by 1 commit.

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

    new file: app_public/views/pages/privacy.php
    new file: app_public/views/pages/terms.php
    new file: public_html/stats/ctry_usage_200908.png
    new file: public_html/stats/daily_usage_200908.png
    new file: public_html/stats/dns_cache.db
    new file: public_html/stats/hourly_usage_200908.png
    new file: public_html/stats/index.html
    new file: public_html/stats/usage.png
    new file: public_html/stats/usage_200908.html
    new file: public_html/stats/webalizer.current
    new file: public_html/stats/webalizer.hist

Changed but not updated:
    modified: .gitignore

J'ai ajouté dans mon .gitignore quelques lignes différentes mais il essaie toujours de les ajouter:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*
Lee
la source

Réponses:

98

Essayez /public_html/stats/*?

Mais comme les fichiers sont git statussignalés comme étant validés, cela signifie que vous les avez déjà ajoutés manuellement. Dans ce cas, bien sûr, il est un peu trop tard pour l'ignorer. Vous pouvez git rm --cacheles (IIRC).

Michael Krelin - hacker
la source
16
Attendez! Vous avez des "fichiers à valider" - cela signifie que vous les avez déjà git addenregistrés.
Michael Krelin - hacker
93

Pour cela, il y a deux cas

Cas 1: fichier déjà ajouté au repo git.

Cas 2: Fichier nouvellement créé et son état toujours affiché comme fichier non suivi lors de l'utilisation

git status

Si vous avez le cas 1:

ÉTAPE 1: puis exécutez

git rm --cached filename 

pour le supprimer du cache du dépôt git

s'il s'agit d'un répertoire, utilisez

git rm -r --cached  directory_name

ÉTAPE 2: Si le cas 1 est terminé, créez un nouveau fichier nommé .gitignoredans votre dépôt git

ÉTAPE 3: utilisez ce qui suit pour dire à git d'ignorer / supposer que le fichier est inchangé

git update-index --assume-unchanged path/to/file.txt

ÉTAPE 4: Maintenant, vérifiez le statut en utilisant git status open .gitignoredans votre éditeur nano, vim, geany etc ... n'importe lequel, ajoutez le chemin du fichier / dossier à ignorer. S'il s'agit d'un dossier, l'utilisateur folder_name/*doit ignorer tous les fichiers.

Si vous ne comprenez toujours pas, lisez l' article git ignore file link.

Kshitiz
la source
3
Je reçois quand fatal: Unable to mark file .idea/jsLibraryMappings.xmlje le faisupdate-index
OlehZiniak
@OlehZiniak avez-vous compris ce qu'il faut faire en cas d' fatal: Unable to mark fileerreur. Veuillez aider.
chanchal pardeshi
l'autorisation et la propriété du fichier que vous ne pouvez pas marquer. dans quelle étape il montre une erreur?
Kshitiz
16

De "git help ignore" nous apprenons:

Si le modèle se termine par une barre oblique, il est supprimé aux fins de la description suivante, mais il ne trouvera qu'une correspondance avec un répertoire. En d'autres termes, foo / correspondra à un répertoire foo et les chemins en dessous, mais ne correspondra pas à un fichier normal ou à un lien symbolique foo (cela est cohérent avec la façon dont pathspec fonctionne en général dans git).

Par conséquent, ce dont vous avez besoin est

public_html / stats /

Kajaco
la source
1
Cela signifie simplement que "public_html / stats /" ne correspondra qu'à un répertoire, mais pas à un fichier, mais "public_html / stats" correspondra à la fois au répertoire et à un fichier de ce nom, donc ce n'est pas le problème. Encore une bonne idée.
jmanning2k
1
La page de manuel indique que foo / correspondra à un répertoire foo et aux chemins en dessous. OP veut ignorer le dossier et son contenu. Mis à part d'autres problèmes avec git add, voici comment procéder.
kajaco
6

C'est /public_html/stats/*.

$ ~/myrepo> ls public_html/stats/
bar baz foo
$ ~/myrepo> cat .gitignore 
public_html/stats/*
$ ~/myrepo> git status
# On branch master
#
# Initial commit
#
# 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)
$ ~/myrepo>
August Lilleaas
la source
2

Je suis incroyablement paresseux. Je viens de faire une recherche dans l'espoir de trouver un raccourci vers ce problème, mais je n'ai pas obtenu de réponse, alors je l'ai renversé.

~ / bin / IGNORE_ALL

#!/bin/bash
# Usage: IGNORE_ALL <commit message>                                                                                                                             
git status --porcelain | grep '^??' | cut -f2 -d' ' >> .gitignore              
git commit -m "$*" .gitignore 

EG: IGNORE_ALL ajouté la statistique ignore

Cela ajoutera simplement tous les fichiers ignorés à votre .gitignore et commit. notez que vous souhaiterez peut-être ajouter des annotations au fichier par la suite.

Michael
la source