如何将git存储库添加为另一个git存储库的共享依赖项?

cdw*_*son 7 git cad git-submodules

我需要类似于子模块的东西,但它作为依赖项存在于主存储库之外.

这是问题所在:

我正在尝试使用Git(以一种非常笨拙的方式)来管理CAD工具(Cadsoft Eagle)的设计文件,而我很难搞清楚是否有办法使用git子模块来管理每个项目的依赖于CAD工具的共享库.

我正在使用这样的文件夹结构:

~/eagle/ <-- Main library used by multiple projects
    .git/     
    <library files>

~/projects/ <-- Projects folder
    Proj0/
        .git/
        <design files>
    Proj1/
        .git/
         <design files>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将eagle.git存储库添加为每个项目的git子模块是没有意义的.

但是,我仍然需要一种方法来快照"eagle.git"存储库的当前状态,以便在将来更新库时,可以回滚它以访问当时正在使用的库文件的特定版本. Proj [x]承诺了.

理想情况下,我喜欢以下内容:

~/eagle/ <-- Main library used by multiple projects
    .git/     
    <library files>

~/projects/ <-- Projects folder
    Proj0/
        .git/
        <design files>
        **eagle** <-- something that acts like a submodule  
                      but which actually points to ~/eagle/
    Proj1/
        .git/
         <design files>
         **eagle** <-- something that acts like a submodule  
                       but which actually points to ~/eagle/
Run Code Online (Sandbox Code Playgroud)

我希望能够:

cd ~/projects/Proj0
git submodule update
Run Code Online (Sandbox Code Playgroud)

并让〜/ eagle /目录自动回滚到检查到Proj0的修订版本.

任何人都知道Git中有什么可以允许这种行为吗?

mka*_*sek 5

对于每个项目,添加 .git/hooks/pre-commit(并确保它是可执行的):

#!/bin/sh
git --git-dir=~/eagle/.git log -1 --pretty=format:%H >.eagle_rev
git add .eagle_rev
Run Code Online (Sandbox Code Playgroud)

然后,对于每个项目:

git config alias.update-eagle '!git --git-dir=~/eagle/.git --work-tree=~/eagle checkout -q $(<.eagle_rev)'
Run Code Online (Sandbox Code Playgroud)

当您进行提交时,它会记录 ~/eagle 的当前 HEAD,并将git update-eagle在 ~/eagle 中检查该提交。(然后git checkout <branch>在对其进行任何更改之前确保您在 ~/eagle 中。)