【发布时间】:2020-03-13 07:10:27
【问题描述】:
我们如何使用 go-git 生成在两次提交之间发生更改的所有文件的列表,类似于git diff --name-only commit1 commit2?
对于上下文,我们有一个 git monorepo,它包含一个根 go.mod 文件,但包含多个 Go 应用程序。当开发人员将提交推送到分支时,我们希望获得在两次 git 提交之间更改的所有文件的列表 (git diff --name-only),并将其过滤到应用程序目录列表中,同时排除一些目录。我们的最终目标是,我们可以只构建、部署和测试在我们的 monorepo 中发生变化的应用程序。我们有一个 bash script similar to this one from shippable 可以做到这一点,但我们想使用纯 go 和 go-git。
【问题讨论】:
-
您可能需要使用 Tree.Diff 自己构建它。
-
我也更新了你的标题以匹配新问题。
-
TBH,对于多个应用程序来说,拥有一个 repo 一开始对我来说听起来很奇怪。有多个存储库,每个存储库都有自己的 CI,如果绝对必须,有一个“父”存储库,其中包含其他存储库为 submodules。此外,鉴于 Go 编译器针对编译速度进行了显式优化(而且我很少看到任何 Go 程序的编译时间超过几秒钟),我看不到它的优势。就像在“at all”中一样。
-
TBH,我同意@MarkusWMahlberg 的观点,但我的任务是让 monorepo 工作,而不是决定是否这样做。
标签: git go continuous-delivery monorepo go-git