gitignore只是不起作用。我不能忽视它.DS_Store& .gitignore文件

时间:2014-01-10 11:26:16

标签: git

我有.gitignore d .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日==================

我仍然无法弄清楚这一点。 以下评论对我没有帮助。所以我正在重新发布我的查询。

以下是我git status输出的摘要。实际输出跨越几页。此输出中的所有文件都是我不想要的文件/文件夹。这些是未跟踪的文件,因此我从未git add编辑它们。但是当我创建一个新项目时,我必须在添加它们之前在这个巨大的列表中搜索相关的文件/文件夹,这使整个过程有点恼人。

# 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/   

10 个答案:

答案 0 :(得分:22)

  1. 你不应该忽视你的.gitignore。当您在存储库中没有忽略功能时,我认为忽略功能不起作用。我不确定。
  2. 即使您已将跟踪的文件添加到.gitignore,也不会忽略这些文件。如果您希望在将它们添加到存储库后将其忽略,则必须先使用git rm filename删除它们。

答案 1 :(得分:8)

如果你想忽略对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/

答案 2 :(得分:4)

这是.gitignore应该是这样的:

.DS_Store

此外,.gitignore是要跟踪的,忽略它没有意义。因此,在您将文件更新为仅包含.DS_Store之后:

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我遇到一个问题,那就是.DS_Store被忽略了,原因是它已经提交给了回购协议。删除它可以解决问题。

$ git rm --cached .DS_Store

答案 5 :(得分:0)

添加行

 **/.DS_Store
 **/.gitignore

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

这是基于Jakub Jirutka的回应。乍一看我有点困惑,但我尝试了它并且它起作用了。以下是他的回答 - 希望 - 更清楚。

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

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

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

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

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

转到终端...

  • cd src/best_repo_eva
  • echo -e "tmp 标签 \n ign 标签 " >> .git/info/exclude

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

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

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

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

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