GIT 将资源共享到多个存储库

GIT share resource into multiple repositories

我们目前有一个环境,其中多个存储库包含相同的文件,我们正在尝试 'export' 以便对文件的更新不会迫使我们更新每个存储库。

以下是我们所需设置的抽象布局,我们基本上有一个文件夹 'share',它提供了一个应该包含在远程其他项目中的包。

local:
+---1
|       1.txt
+---2
|       2.txt
+---3
|       3.txt
\---share
    \---somepackage
            somefile.txt
remote:
+---1
|   |   1.txt
|   \---somepackage
|           somefile.txt
+---2
|   |   2.txt
|   \---somepackage
|           somefile.txt
\---3
    |   3.txt
    \---somepackage
            somefile.txt

推送到远程时,共享文件应包含在每个存储库中。对共享文件夹的更改应应用于每个共享存储库(最好的情况是立即,最坏的情况是推送到远程)。

我们使用 windows 作为我们的开发环境,但是推送的存储库将由运行每个存储库的 linux 系统使用,如果相关的话。

我们考虑过使用符号链接,但根据 this SO post 硬链接不受 git 管理,软链接不会具有我们想要的功能。 post 已经很老了,适用于 linux 开发环境,所以我很好奇是否有这方面的变化,是否可以应用于 windows.

据我所知,最好的解决方案是创建一个像 "post-merge" (mentiond in the same SO post) 这样的脚本,将文件从存储库外部拉入存储库,然后推送到远程回购。如果我必须给它一个名字,那将使它成为一个 "pre-push" 钩子。

我目前正在独自解决这个问题,对 git 不是很了解,但肯定有其他更优雅的解决方案可以解决这个问题。

正常的解决方案涉及 git submodule combined with the command git submodule update --remote 在每个存储库 1、2、3

中执行

这样:

  • 您将新提交从 shared 存储库推送到其上游存储库
  • 您在每个存储库 1、2、3 中执行 git submodule update --remote,然后添加、提交和推送。
  • 这 1、2、3 个存储库的任何克隆都将包括上一步中记录的最后共享提交,在 shared 子文件夹中(假设共享包括多个包,而不仅仅是 somepackage).

如果您需要 1/somepackage 而不是 1/shared/somepackage,则需要将符号链接添加到您的 1、2、3 存储库(因为符号链接已得到妥善管理)