如何压缩本地git仓库

时间:2016-02-15 13:15:03

标签: git

我是否可以在已拥有所有历史记录的本地已克隆仓库中获得git clone --depth=1的结果,同时目标是保留所有被忽略的文件?

我有几个git项目消耗大量空间,我想删除所有git历史记录以释放一些空间。感谢。

更新

更确切地说:

  • 我不想在这里和那里移动文件,删除仓库,重新创建等任何手动工作
  • 我有一些assume-unchanged状态的配置文件必须保留
  • 我有许多gitignored文件必须留在原地

这些原因可以说清楚为什么我不想重新克隆并设置30个回购的所有凭据和内容。

理想情况下,我正在寻找一些我甚至可以在所有项目中批量运行的东西。如果没有这样的话,那么我当然可以使用它。

2 个答案:

答案 0 :(得分:1)

  

我有几个git项目消耗大量空间,我想删除所有git历史记录以释放一些空间。感谢

为什么不简单地删除项目并使用git clone --depth --branch ...重新克隆它以克隆特定分支和最新提交。

如何打包您的存储库:

你必须运行gc才能做到这一点。

# Expire all the unreachable content and pack the repo in the most 
# compact way.
git gc --aggressive --prune=now

# also clear the reflog as well
git reflog expire --expire=now --all

清理大文件

您应该使用此工具清理存储库历史记录:
https://rtyley.github.io/bfg-repo-cleaner/

这是完成此类任务的完美工具

  

BFG Repo-Cleaner

     

git-filter-branch的替代品。

     

BFG是git-filter-branch的一种更简单,更快速的替代方法,用于清除Git存储库历史记录中的错误数据

     
      
  • 删除疯狂的大文件
  •   
  • 删除密码,凭证和密码其他私人数据
  •   

示例(来自官方网站)

  

在所有这些示例中,bfg是java -jar bfg.jar的别名。

# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa}  my-repo.git

enter image description here

清理存储库后,使用this tool存储大文件。

enter image description here

答案 1 :(得分:1)

我要做的是创建一个新文件夹,并将现有文件夹中的repo克隆到其中:

git clone --depth=1 /path/to/existingFolder /path/to/newFolder

然后将.git目录从/path/to/newFolder复制到/path/to/existingFolder,然后删除/path/to/newFolder

编辑:根据this answer,您可以直接修改shallow文件:

git show-ref -s HEAD > .git/shallow
git reflog expire --expire=0
git prune
git prune-packed