2012-05-28 81 views
43

我在Git中有一個大型存儲庫。如何在Jenkins中創建一個只從項目中檢出一個子文件夾的工作?Jenkins和Git稀疏結帳

+2

真的有必要補充一點的複雜性?一旦倉庫第一次被克隆,git就會拉動新的對象。除非你的jenkins服務器缺乏足夠的存儲空間,否則我只會克隆整個系統並避免任何額外的複雜性。 – wadesworld

回答

42

Jenkins Git Plugin支持稀疏結賬因爲git-plugin 2.1.0(2014年4月)。這個功能需要git> = 1.7.0。它位於「其他行爲」 - >「稀疏檢出路徑」下。

screenshot

參見:JIRA問題JENKINS-21809

+0

不幸的是,Git仍然需要在本地複製整個存儲庫。所以你可能沒有經歷任何速度改進Git從服務器獲取文件。 – luka5z

+5

不幸的是,它仍然檢查出原來的「路徑結構」是完好無損的,所以它不像它實際檢查出「一個目錄」,它恰好只存在一個目錄,FWIW – rogerdpack

+1

相當老的一個,但我們如何定義一個帶空格的子目錄名稱。我想結賬「文件夾/到/包含/目錄與空間」.. – OK999

20

您可以使用Git的sparse checkout功能。請注意,Git仍將整個存儲庫克隆到本地磁盤。但這並不算太壞,因爲它被壓縮了。

  1. 在Jenkins中創建一個新工作,在源代碼管理部分設置Git存儲庫。
  2. 構建項目。這會將整個存儲庫克隆到本地磁盤。
  3. 打開項目的工作區文件夾,刪除除.git文件夾以外的所有內容。
  4. 打開項目工作區文件夾的Git shell。啓用稀疏結帳:

    git config core.sparsecheckout true 
    
  5. 更新工作樹:

    git read-tree -mu HEAD 
    
  6. 創建sparse-checkout文件中的.git /信息文件夾中。添加路徑要檢出該文件,像這樣子文件夾(注意斜線):

    folder/to/include/ 
    
  7. 再次生成項目。這次只有一個子文件夾應該出現在工作區文件夾中。

+0

你是否必須爲每項工作執行這些命令? –

+1

@RuudLenders是的,您需要爲每個您想要僅簽出一個子文件夾的作業執行此操作。 –

+0

不應該按照步驟6'git read-tree -mu HEAD'執行步驟6?據我所知,應該首先告訴Git應該查看哪些文件(步驟6),然後將樹信息讀入索引。 – borisdiakur

1

可能您只是將使用

git checkout your-branch -- the/desired/path anthother/desired/path 

要清除它你可以只rm -rf工作文件夾,並用mkdir workingdir重新創建一個自定義步驟。這需要您在上述命令的git級別指定此選項:

git --working-dir="/path/to/workingdir" checkout your-branch -- the/desired/path anthother/desired/path 

這一切取決於您對詹金斯的瞭解程度。

+0

問題在於Jenkins通常使用插件來獲取源代碼,Git插件不允許您更改結帳命令。 –

+0

我想編寫或修改一個現有的插件將是一個太多的問題。 –