У меня есть main
проекта, которая содержит подмодуль foo
. Для этого конкретного проекта я хотел бы внести небольшое изменение в foo
которое применимо только к этому конкретному main
проекту.
main/
+ .git
+ main.c
+ lib/
| + bar.c
+ foo/ # My 'foo' submodule
+ .git
+ config.h # The file I want to patch from 'main'
+ ...
Общим решением было бы перейти к моему подмодулю, сделать фиксацию Applied patch for main
в новом ветки, называемом main-project
, а затем нажать его. К сожалению, это очень плохой подход, потому что я вношу изменения в foo
что имеет значение только для main
. Кроме того, когда я обновляю foo
до последней версии, мне придется чересчур-выбрать патч, который вводит много шума в историю foo
.
Другое решение - иметь реальный файл исправления на main
который применяется к foo
непосредственно перед сборкой. К сожалению, поскольку это изменяет содержание подмодуля, и я буду иметь uncommitted измененный на foo
, так что это тоже нехорошее решение.
Идеальное решение - отслеживать мой патч с помощью Git, но на верхнем уровне (например, непосредственно на main
, а не на foo
). Теоретически, можно было бы добавить blob
в tree
Git, который указывает на местоположение подмодуля:
blob <sha> main.c
tree <sha> lib/
commit <sha> foo
blob <sha> foo/config.h
С этой идеей исправленный файл config.h
принадлежащий foo
будет отслеживаться по main
.
Как это можно сделать?