【发布时间】:2012-04-06 19:57:31
【问题描述】:
我想从 Dropbox 切换到开源 Sparkleshare。它使用 git 进行同步和版本控制。如果说我在我的文件夹中删除了一个 1GB 的文件,它会保留在本地 .git 文件夹的历史记录中。但我想在服务器而不是客户端上有这种大量数据。 如何提交我的存储库并使用 git 删除本地存储库? 非常感谢!
【问题讨论】:
标签: git versioning history
我想从 Dropbox 切换到开源 Sparkleshare。它使用 git 进行同步和版本控制。如果说我在我的文件夹中删除了一个 1GB 的文件,它会保留在本地 .git 文件夹的历史记录中。但我想在服务器而不是客户端上有这种大量数据。 如何提交我的存储库并使用 git 删除本地存储库? 非常感谢!
【问题讨论】:
标签: git versioning history
根据 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 ..)
这为我节省了几千兆字节!
【讨论】:
git fetch --depth=1 修剪旧的提交。这使得旧的提交及其对象无法访问。git reflog expire --expire-unreachable=now --all。使所有旧提交及其对象过期git gc --aggressive --prune=all 删除旧对象【讨论】: