当前位置:  开发笔记 > 开发工具 > 正文

git push试图推送未在git ls-files中列出的文件

如何解决《gitpush试图推送未在gitls-files中列出的文件》经验,为你挑选了1个好方法。

我意外地在我的仓库中提交了一个不必要的大型子文件夹xxxxx,当我在推动时意识到这一点时,我在中途停止了推动.

然后我从repo中删除了一个不必要的文件夹xxxxx

git rm -r --cached xxxxx

但是虽然ls-files没有显示xxxxx文件夹,但是当我执行时,git仍然试图推送它git push:

git push --verbose
(...)

Counting objects: 19, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (18/18), done.
POST git-receive-pack (chunked) 
Writing objects: 100% (19/19), 132.93 MiB | 197.00 KiB/s, done.
Total 19 (delta 5), reused 0 (delta 0)
remote: warning: File xxxxx/a.csv is 72.22 MB; this is larger than GitHub Enterprise's recommended maximum file size of 50.00 MB
remote: error: GH001: Large files detected.
remote: error: File xxxxx/b is 112.37 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB

如何让git永久忘记"xxxxx"文件夹及其内容?



1> torek..:

git push不推送文件,它推送提交.具体来说,它会推送你没有的提交(无论"他们"是谁 - 你正在推动的遥控器).他们抱怨至少有一个提交包含至少一个大文件.

您需要推送一些不同的提交,以便您推送的提交不包含大文件.

作为一般规则,执行此操作的方法是使每个"好"提交保持不变,将其复制到新分支,并为每个"坏"提交,提取好的部分,删除坏部分,并进行新的提交出于结果.例如,假设这是远程提交的提交图:

A <- B <- C <- D    <-- origin/master

假设您已添加了三个提交,但中间有一个问题:

A - B - C - D       <-- origin/master
             \
              E - F - G   <-- master

当你运行git push你的git发送提交E,F和,并且G,并且远程抱怨因为F有文件它不应该.要解决此问题,您只需复制E到新分支 - 我们将调用副本E'- 然后复制 - 但是修复F生成F',然后复制G到make G'.让我们重命名旧("坏")master; 事实上,让我们完全删除名称,以便我们改为:

              E' - F' - G'   <-- master
             /
A - B - C - D       <-- origin/master
             \
              E - F - G      [abandoned]

执行此复制的git命令是git rebase.通常它只是直接复制; 你希望它复制E,但然后停止并让你修复F,然后复制G,并让它做到这一点的方法是使用-i--interactive标志.

在一般情况下,你应该只复制而变化的承诺是只有你有,幸好这正是设定git push应该推,不管分支你推,(或任何远程名称,如果它不)会分隔遥控器(和其他人拥有)的提交.origin/branchorigin

交互式rebase可以做的远不止这些,所以请参阅Git Book获取说明.您还需要弄清楚哪些提交包含哪些大文件; 为此,git show并且git diff是有用的工具.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有