1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/oschina-git-repo-clean

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 21:53 b6b1271

Введение

Git repo-clean — это расширение Git, разработанное на Golang. Оно предназначено для сканирования, очистки и перезаписи истории коммитов в репозиториях Git.

Зависимости:

  • Git версии 2.24.0 или выше (обязательно).

Установка

Есть два способа установки:

  1. Установка бинарного пакета:
  • Скачайте пакет с сайта https://gitee.com/oschina/git-repo-clean/releases/.
  • Распакуйте архив. В папке вы найдёте следующие файлы:
    • git-repo-clean.exe — исполняемый файл программы.
    • README.md — руководство пользователя.
    • docs — папка с дополнительными документами.
    • LICENSE — лицензия программы.
  • После распаковки архива не нужно сразу запускать git-repo-clean.exe. Сначала необходимо выполнить дополнительные шаги по установке.
  1. Компиляция из исходного кода:
  • Установите среду разработки Golang версии 1.15 или выше. Для этого перейдите на сайт https://docs.studygolang.com/doc/install.

  • Клонируйте репозиторий с исходным кодом: git clone https://gitee.com/oschina/git-repo-clean.

  • Перейдите в каталог с исходным кодом и скомпилируйте программу: make.

  • Если при компиляции возникает ошибка i/o timeout, попробуйте использовать прокси-сервер: go env -w GOPROXY=https://goproxy.cn,direct.

  • Для Linux: скопируйте исполняемый файл git-repo-clean в папку с утилитами Git: sudo cp git-repo-clean $(git --exec-path).

  • Для Windows: есть три способа установить программу. Первый способ — добавить путь к исполняемому файлу в переменную PATH. Второй способ — скопировать исполняемый файл в папку с утилитами Git. Третий способ — скопировать файл в системную папку C:\Windows\system32. Этот способ не рекомендуется, так как он может привести к ошибкам в работе системы.

  • Для Mac OS: после настройки программы может потребоваться предоставить ей права на выполнение. Для этого откройте «Системные настройки», перейдите в раздел «Безопасность и конфиденциальность», нажмите Allow Anyway.

После установки программы выполните команду git repo-clean --version, чтобы убедиться, что установка прошла успешно.

Использование

Программа может использоваться двумя способами: через командную строку и в интерактивном режиме.

Доступные опции:

  • -v, --verbose — показать процесс обработки данных.
  • -V, --version — отобразить версию программы.
  • -h, --help — отобразить информацию о программе.
  • -p, --path — указать путь к репозиторию Git (по умолчанию текущий каталог).
  • -s, --scan — сканировать данные в репозитории Git (по умолчанию все ветки).
  • -f, --file — указать конкретный файл или каталог в репозитории (несовместимо с опцией --scan).
  • -b, --branch — удалить файлы только из указанной ветки (по умолчанию из всех веток).
  • -l, --limit — установить порог размера файлов для сканирования. Например, '--limit=10m'.
  • -n, --number — ограничить количество результатов сканирования.
  • -t, --type — задать тип файлов для сканирования (например, '.tar.gz').
  • -i, --interactive — запустить интерактивный режим.
  • -d, --delete — выполнить удаление файлов и переписать историю.
  • -L, --lfs — преобразовать большие файлы в указатели Git LFS.

В интерактивном режиме программа запускается без дополнительных параметров. По умолчанию доступны опции --scan, --delete и --verbose. Чтобы использовать другие опции, например --branch, добавьте опцию -i [--interactive].

В режиме командной строки можно использовать несколько опций одновременно. Например:

  • git repo-clean --verbose --scan --limit=1G --type=tar.gz --number=1 — выполнить сканирование всех веток, найти файлы размером более 1 ГБ с расширением .tar.gz и вывести первый результат.
  • git repo-clean --verbose --scan --limit=1G --type=tar.gz --number=1 --delete — удалить найденные файлы и переписать историю коммитов.
  • git repo-clean --verbose --scan --limit=1G --type=tar.gz --number=1 --delete --branch=dev — удалить указанные файлы только в ветке dev и переписать её историю.

Если вы знаете, какие файлы хотите удалить, можно пропустить этап сканирования и указать конкретные файлы или каталоги с помощью опции --file. Например: git repo-clean --verbose --file file1 --file dir/ --delete.

Также можно указать порог размера файлов, которые будут удалены. Например: git repo-clean --verbose --limit=1G --delete. В этом случае опция --number не имеет смысла, и по умолчанию используется значение UINT_MAX.

Обратите внимание, что по умолчанию программа сканирует и удаляет файлы во всех ветках. Опция --branch указывает только ветку для удаления, но не для сканирования. Поэтому если вы используете эту опцию, программа может выбрать файлы из другой ветки.

С версии v1.3.0 программа поддерживает преобразование больших файлов в указатели Git Large File Storage (LFS). Если у вас есть доступ к этой функции, вы можете перенести большие файлы на сервер LFS и хранить их отдельно от основного репозитория Git. Для этого после сканирования файлов установите локально инструмент git lfs и используйте его для управления указателями LFS. --limit=100M --type=so --delete --lfs Эта команда преобразует файлы .so размером более 100 МБ в репозитории в указатели LFS размером не более 200 байт, что значительно экономит место в хранилище.

Структура кода

  • main.go | программа главный вход
  • options.go | обработка параметров программы
  • cmd.go | интерактивная обработка команд
  • color.go | модуль отображения цвета
  • repository.go | сканирование и обработка репозитория
  • fastexport.go | запуск процесса git-fast-export
  • fastimport.go | запуск процесса git-fast-import
  • parser.go | анализ данных репозитория
  • filter.go | фильтрация данных репозитория
  • git.go | функции, связанные с объектами Git
  • utils.go | некоторые полезные вспомогательные функции
  • lfs.go | функции обработки Git LFS

TODO

  • Поддержка нескольких вариантов выбора в одном и том же параметре, например: --type = jpg, png, mp4
  • Добавление информации о прогрессе процесса обработки и времени выполнения
  • Дальнейшая проверка предоставленного репозитория, например, проверка на разделение .git и рабочего каталога
  • Рефакторинг модуля i18n с использованием метода загрузки файлов
  • Реализация однократной установки на Windows
  • Обновление Golang
  • Обновление Git

BUG

  • Если в репозитории есть вложенные теги, при очистке могут возникнуть ошибки, такие как «error: multiple updates for ref 'refs/tags/v1.0.1-pointer' not allowed», что может привести к сбою удаления файлов. Временно решение — выйти из программы и отобразить предупреждение при обнаружении такой ситуации.
  • При попытке удалить путь или тип файла, которые существуют в определённой версии истории, может потребоваться несколько операций для полного удаления.

NOTE

  • В настоящее время основное внимание уделяется самим файлам, поэтому при сканировании учитываются только объекты типа blob.

  • Начиная с Git 2.32.0, git-rev-list имеет опцию --filter = object: type, которая позволяет фильтровать определённые типы при сканировании, ускоряя процесс. Рассмотрите возможность использования более новой версии Git в будущем.

  • Отдельные параметры --branch, --scan, --verbose, --delete не действуют, их необходимо использовать в сочетании с другими параметрами.

Часто задаваемые вопросы (Q&A)

Q: При использовании git Bash на Windows для запуска программного обеспечения, такого как git repo-clean --version, вывод отображается в виде искажённых символов. A: Вероятно, это проблема локализации терминала. Проверьте конфигурацию терминала: в контекстном меню git Bash выберите «Параметры» и перейдите к разделу «Текст». Выберите «zh_CN» в раскрывающемся списке «Локаль» и «UTF-8 (Unicode)» в разделе «Набор символов». Если после успешной настройки вывод по-прежнему искажён, рекомендуется использовать PowerShell.

Q: Интерактивный модуль Win10 не запускается, см. issue. A: В некоторых терминалах Windows, таких как git bash (Mingw64), действительно может возникать эта проблема, связанная с использованием сторонней библиотеки survey. Решение состоит в использовании другого терминала, такого как Command Prompt или Windows PowerShell.

Q: Удаление не удалось. После удаления файлов с помощью git repo-clean повторное сканирование показывает, что файлы всё ещё присутствуют. A: Возможно, один и тот же файл существует в нескольких версиях истории, и они имеют разные идентификаторы файлов при сканировании. По умолчанию отображаются и удаляются только первые три файла. Поэтому, если один и тот же файл присутствует в нескольких версиях, первая операция удаляет только три из них, а вторая операция сканирования отображает другие три версии. Кроме того, файл может существовать в других ветках, и текущее сканирование является полным сканированием всех веток, но удаление ограничено текущей веткой. Если вы обнаружите, что удалённые файлы всё ещё существуют, можно выполнить полное удаление всех веток.

Q: После удаления файлы по-прежнему не удаётся отправить. A: Во время отправки вычисляется общий размер сервера репозитория и добавляется к размеру локального репозитория. Если общая сумма превышает лимит, отправка будет отклонена. Рекомендуется очистить локальные файлы перед попыткой отправки. Если серверный репозиторий уже превысил лимит, выполните ручную операцию GC через веб-интерфейс. Если размер репозитория по-прежнему превышает лимит, обратитесь в службу поддержки.

Q: Файлы не удаляются. Используется команда git repo-clean --file build/ --delete для удаления указанного каталога, но файлы остаются. A: Если появляется сообщение «Нет изменений в файле, выход...», это означает, что каталог build находится в рабочем каталоге, но не добавлен в репозиторий Git. Вы можете проверить содержимое файла .gitignore для подтверждения. В других случаях попробуйте повторно запустить команду.

Технический принцип

См. docs/technical.md

Вклад

Если у вас есть какие-либо вопросы, вы можете создать issue для обсуждения. Или, если у вас есть хорошие идеи для улучшения или новые функции, вы можете отправить PR. Процесс следующий:

  1. Fork этот репозиторий.
  2. Создайте ветку Feat_xxx.
  3. Отправьте код.
  4. Создайте Pull Request.

Лицензия

Git repo-clean лицензирован под Mulan PSL v2.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/oschina-git-repo-clean.git
git@api.gitlife.ru:oschina-mirror/oschina-git-repo-clean.git
oschina-mirror
oschina-git-repo-clean
oschina-git-repo-clean
main