gitignore 只是不起作用。我无法让它忽略 .DS_Store 和 .gitignore 文件

Posted

技术标签:

【中文标题】gitignore 只是不起作用。我无法让它忽略 .DS_Store 和 .gitignore 文件【英文标题】:gitignore just doesn't work. I can't get it to ignore .DS_Store & .gitignore files 【发布时间】:2014-01-29 08:33:01 【问题描述】:

我有 .gitignored .DS_Store.gitignore 文件。但仍然在“git status”中看到它们。

有人可以向我解释一下如何确保我试图忽略的文件在检查状态时不会出现吗?

git status

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .DS_Store
#   .gitignore

我的存储库的所有子文件夹中都有.DS_Store 文件。所以我希望所有这些都被忽略。我该怎么办?

我在存储库的根目录中配置了.gitignore 文件。 我应该将它复制到所有子文件夹以供 git 忽略这些文件吗? 不接受在.gitignore 文件中添加.gitignore 吗?

编辑:2014 年 1 月 21 日 ==================

我还是想不通。 下面的 cmets 并没有真正帮助我。所以我重新发布我的查询。

下面是我的git status 输出的sn-p。实际输出跨越几页。并且此输出中的所有文件都是我的仓库中不想要的文件/文件夹。这些是未跟踪的文件,所以我从未git added 他们。但是当我创建一个新项目时,我必须在添加它们之前在这个巨大的列表中搜索相关的文件/文件夹,这使得整个过程有点烦人。

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   ../../.DS_Store
#   ../../Classes/
#   ../.DS_Store
#   ../Basics/.DS_Store
#   ../adt/.metadata/
#   ../adt/Fundamentals/.classpath
#   ../adt/Fundamentals/.project
#   ../adt/Fundamentals/.settings/
#   ../adt/Fundamentals/bin/
#   .DS_Store
#   .metadata/

下面是我的.gitignore 文件。有人可以指出我的错误吗?

*.class
*.pyc                                                                           
colors                                                                          
**/.DS_Store                                                                    

# Mobile Tools for Java (J2ME)                                                  
.mtj.tmp/                                                                       

# Package Files #                                                               
*.jar                                                                           
*.war                                                                           
*.ear                                                                           

#Eclipse files                                                                  
.project                                                                        

# folders                                                                       
.classpath/                                                                     
.settings/                                                                      
.metadata/                                                                      
WEB-INF/lib/                                                                    
META-INF/                                                                       
Servers/ 

# Byte-compiled / optimized / DLL files                                         
__pycache__/                                                                    
*.py[cod]                                                                       

# C extensions                                                                  
*.so                                                                            

# Distribution / packaging                                                      
bin/                                                                            
build/                                                                          
develop-eggs/                                                                   
dist/                                                                           
eggs/                                                                           
lib/                                                                            
lib64/                                                                          
parts/   

【问题讨论】:

你能发布你的 .gitignore 文件吗?你也可以git add .gitignore 我会避免将.gitignore 放入忽略文件中。该文件旨在成为存储库的一部分。对于本地忽略,.git/info/exclude 文件的作用大致相同,但包含在存储库中。共享忽略到.gitignore,个人忽略到.git/info/exclude 【参考方案1】:
    您不应忽略您的.gitignore。当您的存储库中没有忽略功能时,我认为它不起作用。不过我不确定。 不会忽略已跟踪的文件,即使您将它们添加到 .gitignore。如果您希望它们在已添加到存储库后被忽略,您必须先使用git rm filename 删除它们。

【讨论】:

***.com/questions/107701/…【参考方案2】:

如果你想忽略 git 跟踪的文件的更改,你可以指定 git 它应该假定文件没有更改:

git update-index --assume-unchanged file

并再次开始跟踪更改:

git update-index --no-assume-unchanged file

如果你已经添加了一个应该被完全忽略的文件 (.gitignore),你必须先git rm它。

参考:https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html 来源:http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

【讨论】:

【参考方案3】:

我遇到了一个问题,让 .DS_Store 被忽略,问题在于它已经被提交到 repo。删除它解决了这个问题。

$ git rm --cached .DS_Store

【讨论】:

【参考方案4】:

这就是您的.gitignore 的样子:

.DS_Store

另外,.gitignore 是用来跟踪的,忽略它是没有意义的。因此,在您将文件更新为仅包含 .DS_Store 之后,请执行以下操作:

$ git add .gitignore
$ git commit -m "Track .gitignore"

【讨论】:

如果.gitignore 被提交,则无需将.gitignore 写入.gitignore 本身,因为它不再是未跟踪的文件。 在我的情况下,'.DS_Store' 是未跟踪的文件。我有这么长的未跟踪文件列表,我必须向上滚动几次才能找到跟踪的部分。如何摆脱这些未跟踪的文件?是否将它们添加到 .gitignore 中,确保我在点击“git status”时看不到它们? @deepng 好的,那么就不需要最后两行了。更新了我的代码。 @Agis,是否将文件添加到 .gitignore 以确保我没有在未跟踪的文件列表中看到它们? @deepng 是的。但跟踪.gitignore 文件本身也是一个好习惯,因为您可能希望忽略这些文件(即其他成员正在处理它)。【参考方案5】:

添加行

 **/.DS_Store
 **/.gitignore

【讨论】:

【参考方案6】:

你为什么忽略.gitignore?这没有意义。如果您只想在本地忽略某些文件(即不跟踪并将此设置发布到远程存储库),请改用.git/info/exclude。只需添加.DS_Store 即可。

【讨论】:

这样做了,但我仍然在未跟踪列表中看到 .DS_Store。 在一个新的 git repo 中尝试一下,如果它有效,也许你已经弄乱了你的索引。【参考方案7】:

我遇到了同样的问题。解决方法是先在你的主目录下添加一个.gitignore。

我的存储库 .gitignore 不再出现在索引跟踪中。

【讨论】:

【参考方案8】:

这是基于 Jakub Jirutka 的回应。乍一看我有点困惑,但我试过了,它奏效了。这是他的回答 - 希望 - 更清楚。

他的回答很简单:将不需要的文件存储在.git/info/exclude(在每个 git 存储库中)。将每个放在一个新行上。

.gitignore 文件有助于忽略您知道已生成或将要生成但不需要的文件和目录。您可以git add .gitignore 然后提交并推送它,这一事实非常有用。例如,当您在另一台计算机上克隆此存储库时,所有应该被忽略的文件(例如,在 ./configure; make; sudo make install; 之后,通常会生成示例文件和许多其他链接)忽略(如果它们在 .gitignore 中。

但是,有时,不确定文件是否需要在存储库中,或者是否希望该文件仅存在于 git 控制之外,就好像它位于非 git 控制的目录中一样。这可以通过将其添加到 exclude 文件内的排除文件中来完成,该文件位于 .git/info 目录中。

每个 git 存储库都有一个 .git 文件夹。要完全排除文件或目录,请转到良好的 ole 终端,cd 到存储库的根目录(即cd src/best_repo_eva)。然后你会看到一个.git/。然后,cd .git/info/。那里可能只有一个名为exclude 的文件。使用您最喜欢的编辑器(开个玩笑;您可能只使用蝴蝶的翅膀将宇宙射线聚焦在高层大气中以翻转驱动盘中的正确位;)编辑exclude,使其包含您要排除的文件换行。

更简单的解决方案:您有两个要排除的文件:tmp1ignoreadf

转到终端并...

cd src/best_repo_eva echo -e "tmptab\n igntab" &gt;&gt; .git/info/exclude

显然,这些选项卡只有在您的终端支持时才有效。注意两个文件之间的-e(支持反斜杠转义)和\n(用空格强调)。

存储大量具有相似结尾的文件,可以像cd src/best_repo_eva 然后echo -e $(ls -1 | grep "tmp") &gt;&gt; .git/info/exclude 一样简单(这是ls -ONE 而不是ls -L - 请注意ls -a -1 不起作用,不幸的是)。这会将包含序列“tmp”的所有文件存储到排除文件中。

【讨论】:

【参考方案9】:

我在 Mac OS X 上遇到了同样的问题。我在 repo 中有 .gitignore 文件,但它不起作用。

当我想使用 cat 命令将 .gitignore 内容打印到控制台时,奇怪的是它打印出来的内容是空的。当用 vim 打开时,它看起来很正常。

解决方案是删除文件,创建一个新文件,然后再次将内容放入其中。之后,忽略文件开始起作用,当我完成 cat .gitignore 时,它打印正确。

【讨论】:

【参考方案10】:

我遇到了同样的问题。 .gitignore 行均无效。

我将文件编码转换为UTF-8,它立即生效。

【讨论】:

以上是关于gitignore 只是不起作用。我无法让它忽略 .DS_Store 和 .gitignore 文件的主要内容,如果未能解决你的问题,请参考以下文章

.gitignore 文件不起作用解决

Git添加忽略文件 .gitignore文件不起作用

Git添加忽略文件 .gitignore文件不起作用

Git全局忽略不起作用

.gitignore文件中添加忽略文件或者目录后,不起作用。

gitignore不起作用