Kev*_* W. 219 git github git-push
目前我有
SSH服务器repo是最新的repo(生产站点)所以我从那里做了一个Git克隆到本地.然后我试着去做git pushGitHub.
一切都很好,但后来它说了一些关于filename.gz对于GitHub来说太大了.我不需要这个文件所以我运行了几个Git命令来从Git缓存中删除它然后推回到SSH服务器.
我没有在本地看到大文件,但它仍然在SSH服务器上,即使没有git diff返回任何内容并且git push返回"Everything is latest-date" - 尽管当我尝试推送时,文件在本地仓库中不可见GitHub我仍然得到它的错误
remote:错误:文件fpss.tar.gz是135.17 MB; 这超过了GitHub的文件大小限制为100 MB
我按照GitHub帮助中列出的 "修复问题"中的步骤进行了操作,那么这应该不够吗?
当文件不在本地或在git status/diff/push中列出时,文件如何仍然在以太网中?
Mac*_*ver 399
您可以使用
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
Run Code Online (Sandbox Code Playgroud)
这将删除该文件历史记录中的所有内容.问题是文件存在于历史记录中.
此命令更改提交的哈希值,这可能是一个真正的问题,尤其是在共享存储库上.如果不了解后果,就不应该进行.
But*_*ass 39
我发现挤压比使用更有用filter-branch.我做了以下事情:
git reset
--soft HEAD~3. git commit -m
"New message for the combined commit"特殊情况(来自用户@lituo):如果上面不起作用,那么你可能有这种情况.提交1包含大文件,并且由于大文件错误,提交1的推送失败.提交2删除了大文件,git rm --cached [file_name]但提交2的推送仍然失败.您可以按照上述步骤操作,但不要使用HEAD~3,请使用HEAD~2.
Blu*_*n93 36
如果文件是使用您最近的提交添加的,并且您尚未推送到GitHub,则可以删除该文件并修改提交,从此处获取:
git rm --cached giant_file
# Stage our giant file for removal, but leave it on disk
git commit --amend -CHEAD
# Amend the previous commit with your change
# Simply making a new commit won't work, as you need
# to remove the file from the unpushed history as well
git push
# Push our rewritten, smaller commit
Run Code Online (Sandbox Code Playgroud)
小智 24
如果您在寻求帮助之前一直在搞弄仓库,这对我很有帮助。第一类:
git status
Run Code Online (Sandbox Code Playgroud)
之后,您应该会看到类似的内容
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
重要的部分是“ 2次提交”!从这里继续输入:
git reset HEAD~<HOWEVER MANY COMMITS YOU WERE BEHIND>
Run Code Online (Sandbox Code Playgroud)
因此,对于上面的示例,将键入:
git reset HEAD~2
Run Code Online (Sandbox Code Playgroud)
输入后,您的“ git状态”应显示为:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
从那里,您可以删除大文件(假设您尚未删除),并且您应该能够重新提交所有文件而不会丢失工作。
我知道这不是花哨的答复,但我希望它能有所帮助!
And*_*aal 13
然后我在第二个文件上收到错误,我需要删除它:
remote: error: File <path/filename> is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB
我尝试了同样的步骤,得到了一个错误: "A previous backup already exists in <path/filename>"
通过本网站的研究,我使用了以下命令:git filter-branch --force --index-filter "git rm --cached --ignore-unmatch <path/filename>" --prune-empty --tag-name-filter cat -- --all
工作得很好,大文件被删除了.
令人难以置信的是,推送仍然失败并出现另一个错误: error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly
我通过直接修改.git配置文件来修复 - postBuffer = 999999999
在那之后推进了!
Rob*_*ley 10
Git存储项目的完整历史记录,因此即使您从项目中删除了一个文件,Git repo仍然会在其历史记录中包含该文件的副本,如果您尝试将其推送到另一个存储库(如GitHub)然后Git 要求远程仓库具有与您的本地仓库相同的历史记录(即其历史记录中的相同大文件).
您需要在本地清理项目的Git历史记录,从所有历史记录中删除不需要的大文件,然后仅使用"已清理"的历史记录.受影响的提交的Git提交ID将发生变化.
从Git历史中清除不需要的大文件的最佳工具是BFG Repo-Cleaner - 它是一种更简单,更快速的替代方案,git-filter-branch专门用于从Git历史中删除不需要的文件.
仔细按照使用说明进行操作,核心部分就是:
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git
Run Code Online (Sandbox Code Playgroud)
任何超过100MB的文件(不在最近的提交中)都将从Git存储库的历史记录中删除.然后,您可以使用git gc清除死数据:
$ git gc --prune=now --aggressive
Run Code Online (Sandbox Code Playgroud)
BFG通常比运行速度快至少10-50倍git-filter-branch,并且通常更容易使用.
完全披露:我是BFG Repo-Cleaner的作者.
小智 10
我已经尝试了上述所有方法,但没有一个对我有用。
然后我想出了我自己的解决方案。
首先,您需要一个干净的、最新的本地存储库。删除所有他妈的大文件。
现在在您的 repo 文件夹之外创建一个新文件夹,并使用“Git create repository here”将其设为新的 Git 存储库,我们将其命名为 new_local_repo。就是这个!以上所有方法都说你必须清理历史......好吧,我厌倦了,让我们创建一个完全没有历史的新仓库!
将文件从旧的、搞砸的本地仓库复制到新的、漂亮的仓库。请注意,文件夹图标上的绿色徽标将消失,这是有希望的,因为这是一个新的存储库!
提交到本地分支,然后推送到远程新分支。我们称之为 new_remote_branch。如果你不知道如何从一个新的本地仓库推送,谷歌一下。
恭喜!您已将干净、最新的代码推送到 GitHub。如果您不再需要远程 master 分支,则可以将 new_remote_branch 设为新的 master 分支。如果你不知道怎么做,谷歌一下。
最后一步,是时候删除该死的旧本地存储库了。将来您只能使用 new_local_repo。
我遇到了同样的问题,但没有一个答案对我有用。我通过以下步骤解决了:
git log --all -- 'large_file`
Run Code Online (Sandbox Code Playgroud)
底部提交是结果列表中最旧的提交。
git log
Run Code Online (Sandbox Code Playgroud)
假设你有:
commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32
Run Code Online (Sandbox Code Playgroud)
git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32
Run Code Online (Sandbox Code Playgroud)
尖端:
drop提交包含大文件。git rebase --continue继续,直到完成为止。git rebase --abort取消它。