如何将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>
。)
如果eagle
在ProjX
没有它的位置,
但是每个ProjX
都可以使用特定版本的eagle
,
然后:
对于每个ProjX
,您需要:
MainProjX
Git MainProjX
,您可以在其中找到: ProjX
eagle
的版本( 与ProjX
相同 ) 每个MainProjX
父项目的目标是将ProjX
和eagle
的版本保持在一起,即记录正确的依赖关系。
~/projects/ <-- Projects folder
MainProj0
Proj0/
.git/
<design files>
eagle/
.git/
<library files>
MainProj1
Proj1/
.git/
<design files>
eagle/
.git/
<library files>
现在,是的,这是很多' eagle
'重复,但如果每个ProjX
能够使用它自己的eagle
版本,那么这是必要的。
上一篇: How to add a git repository as a shared dependency of another git repository?