阅读更多

1顶
0踩

非技术

转载新闻 如何清洗 Git Repo 代码仓库

2014-11-27 14:35 by 正式编辑 cao345657340 评论(0) 有6129人浏览

相信不少团队的代码仓库 Git Repo 变得越来越大。除了代码的提交外,时常有人会把二进制文件比如 Jar 包或者不小心把不改提交到代码库的文件提交到代码库中,比如用户名密码之类的保密信息。如何清洗代码仓库 Git Repo,彻底从历史中删除此类文件呢?

手动清理

如果你们的代码仓库问题比较少,只有几个不该提交的文件,可以参考 Atlassian 的一篇关于维护 Git Repo 的文章(见文章最后的链接)。

大致过程如下:

首先进行 Git 垃圾回收:

git gc --auto

其次查看 Git 仓库占用空间:

$ du -hs .git/objects
45M .git/objects

然后找出历史中超过一定大小的文件,最后在历史中删除并且提交。如果感兴趣手动处理这个过程可以参照文章后边的链接。

相关的几个命令:

清理历史中的文件:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ****/nohup.out' --prune-empty --tag-name-filter cat -- --all
git filter-branch --index-filter 'git rm --cached --ignore-unmatch ****/nohup.out' HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

强制提交覆盖:

git reflog expire --expire=now --all
git gc --prune=now
git push --all --force
git push --all --tags --force

但是这个方案有 2 个问题:1. 处理速度慢,尝试清理 2 G 大小的代码库,用了 1 晚上还没跑完。2. 只能按文件名清理,如果不同的路径有同样的文件名就无法处理了,可能误删文件或者忽略某些文件。当然有个非常好的解决方案完美解决了这个问题。

自动清理

答案就是 bfg-repo-cleaner,这是一个 Java 写的清理工具,多线程处理清理过程,命令很简单,只需要几分钟就清理了之前 1 晚上都跑不完的任务:

java -jar bfg-1.11.7.jar --delete-files *.zip myrepo.git
java -jar bfg-1.11.7.jar --delete-files *.log myrepo.git
java -jar bfg-1.11.7.jar --delete-files *.out myrepo.git
java -jar bfg-1.11.7.jar --strip-blobs-bigger-than 1M myrepo.git

附上几个常用的但又不常见的 git 小技巧:

复制代码仓库:

git clone --bare /var/www/html/myrepo.git

Git 后悔药,覆盖最后一次修改:

git add .
git commit --amend
git push origin master -f

Git 放弃本地修改:

git checkout .

Git 销毁最后一次提交:

git reset --hard HEAD^
git push -f origin HEAD^:master

打包时候嵌入版本号:

git rev-parse HEAD > version.txt

文章中涉及的链接:

 

来自: Bruce Dou Blog
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 多git版本管理-repo

    • 从高通或google下载代码是通过repo下载的,是由repo管理的266个git组成的 • l现在使用的git库是将由repo管理266个小git合并成一个git库导入 • 目前导入的repo是将项目定制化的内容取出,拆成由repo管理45个小...

  • linux git仓库删除,技术|如何清洗 Git Repo 代码仓库

    如何清洗代码仓库 Git Repo,彻底从历史中删除此类文件呢?手动清理如果你们的代码仓库问题比较少,只有几个不该提交的文件,可以参考 Atlassian 的一篇关于维护 Git Repo 的文章。大致过程如...

  • 建立git repo代码仓库

    repo管理多个git仓库 配置git环境安装git and ssh sudo apt-get install git-core openssh-server openssh-client 配置 git username and email git config –global user.name XXXX git config –global user....

  • git-repo多仓库协同概览

    git-repo多仓库协同概览 在实践中,Git 大仓库存在着诸多问题:下载慢、不能对授权进行精细控制。解决大仓库的一个有效方案是化整为零:将大仓库拆分为多仓库。 为了实现多仓库像一个仓库一样工作,Git提供一个原生...

  • 搭建git远程仓库,repo集成git仓库

    一、搭建远程git仓库 搭建git仓 需要先建立远程仓库和所需分支 远程仓库可以建立在不同或相同得服务器上 git init //选择一个目录 执行git init 会产生一个.git目录 如想建多个仓可以改成对应名称test.git 避免...

  • git基础教程(41)repo仓库管理工具介绍

    Android源码包含数百个git库,仅仅是下载这么多git库就是一项繁重的任务为了更加方便的管理由多个git仓库组成的工程,Android就引入了repo。 Android官方推荐下载repo的方法是通过Linux curl命令,下载完后,为repo...

  • Android repo代码仓库推送到公司的git服务器管理

    Android repo代码仓库上传到公司的git服务器修改记录 参考地址 0x00 首先从供应商那里拿到了一份AOSP的源码,比如我拿到的是Android8.1的源代码。 比如我的拿到的部分代码,只有一个.repo文件夹,文件夹大小为39G...

  • 多仓库管理工具git-repo部署

    git多仓库管理工具之repo的部署和使用

  • git&repo入门

    git&repo介绍

  • 搭建repo服务器管理多个git工程

    repo命令行工具,对git部分命令进行封装,将百多个git库有效的组织。

  • 如何使用 git 对两个 git repo 的代码内容进行对比?

    git remote add -f b path/to/repo_b.gitgit remote updategit diff master remotes/b/mastergit remote rm b

  • git管理代码分支 切换仓库

    然后切换到develop代码,pull 然后两个分支相互meger合并 就可以了 第二种方法 直接在develop分支上开发,每次commit之前或者之后 先update(pull),但是选中Rebase 然后commit 后push 有localChange怎么切换...

  • 如何将本地 Git Repo 推送到远程 Git Repo

    所以准备用Git管理,将代码推送到远程服务器上。 步骤如下: 本地创建一个工程 此时文件没有版本的概念 创建 Git 仓库 在项目根目录,右键 Git Bash Here 用 git init 命令创建本地 Git 仓库 可以看到项目根目录有...

  • Git&Repo基本命令整理

    git基本命令

  • git与repo区别?

    git与repo区别

  • git repo 入门 简介

    文章目录版本控制介绍一、原始版本控制二、本地版本控制三、集中版本控制四、分布式版本控制GIT一、获得GIT仓库二、GIT中版本的保存三、GIT文件操作 版本控制介绍 版本控制是什么已不用在说了,就是记录我们对文件、...

  • Git克隆、拉取最新代码、上传代码到远程仓库

    文章目录1、提交代码到仓库 1、提交代码到仓库 1)克隆 git clone http://xxx 2)添加 git add xxx 3)描述信息 git commit -m "提交" 4)推送到远程 git push origin master

  • 手把手教你搭建git、git-repo服务器

    手把手教你搭建git、git-repo服务器 文章目录手把手教你搭建git、git-repo服务器1.1 推荐博客1.2 测试Git服务器1.3 搭建repo服务器1.4 设置公私钥,免密 1.1 推荐博客 manifest.xml语法 repo服务器搭建1 repo服务器...

Global site tag (gtag.js) - Google Analytics