Там нет ничего построено, чтобы сделать это ; вам придется писать сценарий или программу самостоятельно. С яркой стороны BFG оставил вам файл карты: это намного лучше, чем git filter-branch
, что отбрасывает его, так что информация, необходимая для обновления заметок, исчезла.
Базовая реализация в примечаниях, что refs/notes/commits
(или как вы установите для core.notesRef
) указует на обычное обязательство, что вы можете, по крайней мере в теории git checkout
(вероятно, во временное рабочем дерево вы создали специально для этой цели). Это дерево содержит файлы, имена которых являются аннотированными коммитами, только слегка измененными. Например, если:
0001b24011381e8885683cd1119ba4cb077fa64b c81149b1b52b9e1e1767d6141f292891d715edb5
является запись отображения, с 0001b24011381e8885683cd1119ba4cb077fa64b
будучи старой фиксации, и если 0001b24011381e8885683cd1119ba4cb077fa64b
имеет запись заметок, будет файл, чье имя является 0001b24011381e8885683cd1119ba4cb077fa64b
-только, это может быть 00/01b2...
или 00/01/b2...
.
глубина вложенности всех этих добавленных подкаталогов управляется динамически кодом нот, с общей идеей является «добавить столько деревьев, сколько необходимо для создания найти ли есть примечание, быстро, но не так много деревьев чтобы заняться большим пространством в хранилище, когда осталось очень мало заметок, начиная с 0001b2...
. Этот разветвитель не имеет решающего значения для ваших целей, хотя вы можете сохранить его по тем же причинам скорости.
Ваша работа будет искать каждый файл в этом дереве под своим старым именем и переместить (или скопировать) его на новое имя, соответствующее новому значению commi t ID. Поскольку новое имя в этом случае будет c81149b1b52b9e1e1767d6141f292891d715edb5
, вы бы переименовали файл как c8/1149b1b52b9e1e1767d6141f292891d715edb5
или c8/11/49b1b52b9e1e1767d6141f292891d715edb5
и т. Д. После того, как вы переименовали все файлы (с помощью индекса: используйте git mv
или git rm --cached
и git add
при необходимости), вы можете повернуть их в обычный объект фиксации с git write-tree
, а затем git commit-tree
. Сделайте родителем нового коммита существующим refs/notes/commits
commit и используйте git update-ref
для обновления refs/notes/commits
, чтобы указать на новый, и ваши заметки должны появиться после фильтрации.
(После того, как у вас есть такая вещь работает, было бы неплохо, чтобы присоединиться к нему с git filter-branch
и/или самого BFG.)
«SVN to git» ✅, Какую команду вы используете с BFG? У BFG не так много вариантов, потому что цель проста. Если вы хотите создать чистый репозиторий, возможно, вам нужно создать только один коммит последней версии. Если ваш проект не имеет большой истории или если вы единственный, кто работает над этим. Это не проблема. [this] (http://stackoverflow.com/questions/1186535/how-to-modify-a-specified-commit-in-git) сообщение может помочь вам, если вы хотите изменить свою фиксацию. – Stargateur
@ Начальник это огромное старое репо. Я использовал 'java -jar bfg-1.12.14.jar -D" *. {Jar, war, zip, dll, pdb} "--delete-folders" Spring "' – Derp