GitHub 操作:致命错误:无法读取'https://github.com'的用户名:设备未配置

4
我正试图在私人仓库上使用Github Action进行git clone,但我不确定如何配置它以使用SSH连接到GitHub。顺便说一下,这是一个macOS runner。
目前,actions/checkout可以正常工作,但是当我直接调用git clone时,就会抛出此错误。
以下是.yml文件:
name: Release IOS
on: 
  push:
    branches:
      - github-action
jobs:
  build:
    name: Build IPA and upload to TestFlight
    runs-on: macos-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}
      - name: Check Github User
        run: |
          git --version
          git config user.name 'MyUsername'
          git config user.email 'MyEmail'
          git config user.name
          git config user.email
        env:
          NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14.17.0
        env:
          NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
      - name: Set up SSH
        uses: pioug/la-cle@v1.1.0
        with:
          GH_SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
      - name: Try copy a private repo
        run: git clone https://github.com/MyUsername/MyRepo.git

1
该错误意味着某个程序(Git、ssh或其他)正在尝试从/dev/tty读取密码,也就是人类用户在监视运行的键盘输入。由于没有这样的用户,因此/dev/tty会产生您看到的错误。现在的问题是要找出(a)是什么程序正在尝试从/dev/tty读取密码,以及(b)为什么要这样做。(https://部分是一个提示:这不是使用ssh。) - torek
@torek 谢谢!我刚刚改成ssh,现在它可以正常工作了。也许你可以把它发布为答案,这样我就可以接受了。 - Terry Windwalker
1个回答

2

如@torek所指出的那样,错误是由于耗尽其他选项(配置等)而尝试从您的终端读取凭据引起的。

由于您在上一步设置了ssh,因此似乎您的意图是使用ssh,因此您应该将url更改为ssh。

run: git clone git@github.com:MyUsername/MyRepo.git

请注意还有其他选项。您仍然可以使用https,但是可以使用git extraheader cli选项以及PAT。这实际上是我们在actions/checkout中所做的常见情况。

https://www.codegrepper.com/code-examples/shell/How+do+I+clone+a+git+repository+with+extraHeader

为了完整起见,从该网站获取:

PAT="mypat123"
REPO_URL="https://myorg@dev.azure.com/myorg/myrepo/_git/myrepo/"
AUTH=$(echo -n "x-access-token:$PAT" | openssl base64 | tr -d '\n')
git -c http.$REPO_URL.extraheader="Authorization: Basic $AUTH" clone $REPO_URL --no-checkout --branch master

基本上,您需要将PAT作为base64编码的标头传递。


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