ChatGPT解决这个技术问题 Extra ChatGPT

如何忽略 Git 中的某些文件

我有一个包含文件 Hello.java 的存储库。当我编译它时,会生成一个额外的 Hello.class 文件。

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

如何让 Git 忽略 Hello.class

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

P
Peter Mortensen

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


命令 git rm --cached name_of_file 将从您的 git 存储库中删除该文件。即使您将其添加到您的 .gitignore 文件中。这不是忽略正在删除。
在这种情况下,这似乎是 OP 想要的。
我很高兴您的解决方案适用于 @Kohan95!尽管应根据所选答案重命名此问题。我的评论只是对可能不知道该命令做什么的开发人员的警告。
git reset name_of_file 删除跟踪并且不删除文件。
试过 git rm --cached 它确实删除了 repo 中的文件,但是由于它在 .gitignore 文件中,因此没有删除本地副本。进一步说明,要添加目录,您需要使用尾部正斜杠“/”将其放入。我正在删除某人签入的 ruby 项目中的 Rubymine 配置目录,即“.idea”。在文件中,我放入“.idea/”,然后放入“git rm --cached -r .idea”以删除目录及其下的所有内容(因为 git 仅版本文件,而不是目录。)
P
Promise Preston

如何忽略新文件

全球范围内

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

本地

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

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

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

git update-index --assume-unchanged <file1> <file2> <file3>

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

git update-index --no-assume-unchanged <file1> <file2> <file3>

非常适合防止持有当前 api 密钥的文件被推送到 github!
@Xman 为什么你说它是暂时的?我完成了您为 local git ignore 提到的步骤,并重新启动了我的系统,它仍然显示直接正常工作。
感谢有用的 update-index 技巧,绝对完美避免更改 .gitignore 文件,然后由 Git 跟踪!
@mcbjam 没有特殊的 git ignore 命令。编辑位于工作副本中适当位置的 .gitignore 文件。然后你应该添加这个 .gitignore 并提交它。克隆该存储库的每个人都将忽略这些文件。
git update-index --assume-unchanged 正是我需要能够从本地删除 .htpasswd 并将其保留在生产环境中
P
Peter Mortensen

将以下行添加到文件 .gitignore:

/Hello.class

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

git rm Hello.class

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

*.class

Hello.class 添加到 .gitignore 将忽略任何子目录中名为 Hello.class 的任何文件。如果您打算只忽略与 .gitignore 文件位于同一目录中的文件 Hello.class,请改用 /Hello.class 行。
您将 .gitignore 文件放在哪里?
@Imray 您可以将 .gitignore 放在 git 项目中的任何位置 - 如果路径以 / 开头,它将相对于 .gitignore 文件的位置;否则它将递归引用当前目录及其后代目录中的文件。
P
Peter Mortensen

在 Windows 上

创建一个 .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

# Microsoft Office temporary files
~$*

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

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

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

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

git rm -r --cached 。混帐添加。 git commit -m ".gitignore 正在工作"

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


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

无视:

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

要撤消忽略:

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

我希望它成为解决问题的最佳方法......它非常简单优雅
“它非常简单和优雅”—not really:'Assume-unchanged 不应被滥用于忽略机制。它是“我知道我的文件系统操作很慢。我会向 Git 保证我不会更改这些路径...”尤其是 一个承诺……Git 将始终认为这些路径是未修改的——如果 Git 可以确定一条路径……已更改而不会产生额外的 lstat(2) 成本,它保留报告该路径的权利已修改(…git commit -a 可以自由提交该更改)。
P
Peter Mortensen

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

忽略: git update-index --assume-unchanged 恢复忽略的文件: git update-index --no-assume-unchanged


这适用于所有文件吗?目前尚不清楚这些命令如何仅应用于单个文件以忽略/取消忽略它。
@kapil 终于!!在万亿个 git 命令变体中实际起作用的东西!尝试了所有答案以忽略每次构建后不断出现的一些愚蠢的 build.xml 文件……谢谢!
Please don't: 'Assume-unchanged 不应被滥用于忽略机制。它是“我知道我的文件系统操作很慢。我会向 Git 保证我不会更改这些路径...”尤其是 一个承诺……Git 将始终认为这些路径是未修改的——如果 Git 可以确定一条路径……已更改而不会产生额外的 lstat(2) 成本,它保留报告该路径的权利已修改(…git commit -a 可以自由提交该更改)。
P
Peter Mortensen

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

*.o
.*.swp

避免将特定于工具的模式(即您的临时 Vim 文件)放在 .gitignore 文件中是一种很好的做法(除非项目要求使用该工具)。您可以将您喜欢的工具的模式放入每个用户的排除文件中(设置 core.excludesFile);它们将适用于您的所有存储库。例如git config --global core.excludesFile "$HOME/.git-user-excludes",然后将它们放入该文件中。
@Chris:感谢您的提示。但我只是在那里写了它,因为我没有想到更好的东西:)
@ChrisJohnsen '工具特定?'为 vim??我认为排除 vim 交换文件是安全的..
P
Peter Mortensen

来自官方 GitHub 站点:

如果您已经签入了一个文件,并且您想忽略它,那么如果您稍后添加规则,Git 将不会忽略该文件。在这些情况下,您必须先取消跟踪文件,方法是在终端中运行以下命令:

git rm --cached FILENAME

或者

git rm --cached .

R
Rahul Garg

转到 .gitignore 文件并添加要忽略的文件的条目运行 git rm -r --cached 。现在运行 git add 。


这根本不是一个好的解决方案。删除所有文件,然后将它们再次添加到暂存区域似乎有点矫枉过正。
矫枉过正对我有用!非常适合一次性练习。
这是完美的答案
K
KingCrunch

你应该写类似

*.class

到您的 .gitignore 文件中。


@AgentZebra 您应该在 .gitignore 中添加一个条目 *.class 以使 git 忽略所有以 .class 结尾的文件。
P
Peter Mortensen

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

*。班级

*.项目

*.prefs

*。项目


P
Peter Mortensen

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

git rm --cached FILENAME

如果您刚开始项目并且想要将一些文件添加到 Git 忽略,请按照以下步骤创建 Git 忽略文件:

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


P
Peter Mortensen

首先创建一个 .gitignore 文件,我们必须在其中存储要忽略的文件和目录的名称。

忽略目录;

name_of_directory/

忽略文件;

name_of_file

我们不需要提供要忽略的文件或目录的完整路径;我们只需要提供它的名字。

如果您想忽略所有具有相同扩展名的文件;

*.pyc  #will ignore all files with pyc extention

此外,上述内容仅在您尚未将文件添加到 Git 时才第一次起作用。但是,如果我的错误是您将文件添加到 Git,而现在您希望在其余提交中忽略该文件,则需要首先通过运行此命令清除有关该文件的 Git 缓存;

git rm -r --cached <path_of_the_file>

其余的都是一样的,即在.gitignore文件中添加名称。


C
Community

通过创建 .gitignore 文件。有关详细信息,请参见此处:Git Book - Ignoring files

还要检查这个:How do you make Git ignore files without using .gitignore?


P
Peter Mortensen

利用:

git reset filename
git rm --cached filename

然后添加您要忽略的文件。然后提交并推送到您的存储库。


P
Peter Mortensen

我试过这个 -

列出我们要忽略的文件 git status .idea/xyz.xml .idea/pqr.iml 输出 .DS_Store 复制第 1 步的内容并将其附加到 .gitignore 文件中。 echo ".idea/xyz.xml .idea/pqr.iml 输出 .DS_Store" >> .gitignore 验证 git 状态 .gitignore

同样,我们可以使用 directoryname/* 添加一个目录及其所有子目录和我们想要在 Git 状态中忽略的文件。我从 src 目录执行了这个命令。


M
Manohar Reddy Poreddy

我对文件“dump.rdb”有类似的问题。我尝试以各种方式将此文件添加到 .gitignore 文件中,但只有一种方式有效。

在 .gitignore 文件的末尾添加您的文件名

注意:将文件添加到其他任何地方都不起作用。

例如,请参阅:https://gitlab.com/gitlab-org/gitlab-ce/raw/b3ad3f202478dd88a3cfe4461703bc3df1019f90/.gitignore


P
Peter Mortensen

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

# 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

D
Dado

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


您是否应该更改文件夹 .git 中的文件?
也许,手动触摸 .git 下的那些文件不是一个好主意。
P
Peter Mortensen

.gitignore 一起工作时,This webpage 可能有用且节省时间。

它会自动为不同的 IDE 和操作系统生成 .gitignore 文件,其中包含您通常不想拉入 Git 存储库的特定文件/文件夹(例如,特定于 IDE 的文件夹和配置文件)。


P
Peter Mortensen

如果要忽略已签入的文件,则必须在添加规则以忽略它之前取消跟踪该文件:

git rm --cached FILENAME

现在提交更改并将文件路径添加到 .gitignore 文件。


P
Peter Mortensen

如果之前将任何文件添加到 Git,则删除该文件并将该文件添加到 .gitignore 中。

示例:如果无法忽略在添加 spm 依赖项期间生成的 package.resolved 文件。

我在 .gitignore 文件中添加了以下几行:

Packages/
Package.pins
Package.resolved
*.xcworkspace

并删除了 package.resolved 文件。现在 Git 开始忽略我的 package.resolved 文件。


什么是“spm 依赖”?您的意思是“一个 SPM (Swift Package Manager) 依赖项”Swift。最好通过 editing (changing) your answer 回复,而不是在评论中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
J
John Henckel

我尝试过 --assume-unchanged.gitignore,但效果都不好。它们使切换分支变得困难,并且难以合并来自其他分支的更改。这是我的解决方案:

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

在我拉之前,我存储了更改的文件。拉后,我做了一个藏匿点。

git stash git pull git stash pop

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

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


P
Peter Mortensen

您也可以使用例如 Sourcetree 并在添加到分支并已修改的文件上按 ppm,然后选择“停止跟踪”。该文件现在将用问号图标指定,当您再次 ppm 访问该文件时,您现在可以选择“忽略”。这将通过其相对路径将此特定文件添加到 gitgnore


“ppm”是什么意思?是缩写吗?或者是其他东西?
P
Peter Mortensen

您可能遇到的一种情况是 .gitignore 不会忽略您之前提交的文件。您应该首先从存储库中删除或移动这些文件,提交您刚刚所做的更改,然后将“*.class”添加到 .gitignore。


P
Peter Mortensen

直接来自 Atlassian:.gitignore

如果您想忽略过去提交的文件,则需要从存储库中删除该文件,然后为其添加 .gitignore 规则。

--cached 选项与 git rm 一起使用意味着该文件将从您的存储库中删除,但它将作为一个被忽略的文件保留在您的工作目录中。

您的工作目录中应该仍然有该文件,但它无法推送到您的远程存储库,除非您强制它。


您的解决方案已经反映在其他答案中
Q
Qamar Abbas

要从 GIT 中删除已提交/暂存的文件 git rm --cached <file_name> 将以下行添加到文件 .gitignore/<file_name> 如果您想从 Git 中排除所有类文件,请将以下行添加到 .gitignore*<file_extension>


P
Peter Mortensen

对于已编译的代码,只需编写:

.class or .o

欢迎来到堆栈溢出。当添加一个包含已接受答案和其他 19 个答案的九岁问题的答案时,指出您的答案所针对的问题的新方面非常重要。