【问题标题】:How to git clone a private repo with a private submodule in a GitHub Action?如何在 GitHub 操作中使用私有子模块 git clone 私有仓库?
【发布时间】:2023-01-21 07:26:32
【问题描述】:

我的组织(或我的用户)内有两个私人 GitHub 存储库。其中一个包含另一个作为子模块。我怎样才能用它包含的子模块克隆这个其他私有存储库?

我试过了

- uses: actions/checkout@v3
  with:
    submodules: true

然而,这失败了,子模块部分出现了一条错误消息,是否有我应该添加或其他的权限?

Fetching submodules
  /usr/bin/git submodule sync
  /usr/bin/git -c protocol.version=2 submodule update --init --force --depth=1
  Submodule '.github/workflows/MYPROJECT1' (https://github.com/MYUSER/MYPROJECT1.git) registered for path '.github/workflows/MYPROJECT1'
  Cloning into '/home/runner/work/MYPROJECT2/MYPROJECT2/.github/workflows/MYPROJECT1'...
  remote: Repository not found.
  Error: fatal: repository 'https://github.com/MYUSER/MYPROJECT1.git/' not found
  Error: fatal: clone of 'https://github.com/MYUSER/MYPROJECT1.git' into submodule path '/home/runner/work/MYPROJECT2/MYPROJECT2/.github/workflows/MYPROJECT1' failed
  Failed to clone '.github/workflows/MYPROJECT1'. Retry scheduled
  ... more errors

【问题讨论】:

标签: github github-actions git-submodules


【解决方案1】:

您可以尝试改用 SSH URL。

issue 116 "private submodule checkout fails" 现在(2022 年 7 月)说明了替代方案:

当您想要保持 URL 存储库的灵活性并仍然使用 GitHub Actions 和 Deploy Keys 来访问私有子模块时,此解决方案有效:

  - name: Checkout
    uses: actions/checkout@v3

  - name: Clone Submodule
    run: |
        mkdir -p $HOME/.ssh
        echo '${{ secrets.SUBMODULE_REPO_DEPLOY_KEY }}' > $HOME/.ssh/ssh.key
        chmod 600 $HOME/.ssh/ssh.key
        export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/ssh.key"
        git submodule set-url <path-to-submodule> git@github.com:<organization/submodule>.git
        git submodule update --init --recursive
        git submodule set-url <path-to-submodule> https://github.com/<organization/submodule>.git
        unset GIT_SSH_COMMAND

Issue 287(“支持私有存储库和私有子模块”)还包括:

您可以使用 webfactory/ssh-agent action 为多个子模块存储库提供单独的部署密钥,如下所示:

   ...
       steps:
         - uses: actions/checkout@v3

         - name: Add SSH private keys for submodule repositories
           uses: webfactory/ssh-agent@0.7.0
           with:
             ssh-private-key: |
               ${{ secrets.SSH_PRIVATE_KEY_SUBMODULE_1 }}
               ${{ secrets.SSH_PRIVATE_KEY_SUBMODULE_2 }}

         - run: git submodule update --init --recursive --remote
   ...

这对我有用,除了 --remote 导致它检查不正确的引用(子模块的 master,而不是引用的提交)。
只是做 git submodule update --init --recursive 让我得到了想要的行为

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 2023-01-01
    • 1970-01-01
    • 2021-06-30
    • 2021-11-08
    • 2016-06-29
    • 2015-04-08
    • 1970-01-01
    • 2022-08-20
    相关资源
    最近更新 更多