【问题标题】:Replace one branch with current branch using GitHub Actions使用 GitHub Actions 将一个分支替换为当前分支
【发布时间】:2019-12-25 11:26:58
【问题描述】:

我正在使用 GitHub Actions 在我的 master 分支中编译一些代码,然后我希望它将所有文件推送到另一个分支 gh-pages 以便 GitHub Pages 可以生成一个站点。我似乎无法获得将master 的内容移动到gh-pages 的操作。

name: Build & Jekyll

on:
  push:
    branches:
      - master

jobs:
  build:
    # needs: nothing
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Git stuff
        run: |
          git config user.email "email@email.com"
          git config user.name "Name"
          git add .
          git commit -m "message"
          git push origin master:gh-pages

当我将提交推送到master(触发操作)时,我在操作控制台中收到此错误:

HEAD detached at 19e90c4
nothing to commit, working tree clean
##[error]Process completed with exit code 1.

我不明白为什么,因为如果我在终端中使用相同的 git 命令,我不会收到任何错误。

我在“Git stuff”echo 'Hello, world.' >test.txt 下的 Actions 运行命令中添加了一行,但它却给出了以下错误:

[detached HEAD 5edf030] message
  1 file changed, 1 insertion(+)
 create mode 100644 test.txt
error: src refspec master does not match any
error: failed to push some refs to 'https://github.com/iwiedenm/ultimate-jekyll'

解决方案(来自 rmunn 的回答):

name: Build & Jekyll
on:
  push:
    branches:
      - master
jobs:
  build:
    # needs: nothing
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Git stuff
        run: |
          git config user.email "your@email.com"
          git config user.name "Jonsnow"
          git add .
          git commit -m "message"
          git remote set-url origin https://USERNAME:${{secrets.ACCESS_TOKEN}}@github.com/USERNAME/REPO.git
          git remote -v
          git checkout -b gh-pages
          git push origin HEAD:gh-pages --force

不要忘记USERNAME 是您的 GitHub 用户名,ACCESS_TOKEN 是在您的存储库的秘密中设置的 GitHub 访问令牌秘密,对存储库具有写入权限,REPO 是存储库名称。如果您愿意,也可以重命名gh-pages

【问题讨论】:

    标签: git github yaml github-actions


    【解决方案1】:

    免责声明:我还没有进入 GitHub 操作测试版,所以虽然我认为这个答案是正确的,但我无法对其进行测试。

    GitHub checkout 操作当前为 leaves the repo in a detached HEAD state,因此没有可推送的 master 分支。您应该可以推送HEAD:gh-pages 而不是master:gh-pages

    当然,您问题中的工作流示例对工作目录没有任何更改,因此git add . 没有任何内容可添加到索引中,因此git commit 不会创建空提交,然后就没有任何内容可推送。但是一旦您进行了一些更改(因为您的编译步骤正在工作,或者因为您已经放入了一个执行 echo 'Hello, world.' >> test.txt 的步骤 - 请注意双箭头,以便您将附加到文件中,否则此测试只会自从你第二次提交相同的内容以来工作一次,Git 会跳过提交),那么你应该会发现推送 HEAD 可以满足你的要求。

    【讨论】:

    • 非常感谢您的详细回答。这似乎解决了问题,并且与 GitHub Actions 兼容。虽然,它确实需要一些混乱......尤其是在身份验证方面,因为在操作工作流程中,输入推送所需的用户名和密码并不容易。对于想知道的未来读者,我已将我的最终实现添加到我原来的问题中。
    • @TMack 可以分享您的最终操作 yml 文件以供其他人查看。我正在尝试做同样的事情。
    • @Noitidart 最终解决方案在问题的底部!
    猜你喜欢
    • 2020-01-21
    • 2020-12-13
    • 2021-08-30
    • 2023-03-26
    • 2011-02-15
    • 2013-11-04
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多