Fügen Sie .gitignore in Git einen neu erstellten bestimmten Ordner hinzu

86

Ich hatte ein sauberes Arbeitsverzeichnis und brachte gestern Abend einen Klon von einem Git-Repo. Aber jetzt hat mein lokaler Server einen Statistikordner erstellt und enthält diesen, den ich ignorieren möchte.

Ich kann Git nicht dazu bringen, diesen Ordner zu ignorieren, wenn ich einen Git-Status ausführe.

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

Ich habe in meinem .gitignore ein paar verschiedene Zeilen hinzugefügt, aber es wird immer noch versucht, sie hinzuzufügen:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*
Lee
quelle

Antworten:

96

Versuchen Sie es /public_html/stats/*?

Da die Dateien git statusals festgeschrieben gemeldet werden , bedeutet dies, dass Sie sie bereits manuell hinzugefügt haben. In diesem Fall ist es natürlich etwas zu spät, um es zu ignorieren. Sie können git rm --cachesie (IIRC).

Michael Krelin - Hacker
quelle
16
Warten! Sie haben "Dateien festgeschrieben" - das heißt, Sie haben sie bereits git addgespeichert.
Michael Krelin - Hacker
90

Dafür gibt es zwei Fälle

Fall 1: Datei bereits zu Git Repo hinzugefügt.

Fall 2: Neu erstellte Datei und ihr Status wird bei Verwendung weiterhin als nicht verfolgte Datei angezeigt

git status

Wenn Sie Fall 1 haben:

SCHRITT 1: Dann laufen

git rm --cached filename 

um es aus dem Git Repo Cache zu entfernen

Wenn es sich um ein Verzeichnis handelt, verwenden Sie

git rm -r --cached  directory_name

SCHRITT 2: Wenn Fall 1 abgeschlossen ist, erstellen Sie eine neue Datei mit dem Namen .gitignorein Ihrem Git-Repo

SCHRITT 3: Verwenden Sie Folgendes, um git anzuweisen, die Datei zu ignorieren / anzunehmen, dass sie unverändert ist

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

SCHRITT 4: Überprüfen Sie nun den Status mithilfe des .gitignorein Ihrem Editor geöffneten Git-Status. Nano, vim, geany usw. Fügen Sie den Pfad der zu ignorierenden Datei / des zu ignorierenden Ordners hinzu. Wenn es sich um einen Ordner handelt, muss der Benutzer folder_name/*alle Dateien ignorieren.

Wenn Sie immer noch nicht verstehen, lesen Sie den Artikel git ignorieren Dateilink.

Kshitiz
quelle
3
Ich bekomme wann fatal: Unable to mark file .idea/jsLibraryMappings.xmlwenn ich es tueupdate-index
OlehZiniak
@OlehZiniak hast du herausgefunden, was zu tun ist, wenn man einen fatal: Unable to mark fileFehler bekommt . Bitte helfen Sie.
Chanchal Pardeshi
Erlaubnis und Eigentum an der Datei, die Sie nicht markieren können. In welchem ​​Schritt wird ein Fehler angezeigt?
Kshitiz
15

Aus "git help ignore" lernen wir:

Wenn das Muster mit einem Schrägstrich endet, wird es zum Zweck der folgenden Beschreibung entfernt, es wird jedoch nur eine Übereinstimmung mit einem Verzeichnis gefunden. Mit anderen Worten, foo / stimmt mit einem Verzeichnis foo und Pfaden darunter überein, stimmt jedoch nicht mit einer regulären Datei oder einem symbolischen Link foo überein (dies stimmt mit der allgemeinen Funktionsweise von pathspec in git überein).

Deshalb brauchen Sie

public_html / stats /

Kajaco
quelle
1
Das bedeutet nur, dass "public_html / stats /" nur mit einem Verzeichnis, aber nicht mit einer Datei übereinstimmt, sondern "public_html / stats" sowohl mit dem Verzeichnis als auch mit einer Datei mit diesem Namen. Das ist also nicht das Problem. Trotzdem eine gute Idee.
jmanning2k
1
Die Manpage sagt foo / wird mit einem Verzeichnis foo und Pfaden darunter übereinstimmen. OP möchte den Ordner und seinen Inhalt ignorieren. Abgesehen von anderen Problemen mit git add wird dies so gemacht.
Kajaco
5

Es ist /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
quelle
1

Ich bin unglaublich faul. Ich habe nur eine Suche durchgeführt, in der Hoffnung, eine Verknüpfung zu diesem Problem zu finden, aber keine Antwort erhalten, also habe ich das erledigt.

~ / 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 hinzugefügt stat ignoriert

Dadurch werden einfach alle Ignorierdateien an Ihren .gitignore angehängt und festgeschrieben. Beachten Sie, dass Sie der Datei anschließend möglicherweise Anmerkungen hinzufügen möchten.

Michael
quelle