清除git对某个文件或目录的跟踪

 

保持git仓库的干净。

清除git对某个文件或目录的跟踪

使用场景:

  1. 有时候随着项目的进行,会发现有一些文件或目录不应该被git跟踪,但是已经被git跟踪了,这时候就需要清除git对这些文件或目录的跟踪。
  2. 不小心上传了一些不应该敏感的数据,需要清除git对这些文件或目录的跟踪。

How to install2

pip install git-filter-repo

More installation ways, see git-filter-repo

How to use1.3

注意使用前一定要将仓库备份,避免误删重要文件。
git filter-repo --invert-paths --path PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"
git push origin --force --all

Manpage of git-filter-repo4

根据使用的这个工具的名字filter,不难想象可以做很多匹配修改的事情,但这里只涉及如何根据文件名或者目录名来清除git对某个文件或目录的跟踪。

1. --invert-paths
    反向匹配,即匹配除了指定的文件或目录之外的所有文件或目录。
2. --path <dir_or_file>
    指定要匹配的文件或目录。
3. --path-regex <regex>
    指定要匹配的文件或目录的正则表达式。

更多的用法,可以参考git-filter-repo manpage

参考资料

  1. Remove folder and its contents from git/GitHub’s history
  2. git-filter-repo
  3. git doc – remove sensitive data
  4. git-filter-repo manpage