解决git无法push的问题

背景

5月16日,也就是前天,我开始学习李辉的Flask入门教程

目的很简单,由于花了一周时间学习Miguel Grinberg的The Flask Mega-Tutorial,在第四章“Database”上的时间有将近3天。我感觉自己的进度有些快,步子太大,终于扯到了。

按照推特上这位大神的说法,要享受海洋般的码农的工作机会,要经历9层磨难:Flask是第7层,Database是第8层。

wecom-temp-90ebe03d8c5e0ab68eda5686bd5102e9

在第8层滞留许久后,我开始采用李辉的教程,这个教程恰好与Miguel Grinberg的教材在部分知识点上互补。比如【Mega-Tutorial】介绍使用git时,仅仅介绍了git clone命令,方便读者不用逐行敲代码,而【Flask入门教程】对git的介绍就更实用,从git repo的建立开始,包括如何管理自己的git hub页面。

使用git完成watchlist项目后,依葫芦画瓢,我在microblog的项目上也使用了类似命令,但是问题就发生了:

22-05-18/Users/xxxxx/study/test~%>git branch -a
*flask
master

似乎自己就被困在了【Mega-Tutroial】的怪圈里,我估计原因是使用git clone后,默认的分支就是flask,而不是自己新建的master分支,而且无法删除flask这个主分支。

最直接的办法,是新建了一个test目录,在这个目录下把所有文件拷贝到flasktest下面,对原来的内容覆盖掉。

cp -rf flasktest/. test

然而,除了主branch变成master外,一切照旧。

问题现象与分析

现象

我开始就认为是权限问题,“access rights”。

22-05-18/Users/XXXXX/study/flasktest~%>git pull
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

所以把努力方向放在如何优化授权上面,比如把私钥再增加一次:

ssh-add ~/.ssh/id_rsa
22-05-18/Users/XXXXX/study/flasktest~%>ssh-add -l
3072 SHA256:n9EHVCpvMuEfdkajdfkajfdkjakdfjakjdfak//Q5pbok XXXXXXXX@dfjakjdfjdfajdfa (RSA)

分析

由于告警信息中也出现了“no work tree”,网上有类似分析说这是bare repository:
The direct reason for the error is that yes, it’s impossible to use git-add with a bare repository. A bare repository, by definition, has no work tree. git-add takes files from the work tree and adds them to the index, in preparation for committing.
尝试去除bare:

git config --unset core.bare

也有意见说,在git的配置文件里,把origin相关信息都屏蔽掉:

22-05-18/Users/xxxxxxxxx/study/test/.git~%>vi config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
#[remote "origin"]
#       url = git@github.com:xxxxxxxx/flasktest.git
#       fetch = +refs/heads/*:refs/remotes/origin/*
#[remote "origin"]
#       url = git@github.com:xxxxxxxx/flasktest.git
#       fetch = +refs/heads/*:refs/remotes/origin/*
[remote "origin"]
        url = git@github.com:xxxxxxxxx/flasktest.git
        fetch = +refs/heads/*:refs/remotes/origin/*

问题解决

折腾了2天,最后只能盯着屏幕告警,突然发现“and the repository exists”,这句话提醒我,是不是这个repo根本就没有创建成功过?

立即上github,手动创建repo。

然后一切水到渠成

22-05-18/Users/xxxxxx/study/flasktest~%>git branch -a
* master
  remotes/origin/master

反思

  1. 想当然认为,repo是通过git命令行来建立的,因此不断的假设flasktest.git已经建立好了;
  2. 并没有认真对待git,git的培训教程也没有认真学习。

git培训教材

Leave a Reply

Your email address will not be published. Required fields are marked *