git递归忽略某个文件夹
-
在
.gitignore
文件中使用通配符忽略整个build
文件夹及其内容- 简单的通配符方式:
- 你可以在
.gitignore
文件中添加一行build/
来忽略build
文件夹下的所有文件和子文件夹。这种方式会告诉Git,不要跟踪build
目录下的任何内容。
- 你可以在
- 递归忽略的更详细说明:
- 当你在
.gitignore
文件中写build/
时,Git会按照以下规则来处理:- 对于
build
目录本身,如果它还没有被添加到暂存区(未执行git add build
),那么它不会被添加。如果已经添加,需要先使用git reset HEAD build
(假设build
是一个文件夹,如果是文件则写具体文件名)取消暂存。 - 对于
build
目录下的所有文件和子目录,无论是现在已经存在的,还是将来新添加到build
目录下的,都会被忽略。例如,build/d01_main_control/bk7258/.ninja_deps
、build/d01_main_control/bk7258/.ninja_log
等所有在build
文件夹下的文件路径都会被忽略。 - 即使你在
build
文件夹下创建新的子文件夹和文件,它们也不会被Git跟踪,因为build/
这个规则是递归应用的。
- 对于
- 当你在
- 简单的通配符方式:
-
一些特殊情况和注意事项
- 已经被跟踪的文件:
- 如果
build
文件夹中的某些文件已经被提交到Git仓库中,仅仅在.gitignore
文件中添加build/
是不够的。这些文件仍然会被Git跟踪,因为Git已经记录了它们的历史。要真正停止跟踪这些文件,你需要从仓库历史记录中移除它们,这是一个比较复杂的操作,可能会影响仓库历史。 - 一种方法是使用
git filter - branch
命令,但这个命令要谨慎使用,因为它会重写提交历史。例如,如果你想从所有分支的历史中移除build
文件夹下的所有文件,可以使用类似以下的命令(这个命令可能会根据你的实际情况需要调整):git filter - branch --tree - filter 'rm -rf build' HEAD
- 这个命令会遍历每个提交,删除
build
文件夹,然后重新创建提交。但请注意,这个操作会改变仓库的提交历史,如果你已经将仓库推送到远程,并且其他人也在使用这个仓库,这可能会导致一些问题。
- 如果
- 排除部分文件或子文件夹(在忽略
build
文件夹的基础上):- 如果你想在忽略
build
文件夹的大部分内容的基础上,仍然跟踪build
文件夹下的某些特定文件或子文件夹,可以在.gitignore
文件中使用!
(否定)规则。例如,如果你想忽略build
文件夹下的所有内容,但仍然跟踪build/important_file.txt
这个文件,可以在.gitignore
文件中这样写:build/
- 这样,除了`important_file.txt`之外,`build`文件夹下的其他内容都会被忽略。
- 如果你想在忽略
- 已经被跟踪的文件: