我们当前有一个环境,其中多个存储库包含相同的文件,我们正在尝试“导出”,以便对文件的更新不会迫使我们更新每个单个存储库。
以下是我们所需设置的抽象布局,我们基本上有一个文件夹“ 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不太了解,但是肯定还有其他更优雅的解决方案来解决这个问题。
答案 0 :(得分:0)
通常的解决方案是将git submodule
与在每个存储库1、2、3中执行的命令git submodule update --remote
组合在一起
那样:
shared
存储库推送到其上游存储库git submodule update --remote
,然后添加,提交和推送。shared
子文件夹中包含上一步记录的最后共享提交(假定共享包括多个软件包,而不仅仅是somepackage
) 。如果您需要1/somepackage
而不是1/shared/somepackage
,则需要将符号链接添加到您的1、2、3存储库中(因为正确管理了符号链接)