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

时间:2019-06-04 06:29:41

标签: windows git version-control symlink

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

以下是我们所需设置的抽象布局,我们基本上有一个文件夹“ 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管理的,而软链接则不会具有我们所需要的功能。这篇文章很老,并且适用于linux开发环境,因此我很好奇是否对此进行了更改以及是否可以应用于Windows。

据我所知,最好的解决方案是创建一个类似“后合并”(mentiond in the same SO post)的脚本,该脚本将文件从存储库外拉入存储库,然后推入远程存储库。如果我必须给它起个名字的话,那将使其成为一个“预推”钩子。

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

1 个答案:

答案 0 :(得分:0)

通常的解决方案是将git submodule与在每个存储库1、2、3中执行的命令git submodule update --remote组合在一起

那样:

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

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