将新创建的特定文件夹添加到Git中的.gitignore


88

我有一个干净的工作目录,并于昨晚从Git存储库中引入了一个克隆。但是现在我的本地服务器创建并包含一个我想忽略的stats文件夹。

我在运行git 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

我在.gitignore中添加了几行不同的内容,但仍然尝试添加它们:

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

Answers:


98

试试/public_html/stats/*

但是由于git status报告中的文件将被提交,这意味着您已经手动添加了它们。当然,在这种情况下,忽略它为时已晚。您可以使用git rm --cache它们(IIRC)。


16
等待!您拥有“要提交的文件”,这意味着您已经编辑了git add它们。
Michael Krelin-黑客

92

为此,有两种情况

情况1:文件已添加到git repo中。

情况2:新创建的文件,使用时其状态仍显示为未跟踪文件

git status

如果您有情况1:

步骤1: 然后运行

git rm --cached filename 

从git repo缓存中删除它

如果是目录,则使用

git rm -r --cached  directory_name

步骤2:如果是情况1已经结束,则.gitignore在git repo中创建一个新文件

步骤3:使用以下命令告诉git忽略/假定文件未更改

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

步骤4:现在,使用git status open检查状态.gitignore在编辑器nano,vim,geany等中,添加任何要忽略的文件/文件夹的路径。如果是文件夹,则用户folder_name/*将忽略所有文件。

如果您仍然不理解,请阅读文章git ignore file链接。


3
我知道什么fatal: Unable to mark file .idea/jsLibraryMappings.xml时候做的update-index
OlehZiniak

@OlehZiniak您是否已弄清楚出现fatal: Unable to mark file错误时应采取的措施。请帮忙。
chanchal pardeshi

您无法标记的文件的权限和所有权。在哪一步显示错误?
Kshitiz '18

16

从“ git help ignore”中,我们学习:

如果该模式以斜杠结尾,则出于以下描述的目的将其删除,但它只会找到与目录匹配的内容。换句话说,foo /会匹配目录foo及其下的路径,但不会匹配常规文件或符号链接foo(这与git中pathspec的工作方式一致)。

因此,您需要的是

public_html / stats /


1
这仅意味着“ public_html / stats /”将仅匹配目录,而不匹配文件,但是“ public_html / stats”将同时匹配该目录和该名称的文件,所以这不是问题。不过还是个好主意。
jmanning2k 2009年

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 

EG:IGNORE_ALL添加的统计信息将被忽略

这只会将所有忽略文件附加到您的.gitignore并提交。请注意,您之后可能需要将注释添加到文件中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.