Git: 保持同一文件的两个位置同步

Git: keep two locations of the same file in sync

我有一个 git 单头 C/C++ 库的存储库,它在根目录中有一个 .h 文件。这就是主要代码所在的地方。现在我想为 Python 或 Node.js 等其他编程语言做一些绑定。我想将每个绑定放在它自己的子文件夹中。现在要注意的是,在发布过程中只发布了这个子文件夹。 .h 文件(位于几层以上并包含在相对路径中)未发布,这会破坏几乎所有语言的绑定安装。

我可以看到以下选项:

  1. 符号链接。这非常接近我的需要,但它们在某些文件系统上可能会出现问题,所以我想知道是否有任何合理的替代方案。

  2. 硬链接。据我所知,Git 根本不支持。

  3. Git 挂钩以确保子文件夹中的文件与顶层文件匹配,并在需要时更新它们。但由于 Git 钩子未被 Git 跟踪 - 一些开发人员可能会忽略钩子并破坏它。

  4. 手动同步文件的脚本。很像 Git 钩子,但更明确。可能还允许将不同版本的 .h 文件保存在不同的子文件夹中,并且在紧急情况下允许更新一个绑定而不更新其他绑定一段时间。也许应该带有服务器端挂钩或 CI 脚本以确保在推送标记提交时文件匹配(例如,当发布新版本时)。

您认为什么是首选解决方案,或者我是否遗漏了任何未注意到的陷阱?

如果您不打算在 Windows 上使用它,您可以使用符号链接。

不要使用挂钩或其他方法在 git 中复制文件,因为这样你就有了一个不必要的 版本化 副本,它可能会不同步,除非你(正如你提到的)希望它故意不同步。

我建议的是解决根本问题:“在发布过程中只发布了这个子文件夹”。您需要的是一个 构建过程,该过程 将文件复制到绑定工作所需的位置, 然后“发布”结果。这可以是复制文件然后执行 "publish" 操作的简单脚本或 Makefile。 (一定要将副本添加到 .gitignore 以免意外添加!)