Мне нужно что-то сродни подмодулям, но которые существуют возле основного репозитория как зависимость.
Вот проблема:
Я пытаюсь использовать Мерзавца (ДЕЙСТВИТЕЛЬНО неловким способом) для управления файлами дизайна для инструмента CAD (Орел Cadsoft), и мне нелегко выяснять, существует ли способ использовать подмодули мерзавца для управления зависимостью каждого проекта от общей библиотеки инструмента CAD.
Я использую структуру папок как это:
~/eagle/ <-- Main library used by multiple projects
.git/
<library files>
~/projects/ <-- Projects folder
Proj0/
.git/
<design files>
Proj1/
.git/
<design files>
В этом случае не имеет смысла добавлять eagle.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 / 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)'
Когда вы создаете commit, он запишет текущий HEAD ~ / eagle, а git update-eagle
проверит этот коммит в ~ / eagle. (Тогда просто убедитесь, что вы git checkout
в ~ / eagle, прежде чем вносить в него какие-либо изменения.)
Если орел
не имеет своего места в ProjX
,
, но каждый ProjX
может использовать конкретная версия eagle
,
затем:
Для каждого ProjX
вам необходимо:
MainProjX
Git , в котором вы найдете:
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
ревизию. .