如何在提交后删除本地 git 历史记录?

问题描述 投票:0回答:3

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

git versioning history
3个回答
28
投票

删除历史记录的解决方案

  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 - 允许在任何地方存储大文件

讨论:Git LFS 和 git-annex 有何不同?


3
投票

根据 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 ..)

这为我节省了几GB!


0
投票

在cmd或sh文件中添加以下命令,应该有助于清除历史记录 git fetch --depth=1 修剪旧的提交。这使得旧的提交及其对象无法访问。 git reflog expire --expire-unreachable=now --all。使所有旧提交及其对象过期 git gc --aggressive --prune=all 删除旧对象

© www.soinside.com 2019 - 2024. All rights reserved.