.gitignore被Git忽略了

时间:2012-07-12 12:09:56

标签: git gitignore

我的.gitignore文件似乎被Git忽略了 - .gitignore文件是否会被破坏? Git期望哪种文件格式,语言环境或文化?

我的.gitignore

# This is a comment
debug.log
nbproject/

git status的输出:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

我希望debug.lognbproject/不会出现在未跟踪的文件列表中。

我应该从哪里开始寻找解决方法?

35 个答案:

答案 0 :(得分:2696)

即使你到目前为止还没有跟踪这些文件,即使你将它们添加到.gitignore,Git似乎也能“知道”它们。

注意:首先提交您当前的更改,否则您将丢失它们。

然后从Git存储库的顶级文件夹中运行以下命令:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"

答案 1 :(得分:276)

如果Git似乎没有注意到您对.gitignore文件所做的更改,您可能需要检查以下几点:

  • 可能存在可能干扰您的本地{/ li>的全局.gitignore文件
  • 在.gitignore文件中添加内容时,请尝试以下操作:

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
  • 如果您从.gitignore文件中删除某些内容,并且上述步骤无效,请尝试使用

    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    // For example, if you want the .java type file to be tracked again,
    // The command should be:
    //     git add -f *.java
    

答案 2 :(得分:161)

固定。好的,我在Windows上的记事本中创建了.gitignore文件,但它无法正常工作。当我在Linux上查看.gitignore文件时,它看起来像有组织的乱码 - 也许记事本已经写出了Unicode而不是ASCII或8位。

所以我在我的Linux机器上重写了这个文件,当我把它拉回到Windows时它运行正常!乌拉!

答案 3 :(得分:94)

如果不向项目添加另一个提交,一行就足以使.gitignore正常工作:

git rm -r --cached debug.log nbproject

这将从存储库中删除它们,但仍然保留它们。用简单的英语,它会删除与它们相关的任何变更历史记录,也不会在将来的任何提交中跟踪它们的变化。您可以找到更好的解释here

答案 4 :(得分:37)

此问题的另一个原因是语句前的空格或制表符:

示例:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

正如下面的评论所指出的,尾随空格也是一个问题:

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace

答案 5 :(得分:28)

与其他解决方案一样,首先提交并注意丢失任何未提交的更改。

我的结果更好:

git rm -r --cached .
git reset HEAD --hard
git status

请注意,状态现在不应包含任何已修改的文件。

答案 6 :(得分:15)

这里的所有答案实际上都是解决方法。您需要在运行git remote set-url origin <new_ssh_url>之前创建.gitignore文件。否则git init永远不会知道您需要忽略这些文件,因为它们已经被跟踪过了。

git

如果您每天开发,我建议您将习惯性忽略的文件添加到echo .idea/ >> .gitignore git init 文件中。这样,~/.gitignore_global已经知道您(意思是“您的用户”,因为它是您主目录中的文件)通常会忽略哪些文件。

答案 7 :(得分:14)

在我的情况下,这是因为文件已存在于存储库中,我试图忽略它。

这些是我为解决这个问题所做的事情:

  • 将文件复制到临时文件夹
  • 从我的项目文件夹中删除它们。
  • 提交从存储库中删除这些文件的更改
  • 将这些文件重新添加到我的项目文件夹

到那时,我对这些文件所做的任何更改都会被忽略。

我认为您无法忽略存储库中已存在的文件。

答案 8 :(得分:12)

另请查看放置.gitignore

目录

它应该在项目的根目录

./myproject/.gitignore

不在

./myproject/.git/.gitignore

答案 9 :(得分:6)

我刚遇到这个问题。我的.gitignore文件中的内容继续出现在未跟踪文件列表中。

我用它来创建忽略文件:

sed -ie
's/^\s*worker\.\(.*\)\.balance_workers=\stgadmin1\(.*\)/worker.\1.balance_workers=\2\(.*\)/'
worker.txt

事实证明双引号对我来说是个问题。我删除了忽略文件,然后再次使用该命令没有引号,它按预期工作。我不需要搞乱文件编码。我在使用Cmder的Windows 10计算机上。

示例:

echo "node_modules" > .gitignore

答案 10 :(得分:5)

专门针对Windows用户:如果您有未跟踪文件并清除/删除缓存文件不起作用。尝试打开powershell并将.gitignore文件转换为UTF-8编码。

1)$ Myfile = Get-Content ..gitignore

2)$ Myfile = | Out-File -Encoding“UTF8”.gitignore

只需要执行一次编码该目录的.gitignore文件,并且因为无论何时编辑该文件,该文件都会正确编码,因此它应该可以正常工作。我相信这是因为GitHub不会为.gitignore文件读取非UTF-8编码。据我所知,Windows尚未解决此问题。不是太大的交易,只是在它不工作时调试很痛苦。

答案 11 :(得分:5)

我的问题是(如OP建议的)一个损坏的.gitignore文件。在其他一切都失败之前,我并不相信这是可能的并且忽视了这种可能性。损坏并未显示在vi 中,但文件开头有两个字节导致.gitignore文件被忽略。对我来说,这些只在我输入cat .gitignore时出现,显示:

��# Built application files
*.apk
*.ap_

# ...

不知道这些是如何结束的,但重新创建文件解决了问题。对损坏文件的十六进制分析显示如下:

user@dev ~/project/myproject $ xxd -b .gitignore 
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.

答案 12 :(得分:5)

我遇到了这个问题,其中.gitignore包含这一行:

lib/ext/

我刚才意识到,这个目录实际上是指向其他地方文件夹的符号链接:

ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib

lib/ext/行,git实际上查找文件夹,但符号链接是文件,因此我的lib文件夹不会被忽略。< / p>

我通过在我的.gitignore上用lib/ext/替换lib/ext来解决这个问题。

答案 13 :(得分:5)

对我来说,以前的答案都没有奏效。我必须将.gitignore文本复制到

中找到的exclude.txt文件中
<Your-project-folder>\.git\info

完成后,刷新更改并删除所有未跟踪的文件。像往常一样。

答案 14 :(得分:4)

我有同样的问题。我认为这个问题是CR与CR + LF的差异。我使用CMD(在Windows 7上)和以下命令在我的.gitignore中存储了一些东西:

为:

echo "file_to_be_ignored.py" >> .gitignore<br>
echo "*~" >> .gitignore

问题是这个命令没有为Git放置正确的行结束标记来识别换行符(当Git期望另一行时,CR或CR + LF)。我通过手动替换Vim中的每个换行符解决了这个问题(Vim救援!)并且它运行良好。

尝试在Notepad ++或Vim中编辑.gitignore(理想情况下)。即使文件看起来格式正确,也请尝试替换换行符。我知道这听起来很奇怪,但它对我有用。 :d

答案 15 :(得分:4)

已经有了一些很好的答案,但是我的情况很单调。我在Win10上编辑了已安装的PLM(产品生命周期管理)软件的源,然后决定:“我可能应该把它作为git存储库。”

因此,缓存选项将直接对我不起作用。为可能在完成大量初始工作后又添加了源代码控制并且.gitignore无法工作的其他人发布信息,您可能会害怕丢失大量工作,因此git rm --cached不适合您。

!重要提示::这确实是因为我将git添加到一个“项目”中为时已晚,该项目太大并且似乎忽略了我的.gitignore。我从来没有承诺。我可以摆脱这个:)

首先,我刚刚做了

rm -rf .git
rm -rf .gitignore

然后,我必须了解我的更改。同样,这是我进行了更改的安装产品。对于纯主分支的第一次提交为时已晚。因此,我需要一个清单,列出自从我通过将> changed.log添加到以下任意一项来安装程序以来所做的更改:

PowerShell

# Get files modified since date.
Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName

重击

# Get files modified in the last 10 days...
find ./ -type f -mtime -10

现在,我有过去十天所做更改的清单(除了说是,是,我对自己做了这件事,这里不介绍最佳做法)。

现在要重新开始:

git init .
# Create and edit .gitignore

我不得不将更改后的列表与不断增长的.gitignore进行比较,并在改进后运行git status,但是我对.gitignore的编辑随即可以读取。

最后,我列出了所需的更改!在我的案例中,它是样板文件-一些主题工作以及针对该软件运行开发系统的特定服务器XML配置,我希望将其放入一个回购协议中,以供其他开发人员获取并做出贡献...这将是我们的主分支,因此致力于,推动并最终分支从事新工作!

答案 16 :(得分:3)

好的,所以在我的情况下,接受的解决方案不起作用,这里描述的是什么:

Is Visual Studio 2013 ignoring your .gitignore file?

简而言之:

  • 关闭Visual Studio。
  • 导航到.git文件夹
  • 删除ms-persist.xml
  • 重新启动Visual Studio

答案 17 :(得分:2)

还要注意一点:您是否使用正确的行结尾保存.gitignore文件?

视窗:

如果您在Windows上使用它,是否使用Windows行结尾保存它?并非所有程序都默认执行此操作; Notepad ++和许多PHP编辑器默认使用Linux行结尾,因此文件将与服务器兼容。检查此问题的一种简单方法是在Windows记事本中打开该文件。如果所有内容都显示在一行上,则该文件以Linux行结尾保存。

Linux的:

如果您在Linux环境中使用该文件时遇到问题,请在Emacs或nano等编辑器中打开该文件。如果您看到任何不可打印的字符,则该文件已使用Windows行结尾保存。

答案 18 :(得分:2)

每当我遇到 git 正在跟踪 .gitignore 中列出的文件的情况时,我都会使用以下内容:

git update-index --skip-worktree <file_name>

答案 19 :(得分:1)

其他答案未涉及的一个棘手的问题是,如果您有内联评论,.gitignore文件将不起作用,如下所示:

foo/bar # The bar file contains sensitive data so we don't want to make this public

所以,如果你有这样的评论,请改变它们:

# The bar file contains sensitive data so we don't want to make this public
foo/bar

答案 20 :(得分:1)

通过以下命令删除先前在Git中提交的文件夹或文件。然后gitignore文件将反映正确的文件。

    git rm -r -f "folder or files insides"

答案 21 :(得分:1)

我看到你们中的一些人已经回答了,但我不知道是否说清楚。就我而言,问题是使用 echo 命令创建 .gitignore 文件。在这种情况下,文件编码已更改,我必须打开文本文件,单击另存为并将底部选项卡中的编码更改为 UTF-8。使用 touch 命令创建文件并通过文本编辑器编辑其内容时,没有出现 .gitignore 问题。

答案 22 :(得分:1)

使用.gitignore命令编辑sudo文件也是有可能的。我在执行命令git status时遇到了同样的问题,我仍然可以看到“应该被忽略”的文件。

使用nano .gitignore而不是sudo nano .gitignore进行编辑时,我可以看到正确的反射。

答案 23 :(得分:1)

我的30分技巧:

  1. 请清理您的目录。 git clean -f(我尝试过git rm -r --cached .,但对我来说无效。)

警告:git clean -f将删除未跟踪的文件,这意味着它们永久消失了,因为它们没有存储在存储库中。在执行此操作之前,请确保您确实要删除所有未跟踪的文件。

也许您可以尝试使用git clean -xdf来删除被忽略的目录和未跟踪的文件

  1. 现在将HEAD带到当前位置 git reset HEAD --hard
  2. 选中git status

  3. 现在创建.gitignore,在我的情况下,它想忽略名为data的文件夹。所以我写了/data/(初始/用于文件/文件夹,后来的/仅用于文件夹)。

  4. 现在进行git添加,提交和推送。

答案 24 :(得分:0)

这里有很多答案,但对我有用的并不完全适用于任何特定的答案,我正在以一种简单的方式逐一记下需要在这里完成的所有步骤:

Pre --- 备份 repo 以防万一。(我没有,但可能会让你感觉更安全)

  1. 确保这是您的第一次提交还是更早的这些文件被添加并因此被缓存。
  2. 如果是,则 git rm -r --cached 。和 git add 。 (不要错过点)
  3. 如果还是不行,用记事本打开文件
  4. 转到文件 -> 另存为
  5. 将编码更改为 ANSI。 (有些答案错误地说 UTF-8 ,但它不起作用并且不必要地浪费时间)
  6. 再次 git rm -r --cached 。和 git add 。 (不要错过点)
  7. 现在做 Git 状态并验证我们想要的已经发生

答案 25 :(得分:0)

PhpStorm(可能还​​有其他一些IDE用户),在我的情况下,问题是我通过查找程序在项目外部创建并添加了文件。

我删除了那一个,然后在PhpStorm项目中重新创建了那个,然后右键单击->新建->文件,它立即生效。

答案 26 :(得分:0)

这听起来很愚蠢,但是解决了我问题的是意识到.gitignore 正常工作,即使它在git status上显示了deleted: yourfile

我将忽略错误日志文件,以忽略我引起的任何错误,但是保存其他开发人员引起的错误,以防它们在调试一个奇怪问题的一天中派上用场。但是,git不允许您“忽略”并同时保留一个文件。

我希望它能“及时冻结”,但是git说它要么被跟踪,要么根本不允许它存在。

答案 27 :(得分:0)

我的问题是我写下了要用引号“”而不是斜杠/忽略的文件。

这不起作用,被git忽略了:

"db.sqlite3"
"tdd_venv/"

这很好用:

/db.sqlite3
/tdd_venv/

我还使用Notepad ++在Windows中检查了文件编码。编码设置为UTF-8。

答案 28 :(得分:0)

我的行不通是因为我从字面上创建了一个名为.gitignore的文本文档

相反,创建一个文本文档,在Notepad ++中打开它,然后另存为.gitignore

在保存时,请确保从下拉菜单中选择所有类型(*。*)。


或者在gitbash中,只需使用touch .gitignore

答案 29 :(得分:0)

我在Ubuntu上也遇到了同样的问题,我从终端创建了[2019-07-19 20:54:39 -0300] [7786] [INFO] Starting gunicorn 19.9.0 [2019-07-19 20:54:39 -0300] [7786] [INFO] Listening at: http://127.0.0.1:8000 (7786) [2019-07-19 20:54:39 -0300] [7786] [INFO] Using worker: sync [2019-07-19 20:54:39 -0300] [7789] [INFO] Booting worker with pid: 7789 [2019-07-19 20:54:39 -0300] [7789] [ERROR] Exception in worker process Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker worker.init_process() File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/base.py", line 129, in init_process self.load_wsgi() File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi self.wsgi = self.app.wsgi() File "/usr/local/lib/python3.6/dist-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/usr/local/lib/python3.6/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load return self.load_wsgiapp() File "/usr/local/lib/python3.6/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp return util.import_app(self.app_uri) File "/usr/local/lib/python3.6/dist-packages/gunicorn/util.py", line 350, in import_app __import__(module) File "/home/ubuntu/renato-sfera/mysite/wsgi.py", line 12, in <module> from django.core.wsgi import get_wsgi_application ModuleNotFoundError: No module named 'django' [2019-07-19 20:54:39 -0300] [7789] [INFO] Worker exiting (pid: 7789) [2019-07-19 20:54:39 -0300] [7786] [INFO] Shutting down: Master [2019-07-19 20:54:39 -0300] [7786] [INFO] Reason: Worker failed to boot. ,它对我有用

.gitignore

答案 30 :(得分:0)

Please try:
git rm . -r --cached
git add .
git commit -m "fixed all files .gitignore not working"
Thank you!

答案 31 :(得分:0)

另一个可能的原因一些同时运行git客户端的实例。例如“ git shell” +“ GitHub Desktop”等。


这发生在我身上,我使用“ GitHub Desktop”作为主要客户端,并且它忽略了一些新的.gitignore设置:提交后提交:

  1. 您承诺某事。
  2. 接下来,提交:它将忽略.gitignore设置。提交包括.gitignore中提到的许多临时文件。
  3. 清除git缓存;检查.gitignore是否为UTF8;删除文件->提交->将文件移回;跳过1次提交-没有帮助。

原因:Visual Studio Code编辑器在后台运行且具有相同的打开的存储库。 VS Code具有内置的git控件,这会引起一些冲突。

解决方案:仔细检查多个隐藏的git客户端,一次只使用一个git客户端,尤其是在清除git缓存时。

答案 32 :(得分:0)

我已经在Windows的Powershell中使用echo“ ...”>。gitignore创建了.gitignore,因为它不允许我在资源管理器中创建它。

我的问题是所创建文件的编码,将其更改为ANSI后,问题得以解决。

答案 33 :(得分:0)

对我来说,这是另一个问题。我的.gitignore设置为忽略所有东西,除了我告诉它不要忽略的东西。像这样:

/*
!/content/

现在这显然意味着我也在告诉git忽略.gitignore本身。只要我不跟踪.gitignore,这都不是问题。但是在某个时候我提交了.gitignore本身。然后导致.gitignore被正确忽略。

因此,再添加一行即可解决问题:

/*
!/content/
!.gitignore

答案 34 :(得分:0)

如果您是Notepad ++用户,请尝试执行以下操作:

使用Notepad ++打开.gitignore文件并执行:

修改&gt; EOL转换&gt; Windows格式&gt;保存

尝试再次使用git status并查看它是否适合您。

我已将答案发布到类似问题here