git递归忽略某个文件夹

  1. .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_depsbuild/d01_main_control/bk7258/.ninja_log等所有在build文件夹下的文件路径都会被忽略。
        • 即使你在build文件夹下创建新的子文件夹和文件,它们也不会被Git跟踪,因为build/这个规则是递归应用的。
  2. 一些特殊情况和注意事项

    • 已经被跟踪的文件
      • 如果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/
        
      !build/important_file.txt
      - 这样,除了`important_file.txt`之外,`build`文件夹下的其他内容都会被忽略。
      

你可能感兴趣的:(git)