我将我的数据库备份到GIT,这样我就可以在家用电脑上获取数据库了。
我不希望这个文件被版本化,它只是一次性的事情。
我可以将其删除,因此GIT无法跟踪它的进展情况吗?
答案 0 :(得分:83)
我总觉得Guides: Completely remove a file from all revisions feed很有帮助。
删除名为
Rakefile
的文件:git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch Rakefile' \ --prune-empty --tag-name-filter cat -- --all
此命令将运行每个分支和标记的整个历史记录,从而更改任何提交 涉及文件
Rakefile
以及之后的任何提交。提交 之后是空的(因为它们只改变了Rakefile) 完全删除。
答案 1 :(得分:24)
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all
将FOLDERNAME替换为您要从给定git存储库中删除的文件或文件夹。
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
现在将所有更改推送到远程存储库
git push --all --force
这会清理远程存储库。
答案 2 :(得分:3)
您也可以轻松使用bfg。
BFG是git-filter-branch的一种更简单,更快速的替代方法,用于清除Git存储库历史记录中的错误数据:
删除疯狂的大文件 删除密码,凭证和密码其他私人数据
$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
或者只是替换某些文件的所有匹配项:
$ bfg --replace-text passwords.txt
检查https://rtyley.github.io/bfg-repo-cleaner/和https://help.github.com/articles/removing-sensitive-data-from-a-repository/
答案 3 :(得分:1)
您可以使用git filter-branch的--index-filter
。
答案 4 :(得分:0)
我想分享最适合我的最简单易懂的解决方案。
首先使用--mirror标志克隆存储库的新副本:
git clone --mirror https://github.com/username/youproject.git
然后从https://rtyley.github.io/bfg-repo-cleaner/下载最新版本的BFG jar文件,将其重命名为bfg.jar并将其粘贴到YourRepoName.git文件夹中。
然后在git bash中运行以下行。
java -jar bfg.jar --delete-files yourfilename
(仅需要文件名,无需提及路径)
git reflog expire --expire=now --all && git gc --prune=now --aggressive
(它将删除由于上述命令而被驱逐出的不需要的脏数据)
我在这里遇到了问题。我的项目有公开拉取请求。如果有任何打开的拉取请求,则需要运行此命令
git show-ref | cut -d' ' -f2 | grep 'pull-request' | xargs -r -L1 git update-ref -d
此后,您可以简单地推送master分支。
git push -u origin master
完成了。但是请记住在执行上述操作之前,将副本保留在旧存储库的本地中。所有未合并的分支和打开的请求都可能会被删除。
我通过删除不需要提交的apk文件将我的repo大小从40mb减小到4mb。