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

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

这是问题:

我试图使用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>

在这种情况下,将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/

我希望能够:

cd ~/projects/Proj0
git submodule update

并让〜/ eagle /目录自动回滚到Proj0中检入的版本。

任何人都知道Git中可以允许这种行为的任何东西吗?


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

#!/bin/sh
git --git-dir=~/eagle/.git log -1 --pretty=format:%H >.eagle_rev
git add .eagle_rev

然后,对于每个项目:

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

当你提交时,它会记录〜/ eagle的当前HEAD,而git update-eagle会检查〜/ eagle中的提交。 (然后在你做任何修改之前,确保你在〜/ eagle中git checkout <branch> 。)


如果eagleProjX没有它的位置,
但是每个ProjX都可以使用特定版本的eagle
然后:

对于每个ProjX ,您需要:

  • 有一个MainProjX Git MainProjX ,您可以在其中找到:
  • 一个ProjX
  • eagle的版本( ProjX相同
  • 每个MainProjX父项目的目标是将ProjXeagle的版本保持在一起,即记录正确的依赖关系。

    ~/projects/ <-- Projects folder
        MainProj0
          Proj0/
              .git/
              <design files>
          eagle/
              .git/
              <library files>
    
        MainProj1
          Proj1/
              .git/
              <design files>
          eagle/
              .git/
              <library files>
    

    现在,是的,这是很多' eagle '重复,但如果每个ProjX能够使用它自己的eagle版本,那么这是必要的。

    链接地址: http://www.djcxy.com/p/47055.html

    上一篇: How to add a git repository as a shared dependency of another git repository?

    下一篇: Displaying NUnit console output in CruiseControl.NET