Git Ignore 教程与操作指南

.gitignore 作用与基本概念

.gitignore 文件用于告诉 Git 哪些文件或目录不需要加入版本控制。常见场景包括忽略系统生成的临时文件、构建产物、日志文件以及依赖目录等。

.gitignore 文件基本格式

  • #:注释
  • /:表示路径的结尾
  • *:表示通配符

常见的 .gitignore 示例

# macOS 系统文件
.DS_Store

# Python 缓存与虚拟环境
__pycache__/
*.py[cod]
*.egg-info/
.venv/

# Node.js 相关
node_modules/
dist/
build/

# 日志与环境文件
*.log
.env

! 用法

  • 使用 ! 可以取消忽略某个文件或目录。

例如,忽略一个文件夹,但不忽略该文件夹中的某个特定文件或子文件夹。

# 忽略所有文件和文件夹
folder/*

# 不忽略 folder/subfolder/
!folder/subfolder/

如何设置 .gitignore 以忽略特定文件夹,但跟踪某些文件

假设你希望忽略 Model_Test/torch3_Test/BG_Test2/dataset_16/ 路径下的所有文件,但保留该路径下的 data_1 文件夹。操作如下:

  1. 修改 .gitignore 文件

    # 忽略 dataset_16 下的所有文件和文件夹
    Model_Test/torch3_Test/BG_Test2/dataset_16/*
    
    # 但是不忽略 dataset_16/data_1 文件夹
    !Model_Test/torch3_Test/BG_Test2/dataset_16/data_1/
    
  2. 从 Git 中移除不需要跟踪的文件
    如果这些文件已经提交到 Git 上,你需要从 Git 的索引中移除它们,但保留本地文件。使用 git rm --cached 命令从 Git 索引中移除它们。

    # 停止跟踪 dataset_16 中除 data_1 外的所有文件
    git rm -r --cached Model_Test/torch3_Test/BG_Test2/dataset_16/*
    git add .gitignore
    git commit -m "Add data_1 to .gitignore and stop tracking other files in dataset_16"
    git push
    
  3. 验证操作
    使用 git status 检查文件状态,确保不再跟踪不需要的文件,data_1 仍在跟踪中。

    git status
    

如何删除已提交到远程的文件,并且忽略它们

如果你已经提交了本应被忽略的文件,并且它们已经推送到远程仓库,你需要从 Git 中移除这些文件(本地文件不受影响)。

  1. 修改 .gitignore 文件:确保要忽略的文件已经加入 .gitignore,例如:

    # 忽略 node_modules 文件夹
    node_modules/
    *.log
    .env
    
  2. 从 Git 索引中移除不需要的文件

    # 停止跟踪这些文件(保留本地文件)
    git rm -r --cached node_modules/
    git rm --cached .env
    git rm --cached *.log
    
  3. 提交 .gitignore 更改与文件移除操作

    git add .gitignore
    git commit -m "Add .gitignore and untrack unnecessary files"
    git push origin main
    
  4. 清理本地忽略的文件(可选)
    如果你还希望删除本地工作区中的忽略文件,可以使用 git clean 命令:

    # 预演:查看将删除哪些文件
    git clean -ndX
    
    # 真正删除:清理被忽略的文件
    git clean -fdX
    

小结

  • .gitignore 文件用于忽略不需要的文件和目录。
  • 在首次提交时,可以提交需要的文件,后续通过 .gitignore 来忽略它们并将它们从 Git 索引中移除。
  • git rm --cached 允许从 Git 索引中移除文件(不删除本地文件)。
  • 使用 git clean 可以清理本地忽略的文件。