Git переписать с подмодулями, поглощать файлы подмодулей при каждом коммите? - PullRequest
0 голосов
/ 21 сентября 2019

Я хочу сделать что-то немного более сложное, чем un-submodule подмодуля git

У меня есть git-репозиторий верхнего уровня, который содержит подмодульные репо.

Я хочу выполнить переписывание истории ветки фильтра в репозитории верхнего уровня и по существу включить файлы из соответствующей версии подмодуля при каждом коммите в историю верхнего уровня .

Это также можно описать как обратную Ретроспективно конвертировать папку git в субмодуль?

Например,

Репозиторий субмодуля имеет историю

A--B--C--D

Топ репо имеет историю

X--Y--Z
where
X[points to A]--Y[points to B]--Z[points to D]

Наивное решение, описанное в другом вопросе, приведет к:

A--B--C--D
          \
           > M
          / 
   X--Y--Z

Я хотел бы вместо:

X'--Y'--Z'
where:
X' is X plus the files from A
Y' is Y plus the files from B
Z' is Z plus the files from D'

Обращаясь к комментарию от пользователя torek: обратите внимание, что коммит C потерян, а коммит D 'содержит все изменения коммитов C и D. Это не по выбору, а упрощение.Я также был бы также доволен коммитом C '(изменения от C), который просто появляется между Y' и Z ', к сожалению, который вводит другие крайние случаи, которые не стоит решать.

Что я пробовал до сих пор?

Потратил некоторое время, пытаясь сформулировать, что я хочу сделать, и исследуя существующие вопросы SO.

Это проблема XY?

Нет, это не так.Это не часть большой проблемы, которую я на самом деле пытаюсь решить.

1 Ответ

3 голосов
/ 21 сентября 2019

Подмодуль - это (совершенно обычный) репозиторий, если вы хотите прочитать материал из его коммитов, вы можете добавить его объект db к вашему поиску.

GIT_ALTERNATE_OBJECT_DIRECTORIES=$PWD/.git/modules/mysubmodule/objects \
git filter-branch --index-filter '
        if subcommit=`git rev-parse -q --verify :path/to/submodule`; then
                git update-index --force-remove path/to/submodule
                git read-tree --prefix=path/to/submodule/ $subcommit
        fi
' -- --all
GIT_ALTERNATE_OBJECT_DIRECTORIES=$PWD/.git/modules/mysubmodule/objects \
git repack -ad

должен сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...