我正在尝试使用个人访问令牌与GitHub进行身份验证。在GitHub的帮助文件中,它声明使用cURL方法进行身份验证(创建个人访问令牌)。我已经尝试过了,但是我仍然无法推送到GitHub。请注意,我正试图从未经验证的服务器(特拉维斯CI)推送。
cd $HOME
git config --global user.email "emailaddress@yahoo.com"
git config --global user.name "username"
curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages
cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf
git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git push -fq origin gh-pages
这段代码会导致以下错误:
remote:匿名访问scuzzlebuzz /ol3-1。git否认。
致命:'https://github.com/scuzzlebuzzle/ol3-1.git/'认证失败"
这可以通过使用github部署键来完成,它可以缩小对单个github回购的访问权限,以及使写权限可选。
Github部署密钥使用用户生成的ssh密钥,使用ssh-keygen创建一个私钥文件和一个公钥文件。
假设给定ssh-keygen的密钥名是key-test,私有和公共文件位于~/中。Ssh /key-test和~/. Ssh /key-test。酒吧。
假设github项目名为keytest。
要通过github项目网页向项目添加部署密钥,获取设置/部署密钥并单击添加。粘贴公钥文件的内容~/.ssh/key-test。进入目标框并确认。
修改~/的内容。Ssh /config文件包括以下内容:
Host gh-keytest
Hostname github.com
IdentityFile=/home/user/.ssh/key-test
注意:gh-keytest是一个任意的别名。
现在你可以使用了
git push git@gh-keytest:<githubaccountname>/keytest.git
只用推就能做到
git remote remove origin # in case origin is already set
git remote add origin git@gh-keytest:<githubaccountname>/testscope.git
git push --set-upstream origin main
注意:用正确的分支名称替换main。
之后
git push
是充分的。
您的curl命令完全错误。你应该使用下面的方法
curl -H 'Authorization: token <MYTOKEN>' ...
除此之外,这并没有授权您的计算机克隆存储库,如果它实际上是私有的。(然而,看一看,事实并非如此。)你通常会做的是:
git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages
这将把您的凭据添加到克隆存储库时创建的远程。然而,不幸的是,您无法控制Travis如何克隆您的存储库,因此您必须像这样编辑远程。
# After cloning
cd gh-pages
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
这将使您的项目能够使用内置凭据的远程设备。
警告:令牌具有读/写访问权限,应该像密码一样对待。如果您在克隆或添加远程时将令牌输入到克隆URL中,Git会以纯文本的形式将其写入您的. Git /config文件,这就存在安全风险。