2017-07-25 99 views
0

最近,我改變了我的服務器複製到淺的方式,加快部署:如何從淺層克隆中檢查遠程的不同分支的HEAD?

git clone -b $BRANCH --depth 1 [email protected]:initech/rounding.git . 

的問題是,更新機制將執行以下操作:

LOCAL=$(git rev-parse HEAD) 
REMOTE=$(git rev-parse origin/$NEWBRANCH) 

if [ $LOCAL = $REMOTE ]; then 
    echo "Up-to-date" 
else 
    blah... 
fi 

以前這是正常,但是現在我得到fatal: Needed a single revision,因爲Git並不知道任何其他分支的存在。

如何獲取關於我想要切換到的分支的信息,然後檢查其源頭上的HEAD提交而不檢查出(因爲我想將此檢出保持原樣 - 因爲它正在運行服務器)?

回答

1

你不能直接這樣做:信息是根本不存在。

如果你可以諮詢其他,更完整的Git倉庫,你可以找到答案。因爲這將精確機制(明顯)取決於你是如何去與深遠和正在討論的其他,更完整的Git倉庫,但有一個內置的機制:git ls-remote

運行git ls-remote手動,在你自己的資源庫之一,看到它在行動。請注意,它調用了通過某種運輸的Git,這意味着誰運行時,它必須被允許訪問其它倉庫遠程(通常originyou can choose which remote; see the documentation)。

還要注意,它獲得了這些參考名稱,如在遠程上所見。 的Git存儲副本 「什麼其他的Git調用refs/heads/master(分支master)」 下refs/remotes/origin/master。這使它與您的refs/heads/master分開。他們的Git當然不必將他們的mastermaster分開......所以他們的 Git以全名refs/heads/master存儲它。這意味着你的測試必須相應地改變。

相關問題