8

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

这是问题所在:

我正在尝试使用 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 中允许这种行为的任何东西吗?

4

2 回答 2

5

对于每个项目,添加 .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 中签出该提交。git checkout <branch>(然后在对它进行任何更改之前确保您在 ~/eagle 中。)

于 2010-07-28T06:44:11.100 回答
0

如果eagle在 a 中没有它的位置ProjX
每个都ProjX可以使用 的特定版本eagle
则:

对于每个ProjX,您需要:

  • 有一个MainProjXGit repo,你会在其中找到:
    • 一种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,那是必要的。ProjXeagle

于 2010-07-27T19:55:18.870 回答