【问题标题】:Git counting too many files and tries to push untracked filesGit 计算太多文件并尝试推送未跟踪的文件
【发布时间】:2017-05-31 12:46:25
【问题描述】:

我对 git 和 guthub 比较陌生。我遇到了一个阻止我将文件上传到 github 的问题。

做完之后

git add .
git commit -m "update"
git push origin master

控制台然后说

Counting objects: 5439, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3670/3670), done.
^Citing objects:   5% (320/5439), 31.90 MiB | 3.54 MiB/s    
Total 5439 (delta 1392), reused 5438 (delta 1391)
remote: Resolving deltas: 100% (1392/1392), completed with 1 local object.
remote: error: GH001: Large files detected. You may want to try Git Large 
File Storage - https://git-lfs.github.com.
remote: error: Trace: 5dd2ad6c7e223707ec5baf451b28c2f0
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File ImmerGo_24x2/ImmerGo node server + 
client/nwjs.app/Contents/Versions/56.0.2924.87/nwjs Framework.framework/nwjs 
Framework is 101.72 MB; this exceeds GitHub's file size limit of 100.00 MB

5439 是太多文件,它似乎也在尝试上传我的 nw.app,即使我没有跟踪它。我还在我的 .gitignore 中包含了它的路径。

运行这些之后

git ls-files
git ls-files --others

它似乎正在为我的 repo 跟踪正确的文件,所以我不确定如何防止 client/nwjs.app 也被上传。

任何帮助将不胜感激

【问题讨论】:

  • 输出建议路径为 ImmerGo_24x2/ImmerGo 节点服务器 + 客户端/nwjs.app/...但在文本中您仅指 client/nwjs。应用程序。是这两种不同的路径,还是 i 是后者的简写形式,还是...?

标签: git github command-line


【解决方案1】:

描述问题

这个:

Counting objects: 5439, done.

对象的计数,而不是文件。 Git 有四种对象:提交、树、blob(松散的“文件”)和(带注释的)标签。所以这意味着在你告诉你的 Git 发送到他们(GitHub 的)Git 的对象集中有 5439 个提交加树加块加标签。

git ls-files

ls-files 命令显示存储在 index 中的文件(blob 对象)。索引不是一个提交(但一个提交相关:它是你的 Git 构建你的 下一个提交的地方)。

当您运行 git push 时,您指示您的 Git 调用另一个 Git。他们根据您提供的 refspec 参数协商您的 Git 应该将哪些“顶级对象”(通常是提交和/或标签)发送到他们的 Git:

git push <em>remote refspec1 refspec2 ... refspecN</em>

在您的情况下,remoteorigin(即 GitHub 的 Git),而单个 refspec 是 master。因此,您的 Git 会查看您的 master 标识的提交,以及master 标识的提交他们的。您的 Git 会找到您拥有的所有提交,而他们没有。

这几乎肯定是至少 两次 次提交,而且可能更多。

然后,您的 Git 会打包所有这些提交,以及这些提交使用的所有其他对象(树和 blob),而它们的 Git 还没有这些对象。这就是 5439 对象计数的来源。您发送的集合中有足够多的提交、树和 blob,可以加起来这么多对象。

一旦他们的 Git 收到所有这些对象,他们的 Git 就会将它们解包并(毫无疑问通过预接收或更新挂钩)检查它们。其中一个提交中有一个大文件。然后,他们的 Git 在打印您看到的错误消息后拒绝更新其master 的请求(在打印之前,您的 Git 在每一行加上单词 remote: 前缀)。

解决问题

您需要推送不同的(可能更少和/或更好)提交。

要做到这一点,你需要——嗯,“想要”——让你的 master 指向新的、不同的提交。然后,您可以放弃旧的(并且丑陋的?)提交,或者将它们保留在您从未推送到 GitHub 的分支上。保留还是放弃它们取决于您。

有很多方法可以做到这一点,我现在没有太多时间再写这些了。查找 rebaseing 和“BFG”。取决于你是否想使用 BFG(据说它更简单),你也可以使用git filter-branch,但它很复杂。如果您有一个简单的案例(从您在此处发布的内容中无法判断),一个简单的git rebase -i origin/master 并将删除先前意外提交的大文件的提交转换为squashes 可能就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2016-05-22
    • 1970-01-01
    • 2018-02-17
    • 2017-03-15
    • 2015-01-11
    • 2012-01-18
    相关资源
    最近更新 更多