目前我有

空的GitHub回购 SSH服务器恢复(main) 当地的回购

SSH服务器回购是最新的回购(生产站点),所以我从那里克隆了一个Git到本地。然后我尝试做一个git推送到GitHub。

一切都很好,但随后它说一些关于文件名。gz对GitHub太大。我不需要这个文件,所以我运行了几个Git命令从Git缓存中删除它,然后推回到SSH服务器。

我没有看到本地的大文件,但它仍然在SSH服务器上,即使git diff返回什么,git推送返回“一切都是最新的”-即使文件在本地回购中不可见,当我尝试推送到GitHub时,我仍然会得到错误

文件fpss.tar.gz是135.17 MB;这超过了GitHub的文件大小限制100mb

我遵循了“修复问题”列在GitHub帮助下的步骤,所以这不应该已经足够了吗?

当它不在本地或在git status/diff/push中列出时,文件如何仍然在以太中?


当前回答

为什么GitHub拒绝我的回购,即使我删除了大文件?

Git存储了你项目的完整历史,所以即使你从你的项目中“删除”了一个文件,Git回购仍然在它的历史记录中保留了该文件的副本,如果你试图推到另一个存储库(比如一个托管在GitHub上的存储库),那么Git要求远程回购具有与本地回购相同的历史记录(即它的历史记录中有相同的大文件)。

我怎样才能让GitHub接受我的回购?

您需要在本地清理项目的Git历史记录,从所有历史记录中删除不需要的大文件,然后只使用“已清理”的历史记录。受影响的Git提交id将会改变。

我如何清理大文件从我的Git回购?

从Git历史记录中清除不需要的大文件的最好工具是BFG Repo-Cleaner——它是一个更简单、更快的Git -filter-branch的替代方案,专门用于从Git历史记录中删除不需要的文件。

仔细按照使用说明,核心部分就是这样:

$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git

任何超过100MB大小的文件(不是最近提交的文件)都将从Git存储库的历史记录中删除。然后你可以使用git gc清除死数据:

$ git gc --prune=now --aggressive

BFG通常比运行git-filter-branch快10-50倍,而且通常更容易使用。

完全披露:我是好心眼巨人回收清理器的作者。

其他回答

对我有用的是:

重命名我的GitHub项目文件夹到其他东西 用正确的文件夹名称重新克隆repo 删除我重命名的repo中的.git文件夹(可能必须打开允许查看Windows中的隐藏文件) 将.git文件夹从正确的文件夹名移动到已重命名的文件夹名 删除重新克隆的repo文件夹,将原repo文件夹重命名为正确的名称 提交您的更改(没有大文件)并推送

这对我很管用。来自github的文档 压缩Git提交 Git重置原点/master

git checkout master && git pull;
git merge feature_branch;
git add . --all;
git commit -m "your commit message"

在这里查找文档

如果你上传的是你自己的项目,那么只要去目录所在的文件。 删除大文件。 然后点击“view”(窗口文件) 查看->检查隐藏文件夹 然后你就能看到了。”git的文件 删除.git文件 这将删除所有提交历史记录 然后你可以像新的一样推动你的回购…

为什么GitHub拒绝我的回购,即使我删除了大文件?

Git存储了你项目的完整历史,所以即使你从你的项目中“删除”了一个文件,Git回购仍然在它的历史记录中保留了该文件的副本,如果你试图推到另一个存储库(比如一个托管在GitHub上的存储库),那么Git要求远程回购具有与本地回购相同的历史记录(即它的历史记录中有相同的大文件)。

我怎样才能让GitHub接受我的回购?

您需要在本地清理项目的Git历史记录,从所有历史记录中删除不需要的大文件,然后只使用“已清理”的历史记录。受影响的Git提交id将会改变。

我如何清理大文件从我的Git回购?

从Git历史记录中清除不需要的大文件的最好工具是BFG Repo-Cleaner——它是一个更简单、更快的Git -filter-branch的替代方案,专门用于从Git历史记录中删除不需要的文件。

仔细按照使用说明,核心部分就是这样:

$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git

任何超过100MB大小的文件(不是最近提交的文件)都将从Git存储库的历史记录中删除。然后你可以使用git gc清除死数据:

$ git gc --prune=now --aggressive

BFG通常比运行git-filter-branch快10-50倍,而且通常更容易使用。

完全披露:我是好心眼巨人回收清理器的作者。

将大文件/文件夹保存在工作文件夹中的解决方案

下面这句话解决了这里的问题(答案1):

git filter-branch——index-filter 'git rm -r——cached——ignore-unmatch <file/dir>' HEAD

如果文件/dir在工作树中,该命令也会删除文件/dir。

如果您希望将文件/文件夹保存在工作树中,我建议执行以下步骤。

错误后运行git重置HEAD^ 将文件/文件夹添加到' '中。gitignore”的文件。 继续像往常一样添加git。它可以捕获其他文件/文件夹,但必须捕获.gitignore文件。接下来是git commit -m"message",最后git push origin <branch_name>