如何阻止 git 存储库变得太大
How to stop git repositories from getting too big
经过几周的提交,我的 Matlab 代码存储库的 .git 文件达到了 1-1.5 GB 的大小。如何控制 git 注册表的大小?
作为最佳实践,我已经做的是:
避免在我的模拟过程中使用 Matlab 写入的大量文件使存储库混乱,这是通过更新 .gitignore 文件来避免 committing/pushing 它们来完成的
避免包含需要大量提交的二进制文件或办公文件,就编辑的行数而言
定期使用
这样的命令
git reflog expire --all --expire=now
git gc --prune=now --aggressive
清理注册表
我认为正在发生的事情是,每次 matlab 模拟某些东西并写入大量文本文件或 .mat 变量时,git 都会跟踪所有更改。给它一个星期,回购超过 1.5 GB。
我应该只在存储库中保留实际的 "code" 并避免保存任何变量吗?
您可以将数据和代码分开,
文件树如下:
\项目
\project/code/matlab_files.m
\project/code/.git
\project/data/matlab_data_files
这样您就不会将数据推送到 github。在推送之前确保清除 matlab 中的变量。这可以通过关闭 Matlab 或使用 "clear all" 命令来完成。
想要保留数据?将其写入 /project/data 文件夹。
find .git -name pack-*.idx -exec git verify-pack -v {} +
将列出所有包的内容,并给出每个部分在包文件中的实际大小。要将这些与名称相关联,整体上最有效的可能是连接,
join <(find .git -name pack-*.idx -exec git verify-pack -v {} + | sort) \
<(git rev-list --all --objects | sort) \
| sort -nk4,4
对象类型之后的字段(tree
、blob
、commit
,你在 blob 之后)是工作树中结果的完整大小,在那之后,第四个字段是它的增量在包中的大小。更改顺序,按文件排序会很容易,这里仅显示文件和相关数据位,按文件:
join <(git rev-list --all --objects | sort ) \
<( find .git -name pack-*.idx -exec git verify-pack -v {} + \
| awk '=="blob" { print ,, } ' \
| sort) \
| sort -k2 -nk4
经过几周的提交,我的 Matlab 代码存储库的 .git 文件达到了 1-1.5 GB 的大小。如何控制 git 注册表的大小?
作为最佳实践,我已经做的是:
避免在我的模拟过程中使用 Matlab 写入的大量文件使存储库混乱,这是通过更新 .gitignore 文件来避免 committing/pushing 它们来完成的
避免包含需要大量提交的二进制文件或办公文件,就编辑的行数而言
定期使用
这样的命令git reflog expire --all --expire=now git gc --prune=now --aggressive
清理注册表
我认为正在发生的事情是,每次 matlab 模拟某些东西并写入大量文本文件或 .mat 变量时,git 都会跟踪所有更改。给它一个星期,回购超过 1.5 GB。
我应该只在存储库中保留实际的 "code" 并避免保存任何变量吗?
您可以将数据和代码分开, 文件树如下:
\项目
\project/code/matlab_files.m
\project/code/.git
\project/data/matlab_data_files
这样您就不会将数据推送到 github。在推送之前确保清除 matlab 中的变量。这可以通过关闭 Matlab 或使用 "clear all" 命令来完成。 想要保留数据?将其写入 /project/data 文件夹。
find .git -name pack-*.idx -exec git verify-pack -v {} +
将列出所有包的内容,并给出每个部分在包文件中的实际大小。要将这些与名称相关联,整体上最有效的可能是连接,
join <(find .git -name pack-*.idx -exec git verify-pack -v {} + | sort) \
<(git rev-list --all --objects | sort) \
| sort -nk4,4
对象类型之后的字段(tree
、blob
、commit
,你在 blob 之后)是工作树中结果的完整大小,在那之后,第四个字段是它的增量在包中的大小。更改顺序,按文件排序会很容易,这里仅显示文件和相关数据位,按文件:
join <(git rev-list --all --objects | sort ) \
<( find .git -name pack-*.idx -exec git verify-pack -v {} + \
| awk '=="blob" { print ,, } ' \
| sort) \
| sort -k2 -nk4