Удалить репозиторий 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 не работают с такими хранилищами приложений. Проверьте объяснения на их веб-сайте, чтобы увидеть, соответствует ли эта схема вашим целям.

Может быть, процесс преобразования быстрее, чем предыдущие упомянутые советы. Я не пробовал это сам с большими хранилищами.

Другие вопросы по тегам