Около года назад я реализовал стратегию git для управления сторонней библиотекой, основанную на общении с сообществом. Я был очень новичком в то время. Это потребовало создания сиротского узла, добавления исходного кода и слияния его с нашим исходным кодом. Команды следующие (из моих заметок):
cd /path/to/our/modified/source/directory #1
git checkout --orphan vendor
rm -rf * #2
cp -R /path/to/original/distribution/version/* . #3
git add . #4
git commit -m 'vendor vVersion'
git checkout merge-branch #5
rm -rf *
git reset --hard
git merge --allow-unrelated-histories -s ours vendor #6
Это приводит к следующей истории:
...A0--A1-... dev
\ /
C0 merge-branch (transient)
/
B0 vendor
Обратите внимание , что merge-branch
- это переходная ветвь, которая удаляется после объединения обратно в ветвь dev
. Шверн назвал эту ветку feature
, но название не имеет значения, так как не имеет реальной истории. Это переходная ветвь, используемая только в рабочем процессе.
Идея состояла в том, чтобы я потом добавил в ветку вендор, а затем снова слил со следующими командами (из моих заметок):
cd /path/to/our/modified/source/directory #1
git checkout vendor
rm -rf * #2
cp -R /path/to/original/distribution/version/* . #3
git add . #4
git commit -m 'vendor vVersion'
git checkout merge-branch #5
git merge vendor #6
В результате:
...A0--A1-...-Ax--Ay--... dev
\ / \ /
C0 Cz merge-branch (transient)
/ /
B0---...---Bw--... vendor
Теперь пришло время добавить новую версию стороннего источника. Однако может показаться, что ветка vendor пропала, или мои записи неверны. Я обнаружил, что если бы не сообщение о коммите, я бы вообще не смог найти ветку. Предполагается, что ветка B
работает параллельно основной ветке источника A
. Однако теперь, когда я думаю об этом, я не уверен, как это сделать.
Я мог бы изменить git checkout vendor
на git checkout <B0-hash>
, но это не имеет смысла, так как версия B0
нашего источника была бы версией A0
. Так как мне обновить его до версии Ax
? Или мне чего-то не хватает, чего я тогда не записал?