当只构建Git仓库的子目录时,Jenkins会显示整个仓库的变化 - 为什么?

eer*_*icc 9 git jenkins

我们刚刚迁移到Git,所以如果我问愚蠢的问题,请原谅我:-)

我们的Git repo包含几个Maven项目,就像这样

ssh://git@git.whatever.com:7999/foo/foo.git
   bar1
   bar2
Run Code Online (Sandbox Code Playgroud)

我有单独的Jenkins工作来构建bar1和bar2.为了防止对bar1的推送也触发了bar2,我在bar2下配置了Git插件,Advanced... Included Regions仅包含bar2/.*- 反之亦然bar1作业:bar1/.*

这很有效,但有一件事让我感到困惑:两个工作中的变化都显示了repo(bar1和bar2)的所有变化,而不仅仅是特定项目的变化.

我该如何配置?

截图: 在此输入图像描述

Lee*_*Lee -1

我假设您指的是更改时的提交日志,在这种情况下,如果没有自定义 git 客户端或至少有自定义 git 提交查看器脚本,您将无法执行所需操作。

理论上,单个存储库应该只包含一个项目。否则你就“错误”地使用了 git (在非常宽松的意义上使用“错误”这个词,因为 git 只是一个工具,错误地使用它是不可能的,只是为了你自己的需求而错误地使用它)。

执行您想要的操作的唯一方法是将 bar1 和 bar2 文件夹拆分为单独的 git 存储库。如果它们有点像模块,在同一个站点上都需要它们,您可以将 git init/clone 分别放入每个项目的 bar1 和 bar2 文件夹中,以便您可以单独控制它们。

另一种选择是将它们分成单独的 git 存储库,然后创建第三个“主”存储库,其中仅包含其他两个存储库作为各自文件夹中的子模块。然后像您可能已经做的那样使用自定义 git hook 来使 master 拉取并构建正确的文件夹/project/bar(x) 。然而,这是一种有点老套的做法,纯粹是为了不必先设置一些文件夹。

基本上,如果不编写自己的自定义提交查看器,您就无法根据文件夹拆分提交日志。您需要将项目分成多个存储库。然后,如何将它们重新组合在一起并自动执行任何构建任务,取决于您。毫无疑问,除了我上面提到的方法之外,还有更多方法。只是寻找最适合您需求的解决方案的一个例子。

  • Google 在一个(Perforce)存储库中实际上拥有数以万计的项目。Facebook 对 git 也做了同样的事情。如果你决定告诉他们他们做错了,**你也可以让 Torvalds 知道,**因为 [git 本身](https://github.com/git/git) 有多个项目 (在它们是分别*构建*、*打包*和*部署*的感觉):git、gitk、git-gui、gitweb。 (14认同)
  • 保罗·德雷珀的评论是完全正确的。Google 在单个存储库中拥有 2 *十亿* 行代码,并且在 uber 存储库中他们有许多单独的项目。将一个项目映射到一个存储库适用于玩具系统,但很快就会遇到钻石问题,并因缺乏原子提交/回滚而失败。 (5认同)
  • @user1461450 我从来没有说过不是。但这个人并不是在运营谷歌。胖回购和瘦回购各有利弊,我看到越来越多的公司由于缺乏对权衡的了解而陷入胖回购的困境。Slim 存储库是一种组织代码的安全方法,直到您拥有做出明智决定的知识和资源。我明确表示,使用“错误”一词是指“不符合您的要求”,这似乎被每个人在寻求炫耀自己的维基百科技能时所忽视。 (3认同)