.gitignore is ignored by Git

.gitignore is ignored by Git

技术背景

在使用 Git 进行版本控制时,.gitignore 文件用于指定那些不需要被 Git 跟踪的文件或目录。然而,有时候会遇到 .gitignore 文件不生效的情况,即 Git 仍然跟踪了 .gitignore 中指定要忽略的文件。

实现步骤

通用解决步骤

  1. 备份仓库:为了避免数据丢失,在进行操作前最好备份仓库。
  2. 检查文件是否已被跟踪:如果文件已经被跟踪,需要先从缓存中移除。
1
2
3
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
  1. 检查编码问题:确保 .gitignore 文件的编码为 ASCII 或 UTF - 8。可以使用以下 PowerShell 命令将文件编码转换为 UTF - 8。
1
2
$Myfile = Get-Content .\.gitignore
$Myfile | Out-File -Encoding "UTF8" .gitignore
  1. 检查行尾符:不同操作系统使用不同的行尾符,确保 .gitignore 文件的行尾符与系统一致。
    • Windows:使用 Windows 行尾符(CR + LF)。可以在 Notepad++ 中通过 Edit -> EOL Conversion -> Windows Format 进行转换。
    • Linux:使用 Linux 行尾符(LF)。
  2. 检查注释和空格
    • 避免在 .gitignore 文件中使用内联注释。
    • 避免在规则前有空格或制表符,以及规则后有尾随空格。
  3. 检查文件路径:确保 .gitignore 文件位于项目的根目录。

特殊情况解决步骤

已提交文件

如果要忽略已经提交到仓库的文件,可以使用以下命令将其从仓库中移除,但保留在本地。

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

安装 PLM 软件后添加版本控制

如果在对已进行大量初始工作的项目添加版本控制后 .gitignore 不生效,且不敢使用 git rm --cached 命令,可以按以下步骤操作:

  1. 删除 .git.gitignore 文件。
1
2
rm -rf .git
rm -rf .gitignore
  1. 获取修改文件列表。
    • PowerShell
1
Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName
- **Bash**:
1
find ./ -type f -mtime -10
  1. 重新初始化仓库并创建 .gitignore 文件。
1
2
git init .
# Create and edit .gitignore

Visual Studio 2013 问题

如果 Visual Studio 2013 忽略了 .gitignore 文件,可以按以下步骤操作:

  1. 关闭 Visual Studio。
  2. 导航到 .git 文件夹。
  3. 删除 ms - persist.xml 文件。
  4. 重启 Visual Studio。

多个 Git 客户端冲突

如果同时运行多个 Git 客户端(如 “git shell” + “GitHub Desktop”)导致 .gitignore 不生效,应只使用一个 Git 客户端,尤其是在清除 Git 缓存时。

符号链接问题

如果 .gitignore 文件中忽略的目录是符号链接,需要调整规则。例如,将 lib/ext/ 改为 lib/ext

忽略自身问题

如果 .gitignore 文件设置为忽略所有文件,但又需要跟踪 .gitignore 文件本身,可以在文件中添加 !.gitignore

使用 sudo 编辑问题

如果使用 sudo 编辑 .gitignore 文件导致不生效,可以使用普通权限编辑,如 nano .gitignore

核心代码

从缓存中移除所有文件

1
git rm -r --cached .

添加所有文件并提交

1
2
git add .
git commit -m "fixed untracked files"

强制添加文件

1
2
git add -f [files you want to track again]
git commit -m "Refresh removing files from .gitignore file."

清理未跟踪文件

1
git clean -f

重置 HEAD

1
git reset HEAD --hard

最佳实践

  1. 在项目开始时就创建 .gitignore 文件,并在第一次提交前添加需要忽略的文件和目录。
  2. 将常用的忽略规则添加到 ~/.gitignore_global 文件中,让 Git 了解你通常忽略的文件。
  3. 定期检查 .gitignore 文件的编码、行尾符和规则是否正确。

常见问题

  1. 编码问题:不同的编码可能导致 .gitignore 文件不被正确解析。建议使用 UTF - 8 编码。
  2. 文件已被跟踪:如果文件已经被跟踪,.gitignore 文件将不再对其生效。需要先从缓存中移除该文件。
  3. 多个 Git 客户端冲突:同时运行多个 Git 客户端可能会导致冲突,建议只使用一个 Git 客户端。
  4. 符号链接问题.gitignore 文件中对符号链接的规则可能需要特殊处理。
  5. 注释和空格问题:内联注释、规则前的空格或制表符、规则后的尾随空格都可能导致规则失效。

.gitignore is ignored by Git
https://119291.xyz/posts/gitignore-is-ignored-by-git/
作者
ww
发布于
2025年5月27日
许可协议