我似乎再也无法推送了,更新了podfile之后,.gitignore无法正常工作,返回先前的提交也无法

时间:2019-04-07 17:22:20

标签: git

我已经更新了广告连播,并正在尝试对项目进行一些更改。但是,我已经尝试了一切,git大文件存储,将我的podfile放到.gitignore文件中,但仍然无法正常工作。在更新Pod之前,我什至回到以前的提交,仍然无法正常工作。

我收到的错误是

! [remote rejected]

File Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds is 62.95 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB

如果我将Pods目录放入.gitignore,为什么还会继续说呢?

我尝试使用

缓存目录
git rm --cached Pods

仍然没有成功。

我尝试创建一个新分支,删除Podfile并添加,提交和推送,仍然无效。

我尝试过

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Pods' 

它仍然不起作用。

我尝试将其放入gitignore

Pods/*

git add .gitignore
git commit -m 'update .gitignore'

然后推送,它仍然不起作用。我知道我可能必须从我的远程存储库中删除Google AdMob,但是我不确定该怎么做?

1 个答案:

答案 0 :(得分:0)

TL; DR

您可能想要:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods'

在此处注意-r。但是请多读一些,以防您的意思不正确。

运行git push时,您的Git连接到另一个Git(在本例中为GitHub上的一个),并提供 commits 。那不是文件:提交。但是提交确实包含文件。所以这里的真正问题是:您的Git发送到包含文件的Git是哪个 commit或commit

Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds

您想摆脱这些提交,也许可以用包含所有其他文件但不包含一个文件的经过改进的新提交替换它们。

您与此非常接近:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Pods' 

因为git filter-branch意味着从我列出的起点开始获取提交,并将它们复制到应用了以下过滤器的经过改进的新替换提交中: <插入过滤器列表这里>。有两种方法可能会出错,其中一种是最可能的:

  • 有问题的提交无法通过您当前的提交到达。有关分支名称和可达性的详细讨论,请通读Think Like (a) Git上的教程。使用Git一段时间后,此网站是一个好主意。

    此错误之所以可能不是 ,是因为git push的默认设置是发送当前分支上的提交(除非您不需要发送GitHub上Git尚不具备的任何内容)。这也是git filter-branch的默认设置:在 current 分支上的所有提交。由于您没有命名任何起点,因此这两个命令都在 current 分支上进行操作。

    (您没有显示您实际的git push命令,也没有显示您的Git版本,因此我不得不在这里做出一个合理的猜测。否则,我可以100%肯定不是这个 问题。)

  • 您列出的过滤器不足以完成改进。

    您提供的过滤器是一个索引过滤器,其中包括删除名为Pods文件的请求,而不会抱怨是否没有这样的文件。您要删除的文件根本没有命名为Pods,而是命名为Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds

    您可以添加-r标志,该标志告诉Git删除路径名 Pods/开头的任何文件。这样不仅可以删除Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds,还可以删除Pods/This/Is/A/Silly/Made/Up/File/Name,依此类推。

    或者,您可以拼出一个特定的文件并省去-r标志。

  • 或者,当然,两种情况都可能适用,但是我只打赌中间的一种-您想要改进的--index-filter

改进之处是使用-r还是拼出完整的文件名,或者介于两者之间,也许是这样:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework'

或:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods/Google-Mobile-Ads-SDK'
例如,

是一个只有您可以回答的问题:提交中需要哪些文件,不需要哪些文件? (请注意,从某种意义上讲,提交不包含任何目录:它们仅包含以其全名命名的文件。Gi​​t会自动创建包含目录的任何文件,如果和必要时。)