我需要类似于子模块的东西,但它作为依赖项存在于主存储库之外。
问题在于:
我正在尝试使用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中有什么可以允许这种行为吗?
答案 0 :(得分:4)
对于每个项目,添加.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中的提交。 (然后在对其进行任何更改之前,请确保在{/ 1]中使用git checkout <branch>
。)
答案 1 :(得分:0)
如果eagle
在ProjX
内没有位置,则
但每个ProjX
都可以使用eagle
的特定修订版
然后:
对于每个ProjX
,您需要:
MainProjX
Git repo ,您可以在其中找到:
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
版本,则必须这样做。