Adicionar pasta específica recém-criada a .gitignore no Git

90

Eu tinha um diretório de trabalho limpo e trouxe um clone de um repositório Git ontem à noite. Mas agora meu servidor local criou e contém uma pasta de estatísticas que desejo ignorar.

Não consigo fazer o Git ignorar essa pasta quando executo um status 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

Eu adicionei no meu .gitignore algumas linhas diferentes, mas ainda estou tentando adicioná-las:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*
Lee
fonte

Respostas:

99

Tentar /public_html/stats/*?

Mas, como os arquivos são git statusrelatados como confirmados, isso significa que você já os adicionou manualmente. Nesse caso, é claro, é um pouco tarde para ignorar. Você pode git rm --cacheeles (IIRC).

Michael Krelin - hacker
fonte
16
Esperar! Você tem "arquivos a serem submetidos" - isso significa que você já os git addenviou.
Michael Krelin - hacker de
94

Para isso existem dois casos

Caso 1: arquivo já adicionado ao git repo.

Caso 2: arquivo recém-criado e seu status ainda mostrando como arquivo não rastreado ao usar

git status

Se você tiver o caso 1:

PASSO 1: Em seguida, execute

git rm --cached filename 

para removê-lo do cache repo git

se for um diretório, use

git rm -r --cached  directory_name

ETAPA 2: se o caso 1 terminar, crie um novo arquivo nomeado .gitignoreem seu repo git

PASSO 3: use o seguinte para dizer ao git para ignorar / assumir que o arquivo não foi alterado

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

PASSO 4: Agora, verifique o status usando git status open .gitignoreem seu editor nano, vim, geany etc ... qualquer um, adicione o caminho do arquivo / pasta para ignorar. Se for uma pasta, o usuário folder_name/*deve ignorar todos os arquivos.

Se você ainda não entendeu, leia o artigo git ignore o link do arquivo .

Kshitiz
fonte
3
Eu entendo quando fatal: Unable to mark file .idea/jsLibraryMappings.xmleu façoupdate-index
OlehZiniak
@OlehZiniak você descobriu o que deve ser feito quando ocorre um fatal: Unable to mark fileerro. Por favor ajude.
chanchal pardeshi
permissão e propriedade do arquivo que você não consegue marcar. em qual etapa mostra erro?
Kshitiz
16

Com "git help ignore" aprendemos:

Se o padrão terminar com uma barra, ele será removido para o propósito da descrição a seguir, mas apenas encontraria uma correspondência com um diretório. Em outras palavras, foo / irá corresponder a um diretório foo e caminhos abaixo dele, mas não irá corresponder a um arquivo regular ou link simbólico foo (isto é consistente com a maneira como o pathspec funciona em geral no git).

Portanto, o que você precisa é

public_html / stats /

Kajaco
fonte
1
Isso significa apenas que "public_html / stats /" corresponderá apenas a um diretório, mas não a um arquivo, mas "public_html / stats" corresponderá ao diretório e a um arquivo com aquele nome, então esse não é o problema. Ainda assim, é uma boa ideia.
jmanning2k
1
A página do manual diz foo / irá corresponder a um diretório foo e caminhos abaixo dele. OP deseja ignorar a pasta e seu conteúdo. Além de outros problemas com git add, é assim que ele é feito.
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>
August Lilleaas
fonte
2

Sou incrivelmente preguiçoso. Eu apenas fiz uma pesquisa na esperança de encontrar um atalho para este problema, mas não obtive uma resposta, então tentei descobrir.

~ / bin / IGNORE_ALL

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

EX .: IGNORE_ALL adicionado stat ignora

Isso apenas irá anexar todos os arquivos ignorados ao seu .gitignore e enviar. observe que você pode querer adicionar anotações ao arquivo posteriormente.

Michael
fonte