【问题标题】:How to remove local git history after a commit?提交后如何删除本地 git 历史记录?
【发布时间】:2012-04-06 19:57:31
【问题描述】:

我想从 Dropbox 切换到开源 Sparkleshare。它使用 git 进行同步和版本控制。如果说我在我的文件夹中删除了一个 1GB 的文件,它会保留在本地 .git 文件夹的历史记录中。但我想在服务器而不是客户端上有这种大量数据。 如何提交我的存储库并使用 git 删除本地存储库? 非常感谢!

【问题讨论】:

标签: git versioning history


【解决方案1】:

根据 koppor 的回答,我创建了这个单行 bash 命令来清除位于同一基本文件夹中的所有存储库中的本地 git 历史记录:

for d in */; do echo $d && cd "$d" && git fetch --depth=1 && git reflog expire --expire-unreachable=now --all && git gc --aggressive --prune=all; cd ..; done

注意:您可以根据需要将*/ 替换为任何特定的文件夹条件,例如*mobile*/

Windows cmd 版本(未经测试):

FOR /D %d IN (*) DO (echo $d && cd "$d" && git fetch --depth=1 && git reflog expire --expire-unreachable=now --all && git gc --aggressive --prune=all & cd ..)

这为我节省了几千兆字节!

【讨论】:

    【解决方案2】:

    删除历史的解决方案

    1. git fetch --depth=1 修剪旧的提交。这使得旧的提交及其对象无法访问。
    2. git reflog expire --expire-unreachable=now --all。使所有旧提交及其对象过期
    3. git gc --aggressive --prune=all 删除旧对象

    具体的解决方案只是删除本地历史中的大文件

    • GitHub 提供的Git Large File Storage,它始终将大文件存储在服务器上并仅在结帐时获取它们。非常易于设置和使用 - 如果您的存储库位于 GitHub、bitbucket 或 gitlab 上。
    • git-annex - 允许在任何地方存储大文件

    讨论:How do Git LFS and git-annex differ?

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 2013-08-03
      • 2016-12-07
      • 2014-11-20
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      相关资源
      最近更新 更多