如何忽略Git中的某些文件


730

我有一个带文件的存储库Hello.java。当我编译它时,Hello.class会生成一个附加文件。

Hello.class.gitignore文件中创建了一个条目。但是,该文件似乎仍然被跟踪。

如何让Git忽略Hello.class


8
您是什么意思“它不起作用”?您可能已经将Hello.class添加到存储库中了吗?gitignores对已跟踪的内容没有影响。参见例如stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel 2010年

Answers:


808

问题在于,.gitignore仅忽略(by git add)之前未跟踪的文件。运行git reset name_of_file以取消登台文件并保留它。如果您还想从存储库中删除给定文件(在推送之后),请使用git rm --cached name_of_file


190
该命令git rm --cached name_of_file将从git存储库中删除文件。即使将其添加到.gitignore文件中。那并不忽略正在删除。
OrwellHindenberg

4
在这种情况下,这似乎是OP想要的。
OndrejSlinták2015年

40
我很高兴您的解决方案为@ Kohan95服务!虽然此问题应根据所选答案重命名。我的评论只是对可能不知道命令功能的开发人员的警告。
OrwellHindenberg

91
git reset name_of_file删除跟踪,但不删除文件。
Cees Timmerman 2015年

7
尝试过git rm --cached <name_of_file>确实删除了存储库中的文件,但是由于它位于.gitignore文件中,因此不会删除本地副本。进一步说明,要添加目录,您需要在其末尾加上反斜杠“ /”。我正在某人签入的ruby项目中删除Rubymine的config目录,这是“ .idea”。在文件中,我放入“ .idea /”,然后放入“ git rm --cached -r .idea”以删除目录及其下的所有内容(因为git仅是版本文件,而不是目录。)
Doug Noel

222

如何忽略新文件

全球范围

将路径添加到您要忽略的.gitignore文件中(并提交)。这些文件条目也将适用于其他签出存储库的人。

在本地

将路径添加到您要忽略的.git/info/exclude文件中。这些文件条目仅适用于本地工作副本。

如何忽略更改的文件(临时)

为了忽略已更改的文件被列为已修改文件,可以使用以下git命令:

git update-index --assume-unchanged <file>

要恢复该无知,请使用以下命令:

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

完美防止持有当前api密钥的文件被推入github!
吉姆在德克萨斯州

1
@Xman为什么说是暂时的?我做了您提到的local忽略git 的步骤,并重新启动了系统,它仍然显示可以直接运行。
Vivek Vardhan

1
感谢您的有用update-index技巧,绝对可以避免更改.gitignore文件,Git随后会跟踪它!
Thomas P.

@mcbjam没有特殊的git ignore命令。编辑位于工作副本内适当位置的.gitignore文件。然后,您应该添加此.gitignore并提交。克隆该存储库的每个人都将忽略那些文件。
Xman Classical

@Vivek Vardhan git update-index --assume-unchanged就像索引上的临时掩码。除非您将其关闭,否则它将一直有效。为了使我的观点更加清楚,索引最初(也就是git read-tree之后)“包含”了刚被读入的树状结构中的所有文件。因此,使Git对此视而不见。索引条目实际上并不等于将其删除。
Xman Classical

150

将以下行添加到.gitignore中:

/Hello.class

这将从git中排除Hello.class。如果已经提交,请运行以下命令:

git rm Hello.class

如果要从git中排除所有类文件,请在.gitignore中添加以下行:

*.class

32
添加Hello.class.gitignore将忽略Hello.class在任何子目录中调用的任何文件。如果仅打算忽略与文件Hello.class位于同一目录中的.gitignore文件,请改用/Hello.class一行。
ndim

您将.gitignore文件放在哪里?
CodyBugstein 2015年

6
@Imray您可以.gitignore在git项目中放置任何位置-如果路径以开头,则该路径/将相对于.gitignore文件的位置;否则,它将递归引用当前目录及其后代目录中的文件。
Armand'1

109

1)创建一个.gitignore文件。为此,您只需创建一个.txt文件并按如下所示更改扩展名:

在此处输入图片说明

然后,您必须更改名称,在cmd窗口中编写以下行:

 rename git.txt .gitignore

git.txt您刚刚创建的文件的名称在哪里。

然后,您可以打开文件并将所有不想添加的文件写到存储库中。例如,我的看起来像这样:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

一旦有了它,就需要将其添加到您的Git存储库中。您必须将文件保存在存储库所在的位置。

然后,在Git Bash中,您必须编写以下行:

git config --global core.excludesfile ~/.gitignore_global

如果存储库已经存在,那么您必须执行以下操作:

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

如果第2步不起作用,则应编写要添加的文件的整个路径。


您可以在提示符下使用命令“ copy con .gitignore”,然后按CTRL + Z来直接创建文件,而无需Windows资源管理器。
heringer

61

无视:

git update-index --assume-unchanged <path/to/file>

撤消忽略:

git update-index --no-assume-unchanged <path/to/file>

6
我希望以此作为解决问题的方法。...它非常简单而优雅
user1457958

“它非常简单和优雅” — 并非如此:'不应将假设不变的情况用于忽略机制。这是“我知道我的文件系统操作很慢。我会向Git保证我不会更改这些路径 ...”尤其是,这并不是一个承诺... Git始终认为这些路径是未修改的-如果Git可以确定路径的话。 …已经更改而不会产生额外的lstat(2)费用,它保留报告路径已被修改的权利(… git commit -a可以自由提交更改)。
克里斯,

47

您可以使用以下方法忽略/不忽略跟踪文件中的更改。

  1. 对于忽略: git update-index --assume-unchanged <file>
  2. 要还原被忽略的文件: git update-index --no-assume-unchanged <file>

4
这适用于所有文件吗?不清楚如何将这些命令仅应用于单个文件以忽略/取消忽略它。
javadba

@kapil终于!! 在一万亿个git命令变体中实际上起作用的东西!尝试了所有答案,以忽略一些愚蠢的build.xml文件,这些文件在每次构建后都会不断出现……谢谢!
killjoy

1
请不要:'假设不变的机制不应被滥用。这是“我知道我的文件系统操作很慢。我会向Git保证我不会更改这些路径 ...”尤其是,这并不是一个承诺... Git始终认为这些路径是未修改的-如果Git可以确定路径的话。 …已经更改而不会产生额外的lstat(2)费用,它保留报告路径已被修改的权利(… git commit -a可以自由提交更改)。
克里斯,

22

.gitignore在.git所在的目录中创建一个。您可以在其中列出文件,并用换行符分隔。您还可以使用通配符:

*.o
.*.swp

3
避免将特定于工具的模式(即您的临时Vim文件)放入.gitignore文件中(除非项目强制使用该工具)是一种好习惯。您可以将自己喜欢的工具的模式放入每个用户的排除文件(set core.excludesFile)中;它们将在您所有的存储库中使用。例如git config --global core.excludesFile "$HOME/.git-user-excludes",然后将它们放在该文件中。
克里斯·约翰森

@克里斯:谢谢你的提示。但是我只是在那儿写了它,因为没有什么更好的主意了:)
总站

1
@ChrisJohnsen'特定工具?' 对于vim?我认为排除vim交换文件是安全的
。– javadba

16

从GitHub官方网站上:

如果您已经签入了文件,并且想忽略它,那么以后再添加规则时,Git将不会忽略该文件。在这种情况下,必须首先通过在终端中运行以下命令来取消跟踪文件:

git rm --cached FILENAME

要么

git rm --cached .

12

你应该写类似

*.class

到您的.gitignore文件中。


4
@AgentZebra您应该在其中添加一个条目*.class.gitignore以使git忽略所有以结尾的文件.class
KingCrunch'1

7

将您要忽略的文件添加到file .gitignore

*。类

*。项目

* .prefs

*。项目



5

如果您已经提交了文件,并且试图通过添加到.gitignore文件中来忽略它,那么Git将不会忽略它。为此,您首先必须执行以下操作:

git rm --cached FILENAME

如果您是重新启动项目,并且想要向Git忽略添加一些文件,请按照以下步骤创建Git忽略文件:

  1. 导航到您的Git存储库。
  2. 输入“ touch .gitignore”,这将创建一个.gitignore文件。

3

您还可以使用.gitattributes(而不是.gitignore)来排除整个文件类型。该文件非常不言自明,但是我将其内容粘贴在这里以供参考。注意最后一行(* .class二进制):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary

2

将以下行添加到.git / info / exclude:
Hello.class


您是否应该在文件夹中更改文件.git
彼得·莫滕森

也许手动触摸.git下的那些文件不是一个好主意。
mgyky



1

我试过了-

  1. 列出我们要忽略的文件

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. 复制步骤1的内容,并将其附加到.gitignore文件中。

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. 验证

git status .gitignore

同样,我们可以使用git状态添加要忽略的目录及其所有子目录/文件,directoryname/*然后从src目录执行此命令。



0

我尝试了--assume-unchanged和,.gitignore但都没有奏效。它们使切换分支变得困难,也难以合并来自其他分支的更改。这是我的解决方案:

当我提交时,我更改列表中手动删除文件

我以前,我藏匿已更改的文件。拉动之后,我会藏起来

  1. git存储
  2. git pull
  3. git stash pop

步骤3有时会触发合并,并可能导致您需要解决的冲突,这是一件好事。

这使我可以保留不与团队其他人共享的本地更改。

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.