如何在git repo上清理历史记录?

时间:2018-01-10 11:25:42

标签: git github bitbucket

我有一个很大的git repo,历史很悠久。为了减小git repo的大小,我删除了一些大文件,用一个新的.git文件替换了repo中的.git文件,以减小repo的大小。回购的规模现在减少了。但是,在新实例中克隆repo时,要克隆的对象数量不会减少,克隆会终止并显示错误消息:

error: RPC failed; curl 18 transfer closed with outstanding read data 
remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

3 个答案:

答案 0 :(得分:0)

你不能删除该文件夹,希望它能正常工作 如果您希望清理仓库并仅保留最后一次提交,则应删除仓库并再次创建。

每次向git添加文件时,git都会开始跟踪对该文件的更改。因此,为了“清理”旧对象,您必须删除存储库及其历史记录。

# Remove the current objects
rm -rf .git

# Initialize new git repository
git init

# create the .gitignore with your ignored files if needed

# add the desired files to git
git add .

# commit the desired content
git commit -m "Message"

# now push and OVERWRITE!!! the old repsository
git push origin <branch> -f

答案 1 :(得分:0)

在您的情况下,简单地将.git文件替换为另一个文件将不起作用。

  1. rm -rf .git
  2. git init
  3. git add -A fileAndDirectoryName // .如果您想要项目目录中的所有内容
  4. git commit -m "Suitable Message"
  5. git push origin branchName -f //推送并覆盖现有的仓库

答案 2 :(得分:0)

如果您没有任何分支机构(或者如果您有分支机构,但这些分支机构是多余的,并且不关心这些分支机构是否被删除),那么只需展开您的仓库,请查看this

否则你可以收缩回购,请查看this

在任何情况下,我都不确定历史是否可能是您的仓库大尺寸的真正原因,也可能是某些代码被清理但没有重新包装所以所有陈旧的东西都存在,如果这是然后“收回空间”部分收缩回购链接应该有所帮助。

如果没有任何帮助,那么请转到repo的“.git”文件夹(将在您的磁盘结帐代码上)并尝试查看那里的文件,其中一个文件将是packed-refs,其中包含您的仓库中存在所有分支等的信息,假设您已删除分支,如果其名称仍存在于此文件中,则您的整体GIT包大小将包括该大小,因此您可以执行的操作是删除该特定条目这个文件,然后执行收回我提供的repo链接的“回收空间”部分的步骤。

关键是你必须在最后调试一些东西,因为我们不知道你的回购的确切位置。