构建文件的预合并挂钩

pre-merge hook for build files

我的存储库包含源代码 (/src) 和构建 (/dist)。大多数时候,当我合并一个分支时,我会遇到合并冲突,因为构建已更改。所以,在合并失败后,我触发了一个新的构建,用新文件覆盖所有冲突,然后结束合并。
这似乎是 git 钩子可以处理的事情。我的想法是在合并之前删除 dist 目录并在之后触发新的构建。但事实证明,并没有预合并挂钩这样的东西。 这让我意识到我的逻辑有点倒退。我知道我不能要求 git 在忽略 /dist 的同时合并 /src —— 这是同一个 repo。但这在我看来是很常见的情况(许多开源项目都是这样组织的)。那么这通常是如何处理的?

处理此问题的典型方法是不将构建产品存储在存储库中,正如人们在评论中提到的那样。当在 Git 列表中被问到时,这也是对这个问题的规范回答。

Git 存储库通常不是为处理构建产品而设计的,因为它们通常是二进制的,并且不能很好地增量。因此,将它们存储在您的存储库中会使存储库中包含您可能对长期保留不感兴趣的数据,并且还会导致合并冲突,如您所见。

如果您需要存储构建产品,最好的方法是使用某种工件服务器或发布资产存储。 GitHub 为此提供了版本,并且有诸如 Artifactory 之类的服务器可以处理构建资产。您也可以只使用可通过 HTTP 或 SFTP 访问的服务器,并将以提交 ID 命名的 tarball 推送到该位置,这是另一种非常常见且完全合理的方法。您可以选择关心实施一些定期修剪。

我要找的答案很简单:忽略 git 存储库中的构建文件,并忽略 npm 包的源文件。

忽略 git 存储库中的构建文件就像将目录添加到 .gitignore.

一样简单

至于 npm 包,使用 files 键在 package.json 中指定要分发的文件。也可以使用 .npmignore files 来忽略您不想共享的文件和目录,但是很容易忘记忽略一些文件并发布您不应该发布的文件。