我正在尝试将本地存储库推送到github存储库,但似乎失败。我按照here的指示进行了操作,直到最后一步,一切似乎都还不错:
\zs
[远程拒绝]主机->主机(预接收挂钩被拒绝)
最初我至少有2个问题,因为我在github施加的文件夹中也有一个巨大的文件(超出了100MB的限制)。无论如何,我以为我用以下方法删除了大文件:
git push origin master
我看不到使用的大文件夹
git rm -r --cached model/
git commit -m "Object Detection v0.1"
所以我想我一定已经删除了。
我的远程存储库为空。我检查了这个answer,但由于某种原因,最流行(不是公认的答案)的答案是gitlab而不是github。而且我找不到与github相关的任何设置,也无法破译接受的答案。
所以,我的问题是如何将本地存储库推送到远程存储库(我拥有远程存储库)?另外,为什么我仍然看到有关已删除的巨大文件(我想是)的错误消息?为此,我还应该执行其他任何操作吗?
编辑:
要回答为什么question here不是我的副本(反之亦然):
我拥有该存储库,因此我无法联系任何人(如在此处接受的答案所建议),并且问题不在服务器端,因为我实际上设法在没有巨大文件的情况下推送了一个存储库。
我的情况很简单(我的提交实际上没有包含任何实际更改),并且基本上通过创建新的本地仓库绕过了我的问题,但这对@Tim的回答确实很有用。
答案 0 :(得分:3)
您实际上并没有通过提交来删除大文件夹。该文件仍然是您历史记录的一部分,并且该提交只是不带大文件夹的另一个版本。由于您尚未推送,并且假定仅存在最新提交才能删除大文件夹,所以建议执行以下步骤:
git reset --hard HEAD~1 # remove latest commit
git rm -r --cached model/ # remove large folder
git commit --amend 'Object Detection v0.1' # rewrite initial commit
这假定除了上面显示的试图删除大文件夹的提交以外,您只有一个初始提交。如果您提交了多次 次提交,则必须使用交互式基础(git rebase -i
)重写历史记录,或者可能使用filter-branch
。
编辑:根据您的评论,您将进行多次提交。然后,您可以尝试进行交互式变基:
git rebase -i --root
这应该在bash中调出一个编辑器,为您显示一个类似于以下内容的列表:
pick d93jk8f first commit message
pick 2k9vn3d second commit message
pick ekmv098 third commit message
pick f93kl2k fourth commit message
提交应该从上到下从最旧到最新列出。现在,将每次提交都从pick
更改为edit
。要进入编辑模式,请输入 SHIFT + I 。
edit d93jk8f first commit message
edit 2k9vn3d second commit message
edit ekmv098 third commit message
edit f93kl2k fourth commit message
现在退出并保存: ESC ,然后是:wq!
这应该启动变基。 Git现在将重新应用您的所有提交,并且它将在每次提交时暂停。每次暂停时,您都必须删除大文件夹,前提是该文件夹当时已存在:
git rm -r --cached model/
然后git add
进行更改,提交,然后执行git rebase --continue
以继续进行变基。完成整个过程后,应该从您的历史记录中完全清除该大文件夹。
请注意,我从第一个提交开始就重新部署。例如,如果您知道大文件仅在三次提交之前提交过,那么您可以通过以下方式启动重新设置:
git rebase -i HEAD~3
这将使您仅重写回溯三次提交的历史记录。但是,在这种情况下,从第一次提交开始似乎很明智。