【代码管理】Git删除仓库中的大文件压缩仓库大小

这篇具有很好参考价值的文章主要介绍了【代码管理】Git删除仓库中的大文件压缩仓库大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git 仓库中有时会不小心加入了一些大文件,例如模型文件,视频文件
模型文件有可能以 .weights 结尾,或者 .onnx 结尾等等
视频文件有可能以 .avi 结尾,或者 .mp4 结尾
大文件如果一直在仓库中,仓库体积会非常大,下面我们提供一个脚本,专门用于清理 仓库中的文件使用。

仓库清理脚本

本脚本旨在从指定的 Git 仓库中移除不必要的 .weights 文件,优化仓库,并将更改推送到远程服务器。它提供了用户交互、详细日志输出及错误处理功能,以实现顺畅且可靠的清理过程。

使用前准备

在使用本脚本之前,请确保满足以下条件:

  • 您拥有一个包含待移除 .weights 文件的 Git 仓库。
  • 已在系统上安装 Git。

可选:为了提升性能,建议安装 git-filter-repo 工具(通常通过 pip install git-filter-repo 安装)。如果安装了 git-filter-repo,脚本将自动使用它替代 git filter-branch 命令进行更高效的历史清理。

使用方法

  1. 下载或复制脚本:将以下脚本保存为 clean_repo.sh 文件。

#!/bin/bash
# 清理指定仓库中无用的.weights文件
# 通过命令行参数接收仓库地址(文件夹路径)

# 获取仓库路径(优先使用命令行参数,否则使用当前目录)
if [ -n "$1" ]; then
    repository_path="$1"
else
    repository_path="."
fi

# 检查路径是否存在且为Git仓库
if [ ! -d "$repository_path" ] || ! (cd "$repository_path" && git rev-parse --is-inside-work-tree &>/dev/null); then
    echo "Error: The specified path '$repository_path' is not a valid Git repository."
    exit 1
fi

# 用户确认是否继续
read -p "Are you sure you want to proceed with cleaning the repository at '$repository_path'? [y/N] " confirm
confirm=${confirm,,}  # Convert to lowercase
if [[ $confirm != "y" ]]; then
    echo "Aborting the operation."
    exit 0
fi

cd "$repository_path" || exit 1  # 切换到指定仓库目录,若失败则退出脚本

# 清理垃圾文件并记录结果
echo "Cleaning up unnecessary .weights files..."
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.weights' --prune-empty --tag-name-filter cat -- --all || {
    echo "Error: Failed to clean up .weights files. Check the output above for details."
    exit 1
}

# 记录清理前后的仓库大小
before_size=$(du -sh .git | cut -f1)
echo "Repository size before cleanup: $before_size"

# 提交到远程仓库
echo "Pushing changes to remote repository (this may take some time)..."
git push origin --force --all || {
    echo "Error: Failed to push changes to the remote repository. Check your network connection and authentication settings."
    exit 1
}

# 回收垃圾并压缩本地仓库
echo "Performing garbage collection and compression..."
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

# 可选:进行更深度的压缩(视情况决定是否需要)
git gc --aggressive --prune=now

# 记录清理后的仓库大小
after_size=$(du -sh .git | cut -f1)
echo "Repository size after cleanup: $after_size"

echo "Cleanup completed successfully."

  1. 赋予执行权限:在终端中,使用 chmod +x clean_repo.sh 命令为脚本赋予执行权限。

  2. 执行脚本

    • 指定仓库路径:运行 ./clean_repo.sh /path/to/repository,其中 /path/to/repository 是您要清理的仓库路径。
    • 使用当前目录:如果您想清理当前目录下的仓库,只需运行 ./clean_repo.sh

    脚本将引导您完成确认、清理、推送、压缩等步骤,并在过程中输出详细日志。文章来源地址https://www.toymoban.com/news/detail-858808.html

注意事项

  • 谨慎操作:清理操作会修改仓库历史,可能导致分支合并复杂性增加。请确保所有团队成员知晓此次清理,并在执行前备份重要数据。
  • 权限要求:执行清理和推送操作需具有相应的 Git 权限。确保您有权修改所清理仓库的历史记录及向远程服务器推送更改。
  • 性能影响:对于大型仓库,清理和压缩过程可能耗时较长。请耐心等待,并确保网络连接稳定。
  • 清理效果:清理后,仓库在本地和远程的大小可能不会立即更新。请等待一段时间后刷新查看,或联系服务提供商确认是否需要手动触发更新。

到了这里,关于【代码管理】Git删除仓库中的大文件压缩仓库大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [linux] .git/objects/pack 删除git的大文件

    参考:git进阶 | 03 -如何彻底删除git中的大文件_git 删除大文件_Mculover666的博客-CSDN博客 (1)查看当前5个大文件 (2)一个一个将大文件从提交记录中移除 (3)彻底删除 (4)查看.git目录大小 重新提交 但是报错: Git push error pre-receive hook declined。。。。于是查了一下。。是因

    2024年02月05日
    浏览(28)
  • git 配置,代码提交到仓库,不小心将node_modules上传,处理操作。.gitignore 删除已提交的文件

    我们经常会将将本地代码上传到线上仓库,例如uni项目,我们通常会忽略node_modules文件上传,其他同事从线上下载后,自行 npm install 安装,那如何进行忽略呢? 找到.gitignore文件,把你想要忽略上传的文件名称填进去即可。之后正常执行上传步骤。 而且在项目文件里面也没找到

    2024年02月13日
    浏览(52)
  • Git 删除远程仓库中的分支

    要删除远程 Git 仓库中的分支,您可以使用以下命令。请注意,删除远程分支可能会影响其他协作开发者,因此 请谨慎操作 , 谨慎 , 请谨慎操作 。 首先,确保您已经将本地分支删除(如果有必要): 或者,如果分支尚未合并,您可能需要使用 -D 标志来强制删除本地分支:

    2024年02月06日
    浏览(29)
  • 【Git】Git删除仓库.idea文件

    目录 1、控制台执行将.idea目录加入ignore清单 2、从git中删除idea缓存 3、将.gitignore文件加入git 4、提交gitiginore文件,且将.idea从源代码仓库中删除 5、PUSH 从gitee上自动生产的.gitignore没有忽略pycharn的python的.idea文件,本文讲述如何删除

    2024年02月10日
    浏览(35)
  • Git 删除 GitHub仓库的文件

    新建文件夹 git bash here 在新建的文件夹里右键git bash here打开终端,并执行git init初始化仓库 git clone 你的地址 找到github上要删除的仓库地址,并复制,在终端里输入git clone 你的地址 要删除文件的库里右键 git bash here 打开终端 在终端里输入 dir 查看此文件夹下的文件和目录(

    2024年02月12日
    浏览(41)
  • git 删除仓库中多余的文件或者文件夹

    目录 问题 解决方案 第一步:同步代码 第二步:删除文件 第三步:提交 第四步:推送远端 在项目开发测试阶段,将无意间将本地敏感的、或无用的文件或目录不小心提交到远程仓库,该怎么解决呢。  先pull远程代码,保持同步。 填写备注信息。 推送成功刷新仓库。 如果

    2024年01月16日
    浏览(65)
  • 在 Git 中删除不再位于远程仓库中的本地分支

    如果git仓库将branch1被删除,可以用用 git remote prune origin 删除在本地电脑上的 remotes/origin/branch1 git remote show origin 可以看到下面所示,这样的可以通过 git remote prune origin 删除 上述只针对Deletes stale references associated with name. 分支(stale为三个月没有提交的分支) 详解: git branch

    2024年02月09日
    浏览(44)
  • git删除远程仓库上已提交的文件/文件夹

    由于给本地项目配置远程库,误提交很多不应该提交的文件或文件夹,比如 .idea .settings .project .iml 以及日志等文件。以及由于 .gitignore 文件配置不正确很有可能导致某些不需要的目录上传到 git 远程仓库上了。除了注意配置 .gitignore 文件外,以下是解决办法。 提交了文件到自

    2024年02月11日
    浏览(77)
  • 删除Github仓库中的指定的文件或文件夹

    在Github 仓库中是无法通过鼠标操作直接删除文件和文件夹的,那只能通过 git 命令来执行删除操作,当我们想删除 First 分支中的 folder 文件夹及其内部的文件  和 file.c 文件  时 1.当电脑存在对应的本地文件夹时,直接拉取远程信息,并更新至最新数据。  这时文件中的数据

    2024年02月08日
    浏览(45)
  • 删除本地文件后,使用 git pull 命令从远程仓库无法拉取到被删除文件的解决方案

    一、问题描述: 从git上拉取文件后,在本地有修改文件,导致文件爆红。然后修改的内容又不想提交,就把爆红的文件删除掉了,想重新从git上拉取,但是此时却拉取不成功了。(虽显示已更新,但并未成功)  1.git pull 2.git status查看当前的状态,也提示了有被删除的文件。 二

    2024年01月18日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包