Додайте нещодавно створену конкретну папку до .gitignore у Git


89

У мене був чистий робочий каталог і вчора ввечері я привіз клон з репозиторію Git. Але зараз мій локальний сервер створив і містить папку зі статистикою, яку я хочу ігнорувати.

Здається, я не можу змусити Git ігнорувати цю папку, коли я запускаю статус 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

Я додав у свій .gitignore кілька різних рядків, але він все ще намагається їх додати:

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

Відповіді:


98

Спробувати /public_html/stats/*?

Але оскільки файли, git statusпро які повідомляється, були записані, це означає, що ви вже додали їх вручну. У такому випадку, звичайно, трохи пізно ігнорувати. Ви можете git rm --cacheїх (IIRC).


16
Чекай! У вас є "файли, які потрібно зафіксувати" - це означає, що ви вже git addїх позначили .
Майкл Крелін - хакер

93

Для цього є два випадки

Випадок 1: Файл уже додано до git repo.

Випадок 2: Нещодавно створений файл і його статус все ще відображається як файл без відстеження під час використання

git status

Якщо у вас є випадок 1:

КРОК 1: Тоді біжи

git rm --cached filename 

щоб видалити його з git repo cache

якщо це каталог, то використовуйте

git rm -r --cached  directory_name

КРОК 2: Якщо Випадок 1 закінчено потім створити новий файл з ім'ям .gitignoreу вашому мерзотника репо

КРОК 3: Використовуйте наступне, щоб сказати git ігнорувати / припускати, що файл не змінився

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

КРОК 4: Тепер перевірте статус, використовуючи git status open .gitignoreу вашому редакторі nano, vim, geany тощо ... будь-який, додайте шлях до файлу / папки, який потрібно ігнорувати. Якщо це папка, тоді користувач folder_name/*ігнорує весь файл.

Якщо ви все ще не розумієте, прочитайте статтю git ignore посилання на файл .


3
Я отримую, коли fatal: Unable to mark file .idea/jsLibraryMappings.xmlя це роблюupdate-index
OlehZiniak

@OlehZiniak, ти придумав, що слід робити, коли з’являється fatal: Unable to mark fileпомилка. Будь ласка, допоможіть.
чанчал пардеші

дозвіл і право власності на файл, який ви не можете позначити. на якому кроці він показує помилку?
Kshitiz

16

З "git help ignore" ми дізнаємось:

Якщо шаблон закінчується косою рисою, він видаляється з метою наступного опису, але він знайде лише відповідність каталогу. Іншими словами, foo / збігатиметься з каталогом foo та шляхами під ним, але не збігатиметься зі звичайним файлом чи символічним посиланням foo (це узгоджується із тим, як загалом працює pathspec у git).

Тому те, що вам потрібно - це

public_html / stats /


1
Це просто означає, що "public_html / stats /" буде відповідати лише каталогу, але не файлу, а "public_html / stats" буде відповідати як каталогу, так і файлу з такою назвою, тому це не проблема. Все-таки хороша ідея.
jmanning2k

1
Сторінка з повідомленнями каже, що foo / буде відповідати каталогу foo та шляхам під нею. OP хоче ігнорувати папку та її вміст. Окрім інших проблем із git add, це як це робиться.
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

Я неймовірно ледачий. Я просто зробив пошук, сподіваючись знайти ярлик на цю проблему, але не отримав відповіді, тому збив це.

~ / bin / IGNORE_ALL

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

Напр .: IGNORE_ALL додав статистичні ігнорування

Це просто додасть усі файли ігнорування до вашого .gitignore та коміту. зверніть увагу, що згодом ви можете додати анотації до файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.