【问题标题】:Visual Studio: How to do incremental builds with MSBuild and GitVisual Studio:如何使用 MSBuild 和 Git 进行增量构建
【发布时间】:2016-12-27 03:04:52
【问题描述】:

我创建了一个目标并指定了此tutorial 中描述的输入和输出,以从 SASS 文件构建 CSS 文件。这通常有效,除非我切换到具有旧文件时间戳的旧 Git 分支。在这种情况下,我希望 MSBuild 执行我的目标以重建我的文件,但 MSBuild 跳过它,因为我的输入上的时间戳比我的输出旧,所以 MSBuild 认为我的输出是最新的。

当我切换 Git 分支时,如何让 Visual Studio 以增量方式构建我的 SASS 文件并清理/忽略我的输出?我想避免手动清理我编译的 CSS 文件来强制构建。

【问题讨论】:

  • 你可以有一个 postbuild 事件将当前 git hash 和/或提交日期存储在一个文件中,以及一个 prebuild 事件将该文件(如果有)与“新”当前 git hash/ 进行比较日期。如果新的提交比旧的提交更早,则进行干净的构建。

标签: git msbuild incremental-build


【解决方案1】:

您可以使用 Post Checkout Hook。 (另见official Git docs。)

将您的 clean 命令放入文件 .git/hooks/post-checkout。例如:

msbuild myproj.csproj /t:clean

当你切换分支时,该命令应该运行。

这将导致发生完全重建,这可能是您想要的,因为很难判断哪些文件在分支之间发生了变化。

AFAIK,所有 Git 钩子都是仓库本地的,无法签入。要与其他用户共享您的钩子,您可以将其保存在仓库中的某个位置,或者告诉用户手动将其复制到正确的放置,或添加构建事件以在需要时将其复制到那里。

【讨论】:

  • 这当然会导致完整的构建。我实际上认为这是正确的,因为不知道切换到任意分支会影响哪些输出。甚至可能没有 myproj.csproj。
  • 好主意。我似乎无法在 git 中提交结帐后挂钩文件。这是否意味着我团队中的每个开发人员都必须手动添加此结帐后挂钩文件?
  • 正确。我已经更新了我的帖子,提出了一些关于如何实现这一点的想法。
  • 我们可以创建将它们保存在项目文件夹中并创建一个指向 git hooks 的符号链接。
猜你喜欢
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
相关资源
最近更新 更多