2016-01-22 3 views
1

У меня есть существующий репозиторий git с большим количеством файлов «.bmp», разбросанных по нескольким папкам. Я хочу обновить этот репозиторий, чтобы использовать Git-LFS. Есть ли способ сделать это, не потеряв всю историю фиксации? При поиске по этому вопросу я наткнулся на инструмент BFG Repo-Cleaner. Но поддерживает ли этот инструмент историю фиксации указанного репозитория?Как перенести репо на git-lfs, не теряя при этом всю историю фиксации?

ответ

0

Я не знаю, что вы подразумеваете под «сохранить коммит историю» ...

Вы должны знать, что мерзавец основан на хэш (SHA1), что «печать» фиксации. Если одна из данных изменения фиксации, sha1 фиксации и из-за коммитов связаны между собой всеми дочерними коммитами.

Как следствие, история изменится, и вы будете раздражать всех пользователей репозитория, если вы принудительно нажмете изменения, сделанные BFG.

Вот почему вы должны думать, если он стоит, чтобы сделать это, но если вы думаете, что это, сделайте это ... с осторожностью ;-)

2

Я использовал этот script. В статье хорошо объяснено, а также перечислены некоторые другие способы миграции репо. Для меня было бы хорошо изменить значения sha-1, если история, автор, дата и т. Д. Совпадают. Поэтому, если вы не заботитесь о значениях sha-1, этот сценарий работает очень хорошо.

+0

@ p-kar Сообщите мне, если это сработает для вас, или если у вас снова возникнут проблемы. – Frossy

0

Это может быть очевидным на данный момент, но, кажется, существует «лучший» вариант перехода на средний уровень использования, отличный от большой помощи связанного с Frossy script, упомянутого выше ... см. git-lfs-migrate. Как я уже сказал, это может быть болезненно очевидным на данный момент, но, как git-lfs noob, это было не для меня несколько дней назад, и этот вопрос получил много хитов.

Кроме того, я только что увидел внизу сценария @ Frossy, что есть упоминание о git-lfs-migrate.

0

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

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

  • Выставьте GIT LFS для репо
  • Добавьте gitattribute *.bmp filter=lfs diff=lfs merge=lfs -text и совершить это изменение
  • В файловом проводнике, поиск всех файлов .bmp и удалить все эти файлы
  • Revert все изменения в вашей рабочей копии
  • Теперь все .bmp файлы должны отображаться модифицирована, несмотря на то, что они точно такие же файлы, как в вашем (модификация на самом деле является изменением атрибута в файле, сообщающем ему добавить git lfs, а не модификацию самого файла)
  • Зафиксируйте эти изменения. Это подтолкнет все ваши файлы .bmp к git lfs

Возможно, вы считаете, что это бессмысленно, потому что оно просто дублирует точные данные между вашим старым git-репозиторием и новыми git lfs. Если вы не хотите этого дублирования, вам нужно использовать что-то вроде BFG Repo-Cleaner, как указано в вопросе.

...Но у нас были некоторые проблемы, которые означали необходимость сделать этот процесс на нашем репо. Вот предыстория, почему мы это сделали (у нас было все в порядке с дублированием, чтобы исправить проблему, которую мы имели):

У нас было существующее хранилище с большим количеством .png-файлов, разбросанных по всему миру, аналогично вашей проблеме. Мы начали использовать git lfs с этим репозиторием и добавили в строку *.png filter=lfs diff=lfs merge=lfs -text к нашим .gitattributes. Это означало, что все существующие файлы .png остались в нашем старом git-репозитории, и новые файлы были добавлены в наш git lfs.

... Но это вызвало проблему, когда файлы .png иногда отображались как измененные (хотя содержимое файла не было изменено), поскольку их атрибуты были изменены. Выполнение этих изменений добавило бы их в git lfs, но это стало неприятностью, потому что эти изменения не могли быть отменены, и это предотвратило бы легкое переключение между ветвями (немодифицированные файлы должны были бы быть повторно зафиксированы, прежде чем можно было бы переключать ветви).

Для решения этой проблемы нам необходимо перенести на все наших .png-файлов на git lfs без изменения истории фиксации, так же как и на этот оригинальный вопрос. Использование описанного выше процесса - простой, безопасный и простой способ устранить эту неприятность за счет дублирования данных между старым git gif и новыми git lfs.

Смежные вопросы