【Git】清理.git文件夹中的大文件及.gitignore简单使用 您所在的位置:网站首页 git文件颜色 【Git】清理.git文件夹中的大文件及.gitignore简单使用

【Git】清理.git文件夹中的大文件及.gitignore简单使用

2023-03-15 02:38| 来源: 网络整理| 查看: 265

清理.git文件夹斩草除根式

直接把根目录下面的.git文件夹删除,然后重建,简单粗暴,但如果需要git log历史记录的,请不要这样做

在本地仓库目录下删除根目录下的.git文件夹rm -r .git 或者 rm -rf .git​删除之后,该目录就不是一个git仓库了,因此需要重建删除掉残留的.git文件在命令行中输入rm -rf + github仓库地址:​rm -rf ​​https://github.com/xxx/xxx.git​在 github 的对应的库中到 setting 删除库。逐个攻破式

经常在训练模型、编译或者项目需要的时候上传大文件,然后git add -A全都提交了,就导致.git的历史记录过大,即使删除了本地的文件,但是又不想丢掉重来,只能一个个删除

(强烈建议使用.gitignore文件,忽略不需要提交的目录和文件)

使用git branch-filter来遍历git history tree, 可以永久删除 history 中的大文件,达到让.git文件瘦身的目的。

下面给出步骤(以下步骤非常危险,操作需谨慎!)

首先找出git中前N大的文件:以前五为例

​git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5​

执行的结果实际上是这样的:

第一行的字母其实相当于文件的id,用以下命令可以找出id 对应的文件名:

​git rev-list --objects --all | grep 8f10eff91bb6aa2de1f5d096ee2e1687b0eab007​

最大的文件找到了。

查出文件提交commit记录

​​git log --pretty=oneline --branches -- ​

删除文件

遍历所有提交: commit多了会比较慢

​​git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch ' --tag-name-filter cat -- --all

指定commit修改

​​git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch ' -- ​

回收内存

rm -rf .git/refs/original/

git reflog expire --expire=now --all

git fsck --full --unreachable

git repack -A -d

git gc --aggressive --prune=now

里面最重要的两条命令是 git filter-branch 和 gc, filter-branch 真正在清理,但是只运行它也是没用的,需要再删除备份的文件,重新打包之类的,最后的gc命令,用来收集产生的垃圾,最终清除大文件。

提交到远程仓库

​git push --force [remote] master​

.gitignore文件使用

如果我们想某个文件保留在项目中,又不想它受到 Git 的跟踪管理,那我们可以使用文件 .gitignore 文件,我们只需要创建该文件,然后并添加到我们项目的根目录中,最后把你想要忽略(让 Git 不进行跟踪)的文件名称填写到该文件中就可以了。如果我们要忽略 C.md 我们可以将这行添加到 .gitignore 文件中。

github贴心的为我们准备了一整套模板: https://github.com/github/gitignore

python template:https://github.com/github/gitignore/blob/master/Python.gitignore

简单梳理下语法规则:

如果只想忽略指定目录或文件,可以直接添加进去,每行一个

.gitignore支持正则匹配

空白行作为空格# : 将行标记为注释* : 与 0 个或多个字符匹配? :与 1 个字符匹配[abc] : - 与 a、b 或 c 匹配**: 与嵌套目录匹配,比如 a/**/z 与以下项匹配a/za/b/za/b/c/z​!​:取反

举例:

*.xml # 忽略所有 .xml 结尾的文件

!beans.xml # 忽略所有 .xml 结尾的文件,但是beans.xml除外

build/ # 忽略 build/ 目录下的所有文件

doc/*.txt  # 会忽略 doc/y.txt 但不包括 doc/xx/zzzz.txt

Ref:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有