我有一個在 git 存盤庫上運行的腳本,它在合并拉取請求之前進行一些分析。
腳本執行
git merge-base master HEAD
確定“偏差點”提交。
但是,本地 git repo 是使用 Jenkins 作業區中的稀疏結帳形成的,并且無法更改此配置。它是通過以下方式獲得的:
git init- 然后幾個
git fetch --no-tags git config core.sparsecheckoutgit checkout -f <hash>
然后出現以下錯誤:
fatal: Not a valid object name master
的輸出git log如下所示:
commit 84887... (HEAD, origin/PR-424)
Author: Me
Date: Today
blah blah
commit 54adf...
Merge: 889aefe 46630ae
Author: Me
Date: Yesterday
Merge pull request #123 in blah blah to master
(this is the result of merging the most recent pull request
prior to the currently open PR)
commit 46630ae...
Author: Me
Date: Last week
...
如果我在存盤庫的完整(非稀疏)檢出中運行我的腳本,結果git merge-base是54adf...以及它的語意意義是它是最近合并后主分支的狀態。
結賬稀疏時如何獲得相同的資訊(“偏差點”)?
uj5u.com熱心網友回復:
jenkins 構建可能會克隆/獲取部分 refs,以減少時間和存盤成本。當它檢查一個分離的 HEAD by 時git checkout -f <hash>,我想它只獲取 PR。它不會獲取master和/或master不在本地存盤庫中創建,因此master在存盤庫中是未知的,就像未定義的變數一樣。使用未定義的變數會引發錯誤。
在腳本中嘗試git fetch origin refs/heads/master:refs/remotes/origin/master; git merge-base origin/master HEAD。它master從遠程存盤庫中獲取并將其存盤為refs/remote/origin/master或 短格式origin/master。
如果作業允許同時進行多個構建,我建議您將每個構建的命令中的origin/masterwith替換并origin/master_somerandomwords在最后將其洗掉git update-ref -d refs/remotes/origin/master_somerandomwords,以避免多個 fetch 行程嘗試更新相同的origin/master.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387346.html
標籤:混帐
上一篇:關于Git基本問題的合并分支
