Удалите поддельный, передают родительский указатель

Я импортировал хранилище Базара в Мерзавца (использующий мерзавца bzr ), но получающееся хранилище содержит поддельное, передают родительскую ссылку:

Spurious parent link

Заметьте, что передавание тегового 1.02-6 базируется прочь 1.02-3 передают, но 1.02-1 излишне также отмечен как родитель. (Отметьте: Все передавание в этой части repo помечено; есть, не передает между теми показанными.)

Я попытался повторно базироваться несколькими способами (на владелец отделение: , который мерзавец повторно основывает 1.02-3 , мерзавец, повторно основывает-i вверх по течению 1.02 , перебаза мерзавцев - на 1.02-1 1.02-3 , перебаза мерзавцев - корень вверх по течению 1.02 - onto=other_branch ), но в каждом случае это терпит неудачу с конфликтом слияния. Они, кажется, делают попытку больше, чем необходимо; история, исправляют кроме для дополнительного родительского указателя, зарегистрированного в передавании тегового 1.02-6 .

Как вы удаляете связь, чтобы линеаризовать историю? Есть ли лучший путь, чем ручной избирательный подход к выбору всего передавания в последовательности?

6
nl ja de
Это "Действительно поддельно"? Или были ли исправления ошибок, сделанные к 1.02-1 , которые были слиты в 1.02-6 , но didn' t превращают его в 1.02-3 (или сделал его там через различный путь)? Не то, чтобы знакомый с bzr , и I' m принятие графа выше упрощен до теговых выпусков только (т.е. есть другие commits/changesets между ними, которые просто являются not' t показанный в данный момент).
добавлено автор twalberg, источник
@twalberg: Не упрощенный. Те - все передавание.
добавлено автор Mechanical snail, источник
Могло бы быть полезным: git-scm.com/docs/git-commit-tree, файл кошки мерзавца-p 1.02-6
добавлено автор Mechanical snail, источник

4 ответы

The easiest way to do this (in git >= 1.6.5) is to use:

git replace --edit 

и удалите/добавьте/измените Родителя: линии.

Как только вы рады, что изменение правильное, можно переписать взятие на себя обязательство делать изменение постоянным:

git filter-branch --tag-name-filter cat -- --all

Или только переписать передавание включенного а не полная история (благодаря комментарию Майкла):

git filter-branch --tag-name-filter cat -- ..head
12
добавлено
Простой и прямо к пункту без многократных подверженных ошибкам команд. Это должно быть принятым ответом!
добавлено автор Leo Holanda, источник
Спасибо, that' s очевидный способ, чтобы переписать слияние передают (2 родителя), как постоянный клиент передает (1 родитель). Дополнение от Майкла, чтобы не переписать полную историю оказалось очень полезным в моем случае. Я предложу редактировать для ответа
добавлено автор floribon, источник
остерегайтесь, так или иначе это разбило sourcetree на Mac постоянно
добавлено автор HopefullyHelpful, источник
Обратите внимание, что мы можем управлять второй командой как отделение фильтра мерзавца - кошка фильтра имени тега - <родительский sha>.. голова , таким образом, мы просто переписываем только необходимое передавание и не каждый передавать. Поддержанные аргументы зарегистрированы здесь kernel.org/pub/software/scm/git/docs/git-rev-list.html
добавлено автор Michael, источник

Можно сделать это вручную использование передавать-дерево мерзавца внутренняя команда.

Мы хотим отредактировать передавание тегового 1.02-6 , чтобы удалить поддельный родительский указатель (к 56a2f3b5948ab54c9239c2b384a6ea9eb1f410c4 ).

Во-первых, читайте, информация от существующего передают объект:

[email protected]:/path/repo.git$ git cat-file -p 1.02-6 
tree c658aa1ebcf2bf2a607696c7868b875be72fb01f
parent 56a2f3b5948ab54c9239c2b384a6ea9eb1f410c4
parent 4e671bf1d2298729c9e5cfd8229051cfe2c40831
author James Damour (Suvarov454)  1146319620 -0400
committer Bazaar Package Importer  1146319620 -0400

The "main/" in the Section line of debian/control should be assumed.

Извлечение сообщение о фиксации, используя регистрацию мерзавца - формат = % B-n 1 1.02-6 .

Теперь создайте новое, передают с тем же самым содержанием (исключая поддельную родительскую ссылку и информацию о субъекте преступления):

git log --format=%B -n 1 1.02-6 | \
    GIT_AUTHOR_NAME="James Damour (Suvarov454)" \
    GIT_AUTHOR_EMAIL="[email protected]" \
    GIT_AUTHOR_DATE="1146319620 -0400" \
    git commit-tree c658aa1ebcf2bf2a607696c7868b875be72fb01f \
        -p 4e671bf1d2298729c9e5cfd8229051cfe2c40831

Это создало новое, передают и напечатал его мешанину ( cc32e66 ...). Теперь превратите его в новое отделение:

git checkout -b fixed_commit cc32e66

и переоснова владелец на новое отделение:

git checkout master
git rebase fixed_commit

И мы сделаны:

Finished

Вы, вероятно, хотите удалить старые отделения и повторно пометить соответствующее, передает.


На самом деле могло бы быть легче использовать отделение фильтра мерзавца - родительский фильтр. Я не попробовал это.

5
добавлено

Это исправит родителей, не изменяя ничто больше (например, даты субъекта преступления):

git filter-branch --tag-name-filter cat --parent-filter 'test $GIT_COMMIT = [sha of 1.02-6] && echo "-p [sha of 1.02-3]" || cat' -- 1.02-1..master

Необходимо будет заменить текст в скобках соответствующим, передают ID. Если у вас есть больше нисходящих отделений, которые должны быть переписаны, изменение 1.02-1.. владелец , чтобы - все и готовыми ждать.

Конечно, не используйте это или любое другое решение, если другие ветвились от кого-либо, передает после тех, вы хотите отредактировать. Они будут ненавидеть вас.

2
добавлено
Если вы don' t должен заботиться о других (например, в случае очистки прямо после преобразования от svn или bzr мерзавцу и прежде чем вы продвинулись к своему серверу мерзавца), тогда, это - лучший ответ, действительно. Я попробовал всех их.
добавлено автор Amedee Van Gasse, источник

Вы могли попробовать a переоснова. Есть пример немного вниз (поиск - на), что я думаю, подобно вашему случаю.

Я думаю , необходимо сделать

git rebase --onto 1.02-1 1.02-3

который должен поместить все после 1.02-3 на 1.02-1, и это, вероятно, что вы хотите.

Помните, что мешанины будут отличаться на всем сначала измененном, передают, но я предполагаю, что вы делаете это как первый шаг в перемещении от bzr, таким образом, никто еще еще не должен был клонировать это.

1
добавлено
That' s предоставление связки конфликтов слияния. Кажется, пытается сделать больше, чем необходимо.
добавлено автор Mechanical snail, источник
Git — русскоговорящее сообщество
Git — русскоговорящее сообщество
588 участник(ов)

Обсуждаем git, его фичи, хаки, надстройки и экосистему. Правила: http://telegra.ph/ru-chat-rules-06-19 https://git.wtf/

pro.git::next
pro.git::next
44 участник(ов)

Обсуждение системы контроля версий git и инструментов для работы с ней.