2016-02-29 70 views
2

我正在使用git describe作爲構建時在我的應用程序中進行版本控制的驅動程序。 大致是它的樣子:git describe --always --dirty --match version*如何合理地將「git describe --match」與淺層克隆結合使用?

標記我的版本,像version.1.2.3模式,並構建出數字基於什麼關最後一次提交的應用程序的版本被標記的東西,如version.*了。 如果我沒有標記給定的提交,那麼版本號碼最後會出現類似version.1.14.3-24-ged66bf5的內容,它基於最近的標記,自該標記以來提交了多少次提交以及git commit id。

這對我個人而言確實很好,但是我在CI服務器上建立一個淺層克隆時遇到問題。當我在我的git build上使用「淺克隆」選項時(我猜這只是在執行「--depth = 1」),我的「git describe」命令不再按照我希望的那樣執行做。 我的版本號最後只是提交ID - 我猜這是因爲在淺克隆中沒有標籤版本,因此describe命令的--always參數只是最終將提交ID吐出。

我可以通過不做淺層克隆來解決這個問題。

但我真的很喜歡把我的版本從git描述中解放出來 - 即使對淺層克隆我怎麼能繼續使用它呢? 我認爲我需要做的是在淺層克隆時指定深度爲「從分支尖端回到具有匹配version.*的標籤的最新版本」。

這是我能用Git做的事嗎?

+0

你有沒有想過建立一個'混帳alias'是做到了這一點呢?我絕不是在創建複雜的人的專家,但我知道,你可以得到相當瘋狂的工作流程來實現,通過使用它們。 或者使用偵聽您的部署分支('post-commit-hook')的git鉤子,並做幾乎相同的事情。 –

+1

@JensHöpken這個git別名是什麼樣的? – Shorn

回答

2

您不能:淺層克隆缺少標記對象並提交它們標記。

更確切地說,這取決於該克隆的深度以及歷史上必須走多遠才能找到合適的標籤。例如,使用--depth 1000進行淺度克隆就足夠了。確切的數字取決於您在關注的標籤之間提交的提交數量,其範圍爲。

你是正確的,如果混帳提供了「深化直到標記」,即會做的伎倆,但Git不會,更糟的是,深化淺克隆並不會自動帶來了標籤。 (可能會編寫一個腳本,使用git ls-remotegit fetch --depth繼續加深克隆,直到出現一些標記的提交,然後讓腳本手動應用這些標記,因爲它可能只會採用這種方法。 Python或shell代碼的幾十行,例如,這取決於你如何穩健想這樣做。但它不包括在GIT本身)。


的「之間」的概念是一個有點玄乎在一個非線性圖中,但我想這裏的總體思路應該足夠清楚。