Подход трансплантатов упомянутый от Крис Джонсен для объединения двух репозиториев больше не полностью действителен (только с трансплантатами).
В Git 2.18 (Q2 2018) функциональность "$GIT_DIR/info/grafts
" была заменена механизмом "refs/replace/
" (в течение некоторого времени).
Внутренний код имел поддержку для этого во многих местах, который был очищен
чтобы опустить механизм «трансплантатов» .
См. commit a3694d9 , commit f42fa47 , commit 8d0d81a , commit e2d65c1 , commit f9f99b3 , commit 0115e03 , commit fb40429 , commit 041c98e , commit e24e871 (28 апреля 2018) и commit d398f2e , коммит fef461e , коммит c5aa6db (25 апреля 2018 г.) от Йоханнес Шинделин (dscho
) .
(Объединено Junio C Hamano - gitster
- в коммит 352cf6c , 23 мая 2018 г.)
Так что вместо
echo "$commit-id $graft-id" >> .git/info/grafts
Теперь вы делаете:
git replace --graft $commit-id $graft-id
git filter-branch $graft-id..HEAD
Устаревшая поддержка .git/info/grafts
Функция прививки была удобным способом «сшить» древние
история к новому началу linux.git
.
Его реализация, однако, не соответствует стандартам Git, так как
слишком много способов, где это может привести к неожиданному и нежелательному поведению.
Например, при выталкивании из хранилища с активными трансплантатами это
можно пропустить коммиты, которые были "привиты", в результате чего
нарушенное состояние на другой стороне.
Кроме того, функция прививки ограничена списком «переписывания» коммитов
родители, это ничего не может заменить.
Более молодая функция, реализованная как git replace
, предназначена для исправления
эти ограничения и опасные ошибки.
Считается, что git replace
уже достаточно зрелый (с 4228e8b
(заменить: добавить --graft
опция, 2014-07-19, Git 2.1.0) он может выполнить прививку
обязанности файла), пришло время отказаться от поддержки файла пересадки, и
в конце концов уйти в отставку.
Теперь (снова Git 2.18, Q2 2018) у вас есть:
replace
: добавить --graft
опция
Строка использования для этой опции:
git replace [-f] --graft <commit> [<parent>...]
Сначала мы создаем новый коммит, который совпадает с <commit>
за исключением того, что его родители [<parents>...]
Затем мы создаем ref ref, который заменяется на
коммит, который мы только что создали.
С этой новой опцией, это должно быть просто
конвертировать графты для замены ссылок.
А до Git 2.20 (Q4 2018) недавно введенные вспомогательные данные графа коммитов несовместимы с такими механизмами, как replace & grafts, которые «нарушают» неизменный характер ссылочных отношений объекта.
Отключить оптимизацию на основе его использования (и обновления существующего графика изменений), когда эти несовместимые функции используются в хранилище.
См. коммит 829a321 , коммит 5cef295 , коммит 20fd6d5 , коммит d653824 , коммит b775896 , коммит 950c62b (20 августа 2018 г.) Деррик Столи (derrickstolee
) .
См. коммит 212e0f7 , коммит 4a6067c (20 августа 2018 г.) от Стефан Беллер (stefanbeller
) .
(Объединено с Junio C Hamano - gitster
- в коммит 6d8f8eb , 16 октября 2018 г.)