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

时间:2018-02-05 15:14:25

标签: python c++ git synchronization symlink

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

我可以看到以下选项:

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

  2. 硬连接。 AFAIK,完全不受Git支持。

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

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

  5. 您认为优先考虑的解决方案是什么,还是我错过了任何未被注意的陷阱?

1 个答案:

答案 0 :(得分:1)

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

不要使用挂钩或其他方法在git中复制文件,因为那时你有一个不必要的版本化副本可能会失去同步,除非你(如你所说)期望需要它故意不同步。

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