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中有什么可以允许这种行为吗?
对于每个项目,添加 .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 中。)