Проблема
Вот что я подразумеваю под "двумя измерениями": обычно Git отслеживает изменения в коллекции файлов с течением времени (время = одно измерение).
Что бы я хотелчтобы сделать, это иметь поток «шагов», которые представлены дискретно, и эти шаги также отслеживаются с течением времени.
Я уверен, что это по-прежнему сбивает с толку, поэтому позвольте мне уточнить далее и предоставить пример использования, который япытаюсь решить для.
Я хочу отследить учебник по кодированию как Git-репозиторий, отслеживающий несколько «версий» одного и того же кода.Учебное пособие является накопительным, каждый шаг основывается на коде из предыдущего шага.
Таким образом, учебное пособие может выглядеть следующим образом:
Шаг 1
Шаг 2
- обновляет файл Foo
- создает файл Bar
Шаг 3
В любой момент я хотел бы иметь возможность оформить заказ на произвольный«шаг» в учебнике.
Теперь, если учебник никогда не менялся, вы можете просто сделать каждый шаг последовательным коммитом в одной и той же ветви, а затем переходить назад и вперед между коммитами.
Проблема в том, что учебное пособие является сложным и изменяется со временем, и я хотел бы исправить ошибку в файле, который представлен на шаге 2, чтобы обновить соответствующий раздел этого файла на всех этапах после шага 2.
Текущее решение
Теперь я уже пытался решить мой вариант использования, прежде чем публиковать вопрос на StackExchange, но это немного капризно, и я надеюсь на лучшее решение.
В настоящее время я использую ветвь для каждого «шага», поэтому у меня есть такие ветки, как это:
- master
- step-1
- step-2
- step-3
- etc
У меня естьскрипт, который я запускаю всякий раз, когда обновляю ветку, которая выглядит следующим образом:
git checkout step-1 && git rebase master && git checkout step-2 && git rebase step-1 ...
Вы поняли идею.Я использую Git для отслеживания ветвей с течением времени (первое измерение) и использую сценарий для управления моим вторым измерением (каскадные изменения между ветвями в определенном порядке).
В настоящее время проблема заключается в том, что я сталкиваюсь с конфликтами слияния довольночасто, и я волнуюсь, что из-за перебазировки репо будет трудно обнародовать.
Есть ли лучший / более элегантный подход к решению этого варианта использования?