在CI管道中,我的版本庫的分離頭出現了一些問題。在管道的構建階段,我正在運行一個腳本,它改變了一個特定的檔案。更改后,這個檔案會被推送到版本庫中。
before_script:
- git config --global user.name "bot"
- git config -global user.email "[email protected]"
- gitstatus
腳本:
- npx ts-節點 ./generate.ts
- git push "https: //git:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}" " HEAD:main"
- gitstatus
運行該腳本給我的輸出
Fetching changes with git depth set to 50。 ...
初始化 空 Git repository in /builds/fKSu5-y_/0/project/. git/
創建 fresh repository.。
Checking out 9b4a88be as main..._/span>
$ gitstatus
HEAD detached at 9b4a88be
$ git push "https: //git:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}" " HEAD:main"
To https://gitlab.domain.com/project.git
9b4a88b...98be83e HEAD ->/span> main
$ git status
HEAD detached from 9b4a88b
我不明白為什么before_script中的第一個git status已經給了我一個分離的頭。
我認為管道通過初始獲取創建了一個分離的倉庫。所以問題是如何以正確的方式處理我的推送。
在我的發布階段,我正在運行semantic-release,如果我做了之前的推送,就會因為分離頭而失敗。如果我禁用推送,那么語意釋放就會像預期的那樣作業。但是,我當然需要推送。我不知道我做錯了什么。
Update
<在before_script中加入git checkout main,讓我在第一個git status中得到了預期的結果。但在推送命令之后,我仍然有一個分離的頭 - 我不明白。
$ git checkout main
Branch 'main' setup to track remote remote remote string">remote branch 'main' from 'origin'。
切換 到 a 新 分支 '主'
$ git status
On branch main
你的 支行 是 上 to date with 'origin/main'>。
$ git push "https: //git:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}" " HEAD:main"
To https://gitlab.domain.com/project.git
336b065...8299e43 HEAD ->/span> main
$ git status
On branch main
你的 分支 是 ahead of 'origin/main' by 1 commit.
(使用 "git push" to 發布 你的 本地 commits)
盡管推送的所有內容都在發布狀態 uj5u.com熱心網友回復: 我不明白為什么before_script中的第一個 我認為管道通過最初的抓取創建了一個分離的倉庫。
你是對的,GitLab CI確實會簽出一個特定的提交,而不是某個分支。不過你可以在你的
標籤:semantic-release上起作用,但仍然沒有發揮作用。我確實得到了。本地分支main落后于遠程分支,因此新的版本將不會被發布。
git status已經給了我一個分離的頭。before_script中加入git checkout "$CI_COMMIT_REF_NAME":before_script:
- git config --global user.name "bot"
- git config -global user.email "[email protected]"
- git checkout "$CI_COMMIT_REF_NAME"
- gitstatus
