2017-08-12 111 views
2

我正在嘗試構建一個持續集成系統。每次推送到GitHub都會觸發構建。如何有效地獲取特定提交的GitHub存儲庫?

每個版本都需要檢出/下載其正在處理的提交的存儲庫。我試圖找到一種方法來做到這一點,不需要花費幾分鐘時間處理大型存儲庫(因爲構建只需要幾秒鐘......)。

請注意,我不想在構建之間存儲數據(這會消除緩存的可能性)。

的解決方案,我已經瞭解:

每隔解決方案,我看到GitHub假定服務器上有最新的git版本,或者克隆版本庫一次就可以了,但在我的情況下卻不是。我從頭開始每一個構建(因爲這是一個約束)。

所以我在問GitHub的具體情況:我該如何下載(以任何方式)在特定提交的代碼才能在該提交上運行持續集成工具?

+0

@JoshLee謝謝!至少我知道爲什麼它不能在GitHub上工作,我不知道我是否做錯了什麼:) –

回答

2

你可以下載一個特定的檔案利用形式的URL從GitHub承諾:

https://github.com/PROJECT/REPO/archive/COMMITID.zip 

舉例來說,如果我有一個名爲「dockerize」的項目,我想下載提交ID 169532e我可以運行:

curl -OL https://github.com/larsks/dockerize/archive/169532e.zip 

我用很短的提交ID在這裏,但你可以使用長提交ID,或分支機構,或標籤等

這會給我.zip存檔與該特定提交的文件。頂級目錄將被命名爲PROJECT-LONGCOMMITID。例如,上述命令將導致頂級目錄爲 dockerize-169532eba46757aca8002e1c9bb257079a739f75/README.md的檔案。

這會讓你只有該特定提交中的文件;它不會獲取.git目錄或任何存儲庫歷史記錄。

+0

謝謝你的完美!參考[這裏是API文檔](https://developer.github.com/v3/repos/contents/#get-archive-link),這裏是我正在使用的完整命令:'curl - sS -L -H「授權:令牌$ GITHUB_TOKEN」https://api.github.com/repos/$REPOSITORY_NAME/tarball/$COMMIT_ID | tar --strip-components = 1 -C/tmp/code -xz'(它可以與私有存儲庫一起使用)。 –

+0

對於公共倉庫,它可能是:'curl -sS -L https://api.github.com/repos/$REPOSITORY_NAME/tarball/$COMMI T_ID | tar --strip-components = 1 -C/tmp/code -xz' –

相關問題