Удалить репозиторий git-annex из дерева файлов
Вчера я попытался установить git-annex для резервного копирования моих файлов. Я побежал git annex add .
в корне моего дерева хранилища, а затем git commit
, Пока все хорошо.
Что я не знал, что делал git-annex, это превращал все дерево файлов в целую кучу символических ссылок. Каждый файл во всем моем дереве теперь имеет символическую ссылку на .git/annex/objects
! Это портит мое приложение, которое зависит от того, что файлы не являются символическими ссылками.
У меня вопрос, как мне избавиться от git-annex и восстановить мою файловую систему в исходное состояние? Для нормального git репо я мог бы сделать rm -r .git
, но я боюсь, что не будет делать работу в git-приложении. Заранее спасибо.
3 ответа
Итак, я наткнулся на некоторые документы для git-annex, и они дают две команды, которые достигают того, что я хотел сделать:
unannex [путь...]
Используйте это, чтобы отменить случайную команду добавления git application. Вы можете использовать git annex unannex для перемещения содержимого из приложения в любой момент, даже если вы уже зафиксировали его. Это не та команда, которую вам следует использовать, если вы намеренно добавили файл и больше не хотите его содержимое. В этом случае вы должны использовать вместо этого git annex drop, и вы также можете git rm файл.
uninit
Используйте это, чтобы прекратить использовать приложение git. Он отменяет удаление каждого файла в хранилище и удаляет все другие данные git-annex, оставляя вас с хранилищем git плюс ранее присоединенные файлы.
Я начал бегать git annex uninit
Боже мой, это было медленно. Потребовалось около 5 минут, чтобы "удалить" только один файл. Дерево моей файловой системы составляет около 200000 файлов, так что это было просто неприемлемо.
То, что я в итоге делал, было на самом деле удивительно просто и работало хорошо. Я использовал cp -rL
флаги для автоматического дублирования содержимого моего файлового дерева и обращения всех символических ссылок в дубликате. И это было очень быстро: около 30 секунд для всего моего файла. Единственная проблема заключалась в том, что права доступа к файлу не были сохранены из моего исходного состояния, поэтому мне нужно было запустить некоторые chmod
а также chcon
Команды, чтобы исправить разрешения.
Этот второй метод работал для меня, потому что в моей схеме не было других символических ссылок. Если у вас есть символические ссылки в вашей схеме помимо тех, что созданы git-annex, то мой маленький ярлык, вероятно, не является правильным выбором для вас, и вы должны рассмотреть возможность придерживаться только git annex uninit
,
Если у вас есть хранилище v6, вы можете сделать следующее:
git unnannex . --fast
который заменяет символические ссылки с жесткими ссылками вместо медленной замены символических ссылок на исходные файлы снова.
Только v6 репозитории могут выполнять git-annex unannex
команда для незафиксированных изменений, поэтому может потребоваться обновить репозиторий git-Annex до репозитория v6.
Смотрите официальное руководство по обновлению.
В моем случае мне пришлось обновить v5 -> v6, и мне нужно было только выполнитьgit annex upgrade
что заняло несколько секунд, и я был сделан.
Я хотел бы включить свой собственный опыт использования git annex uninit
в дополнение к ответу ОП.
Я не приложил полный репозиторий, а только около 40 больших файлов. Решив, что у меня нет особой пользы от использования git-annex
Я попытался удалить несколько файлов, и это закончилось через несколько секунд для каждого файла. Затем я побежал git annex uninit
и это заняло более минуты только для действительно больших файлов (более нескольких ГБ). В целом, это было сделано примерно за 20 минут, что было приемлемо в моем случае.
Таким образом, кажется, что сложность unannexing увеличивается с размером дерева прилагаемых файлов.
Вы пытались использовать git-annex в прямом режиме?
Просто измените свой репозиторий с
git annex direct
Это больше не будет использовать символические ссылки, но некоторые команды git не работают с такими хранилищами приложений. Проверьте объяснения на их веб-сайте, чтобы увидеть, соответствует ли эта схема вашим целям.
Может быть, процесс преобразования быстрее, чем предыдущие упомянутые советы. Я не пробовал это сам с большими хранилищами.