在Github中,个人访问令牌无法正常工作

11
我有一个私人代码库存储在我的个人Github账户中,我会不时地进行一些工作,但不是每天都会。这个代码库是使用HTTPS(而非SSH或git://)进行克隆的。为了能够通过命令行访问该代码库,我按照这里所述设置了个人访问令牌:https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
我确信它曾经有效过(我离开SSH正是因为这种持久性的头疼问题)。然而,几周后当我尝试推送到我的代码库时,我会遇到可怕的:
$ remote: Repository not found. fatal: repository
$ 'https://github.com/nicolas-miari/MyPrivateRepo.git/' not found

我错过了什么?


补充:我在Github上删除了令牌,创建了一个新的,并按照这里的说明:https://help.github.com/articles/updating-credentials-from-the-osx-keychain/清除了存储在钥匙串中的旧令牌。我能够重新克隆我的私人存储库。但是,

  1. 这仍然无法解释为什么以前的访问令牌突然停止工作,以及

  2. 我的钥匙串有两个与主机github.com匹配的“Internet密码”条目:我刚刚删除的访问令牌和我的另一个Github帐户(工作)的Web登录密码。也许这与此有关?

背景信息:为了避免频繁登录/注销,我将工作帐户的Web凭据保存在Safari(和钥匙串)中,并将个人帐户的Web凭据保存在Firefox中。


补充2:运行链接帮助页面上给出的命令后:

$ git credential-osxkeychain erase
  host=github.com
  protocol=https
  [enter]

......在钥匙串中,额外的密码已经消失了(只剩下我新添加的个人令牌),但是我仍然可以在Safari上登录我的帐户...?


更新:现在我无法从我的工作帐户推送到存储库(我从钥匙串中删除了凭据...)。 这个系统真的需要健康的一剂“Just Works”...


你可以手动推送,通过输入一个注册到你的工作账户的个人访问令牌(PAT)作为密码吗? - VonC
5个回答

9

我有一个私有仓库,我的package.json文件中使用https://github.com...作为依赖。我的电脑上已经设置了ssh,并且我有个人访问令牌。尽管我将个人访问令牌提供给密码,但仍然失败。于是我使用以下命令更改了我的git配置url,这样就可以正常工作了。

git config --global url."git@github.com:".insteadOf "https://github.com/"

您可以仔细检查您的~/.gitconfig,看是否像这样:

您可以在~/.gitconfig中进行双重检查,以查看类似于这样的内容:

[url "git@github.com:"]
    insteadOf = https://github.com/

1
谢谢,这帮助我解决了问题 :) - Jasbindar Singh
这实际上几乎是邪恶般的聪明。谢谢! - undefined

5
我尝试了所有能找到的建议,唯一有效的方法是删除我的电脑上的Git。重新下载后,它要求我使用浏览器登录,我登录后就可以使用了。

这也是我唯一有效的方法。 - chandler

3
不要忘记,Safari可以访问iCloud Keychain。这可能解释了为什么即使您清除了本地的OSX密钥链,仍然可以使用Safari登录GitHub。

确实。您认为本地(非iCloud)钥匙串中的“密码”条目是否妨碍了“访问令牌”?我需要等待几周,看看我的当前设置是否会再次出现问题... - Nicolas Miari
1
@NicolasMiari 是的,这是可能的,但我还没有看到关于此的错误报告。 - VonC

0

最好的猜测是令牌已过期。

在撰写本文时,您可以设置令牌过期时间。如果您尝试选择“无过期时间”,GitHub UI会明确警告:

GitHub 强烈建议您为令牌设置到期日期,以帮助保护您的信息安全。

当您检查现有的个人访问令牌时,您可以看到上次使用时间和到期时间的指示。

不确定这个问题是在5年前提出的,但我认为,由于这种类型的身份验证在过去是可选的,因此UI可能不太有帮助。 OP提到偶尔使用存储库,如果您首次设置了30或60天的到期令牌,则很容易在几个月后忘记。


0

我的同事在Linux上遇到了同样的问题,我们只是从浏览器中注销并重新登录,然后终端中的git命令开始使用PAT工作了。不知道终端命令与浏览器身份验证之间的关系,但它确实起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接