У меня есть 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.
Как это можно сделать?