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

11

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


也许这会有帮助:http://stackoverflow.com/questions/3152550/moving-a-git-directory - Manatok
3个回答

29

删除历史记录的解决方案

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

这帮我省了几个千兆字节!

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接