2012-05-28 79 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

我想编写或修改一个现有的插件将是一个太多的问题。 –