Aggiungi una cartella specifica appena creata a .gitignore in Git


88

Avevo una directory di lavoro pulita e ieri sera ho portato un clone da un repository Git. Ma ora il mio server locale ha creato e contiene una cartella delle statistiche che voglio ignorare.

Non riesco a far sì che Git ignori questa cartella quando eseguo uno stato 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

Ho aggiunto nel mio .gitignore alcune righe diverse ma sto ancora cercando di aggiungerle:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*

Risposte:


98

Provare /public_html/stats/*?

Ma poiché i file vengono git statussegnalati come impegnati, significa che li hai già aggiunti manualmente. In tal caso, ovviamente, è un po 'troppo tardi per ignorare. Puoi git rm --cacheloro (IIRC).


16
Aspettare! Hai "file di cui eseguire il commit", il che significa che li hai già registrati git add.
Michael Krelin - hacker

93

Per questo ci sono due casi

Caso 1: file già aggiunto al repository git.

Caso 2: file appena creato e il suo stato viene ancora visualizzato come file non tracciato quando si utilizza

git status

Se hai il caso 1:

FASE 1: Quindi esegui

git rm --cached filename 

per rimuoverlo dalla cache del repository git

se è una directory, usa

git rm -r --cached  directory_name

PASSO 2: Se il caso 1 è finito, crea un nuovo file denominato .gitignorenel tuo repository git

PASSAGGIO 3: utilizzare quanto segue per dire a git di ignorare / presumere che il file non sia cambiato

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

PASSO 4: Ora, controlla lo stato usando git status aperto .gitignorenel tuo editor nano, vim, geany ecc ... qualsiasi, aggiungi il percorso del file / cartella da ignorare. Se si tratta di una cartella, l'utente folder_name/*ignora tutti i file.

Se ancora non hai capito leggi l' articolo git ignore file link.


3
Ottengo quando fatal: Unable to mark file .idea/jsLibraryMappings.xmlquando lo faccioupdate-index
OlehZiniak

@OlehZiniak hai capito cosa dovrebbe essere fatto quando si riceve un fatal: Unable to mark fileerrore. Per favore aiuto.
chanchal pardeshi

autorizzazione e proprietà del file che non puoi contrassegnare. in quale fase mostra l'errore?
Kshitiz

16

Da "git help ignore" apprendiamo:

Se il pattern termina con una barra, viene rimosso ai fini della seguente descrizione, ma troverà solo una corrispondenza con una directory. In altre parole, foo / corrisponderà a una directory foo e ai percorsi sottostanti, ma non corrisponderà a un file normale oa un collegamento simbolico foo (questo è coerente con il modo in cui pathspec funziona in generale in git).

Quindi quello che ti serve è

public_html / stats /


1
Ciò significa semplicemente che "public_html / stats /" corrisponderà solo a una directory, ma non a un file, ma "public_html / stats" corrisponderà sia alla directory che a un file con quel nome, quindi non è questo il problema. Comunque una buona idea.
jmanning2k

1
La pagina man dice che foo / corrisponderà a una directory foo e ai percorsi sottostanti. OP vuole ignorare la cartella e il suo contenuto. A parte altri problemi con git add, è così che funziona.
kajaco

6

È /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>

2

Sono incredibilmente pigro. Ho appena fatto una ricerca sperando di trovare una scorciatoia per questo problema, ma non ho ottenuto una risposta, quindi ho buttato giù questo messaggio.

~ / bin / IGNORE_ALL

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

ES: IGNORE_ALL la statistica aggiunta ignora

Questo aggiungerà solo tutti i file da ignorare al tuo .gitignore e il commit. nota che potresti voler aggiungere annotazioni al file in seguito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.