Вопрос или проблема
Я пытаюсь выполнить следующую команду в Manjaro с sudo или без него
repo init -u https://github.com/LineageOS/android.git -b lineage-22.1 --git-lfs
Тем не менее, всегда возникает следующая ошибка
Downloading Repo source from https://gerrit.googlesource.com/git-repo
...
)
git_command.GitCommandError: GitCommandError: 'var GIT_COMMITTER_IDENT' on manifests failed
stderr: Committer identity unknown
*** Пожалуйста, укажите, кто вы.
Выполните
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
чтобы настроить стандартную личность вашего аккаунта.
Почему я должен предоставить email и username при скачивании из git?
У меня нет аккаунта.
Вам не нужен аккаунт Git.
Это всего лишь запрос локальной идентификации; вы можете ввести фальшивые данные, если хотите.
Все это говорит о том, что в вашем локальном Git нет связанной с вами идентификации:
*** Пожалуйста, укажите, кто вы.
Выполните
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
чтобы настроить стандартную личность вашего аккаунта.
Когда вы выполняете эти команды git config --global user.
, они просто присваивают email
и name
локально. Нет риска того, что эти данные будут “утекли” куда-либо с вашей системы.
Не беспокойтесь об этом.
И если вы действительно обеспокоены, просто введите несуществующие значения для email
и name
. Например, что-то такое:
git config --global user.email "[email protected]"
git config --global user.name "Nope Nope"
Тем не менее, почему вы запускаете эту команду как repo init -u
?
Тем не менее, почему вы выполняете git clone
вот так:
repo init -u https://github.com/LineageOS/android.git -b lineage-22.1 --git-lfs
Не совсем понятно, какова конечная цель — я вижу, что это есть в их документации GitHub — но вы должны просто выполнить эту команду:
git clone https://github.com/LineageOS/android.git
И это должно сработать. Просто перейдите в каталог, который синхронизирован так:
cd android
И проверьте ветви вот так:
git branch
И вы должны быть на ветке lineage-22.1
по умолчанию, так как это стандартная ветка.
Просто хотел сказать, что другой ответ можно упростить до следующей однострочной команды:
git clone -b lineage-22.1 https://github.com/LineageOS/android.git
Это клонирует репозиторий и выберет правильную ветку одной командой.
И оно не запросит имя пользователя или email.
.
Ответ или решение
Конечно, давайте разберем проблему с точки зрения эксперта в области ИТ.
Теория
Команда repo init
используется для инициализации управления версиями проектов, которые используют Google’s Repo tool для работы с несколькими Git репозиториями одновременно. Это становится особенно актуально для проектов, связанных с Android, таких как LineageOS. Однако, при использовании этой команды, Git требует от пользователя указать его имя и email адрес для идентификации. Это не связано с наличием или отсутствием аккаунта на GitHub или другом хостинге репозиториев. Git использует эти данные для создания коммитов и метаданных, и эта информация остаётся локальной.
Запрос на идентификацию возникает из-за того, что в вашем глобальном Git конфигурационном файле отсутствуют настройки user.name
и user.email
. Эти настройки необходимы для того, чтобы Git мог правильно связывать изменения в репозитории с конкретными действиями разработчиков, даже если эти данные не передаются никуда за пределы вашего компьютера. При работе с репозиториями, особенно в крупных проектах, такие данные помогают сохранять читабельность истории коммитов.
Пример
Допустим, вы решили загрузить код из репозитория LineageOS без указания персональных данных. Вы запускаете следующую команду в вашей операционной системе Manjaro:
repo init -u https://github.com/LineageOS/android.git -b lineage-22.1 --git-lfs
Однако, без предварительно настроенной конфигурации Git, система выведет ошибку, требующую указать user.email
и user.name
:
git_command.GitCommandError: GitCommandError: 'var GIT_COMMITTER_IDENT' on manifests failed
stderr: Committer identity unknown
*** Please tell me who you are.
Run
git config --global user.email "<a href="https://superuser.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cba5a4bbae8ba5a4bbaee5a8a4a6">[email protected]</a>"
git config --global user.name "Your Name"
to set your account's default identity.
Как видите, Git просит ввести данные для своей локальной конфигурации — это не связано с доступом к удалённым сервисам и требуется только для корректного ведения истории изменений.
Применение
Чтобы устранить данную проблему и продолжить работу с командой repo init
без указания реальных данных, вы можете ввести фиктивные данные. Идея в том, чтобы система не просила эти данные в будущем и не прерывала вашу работу запросами об идентификации. Это можно сделать следующим образом:
git config --global user.email "fake-email@example.com"
git config --global user.name "Fake Name"
Эти настройки сохраняются в глобальном конфигурационном файле Git для вашего пользователя и применяются ко всем репозиториям по умолчанию. Использование фиктивных данных безопасно, если вы уверены, что ваши коммиты не окажутся в открытом доступе, или если вы не планируете публиковать репозитории.
Если вы хотите просто загрузить репозиторий без использования repo
и минимизировать сложность, вы можете сделать это через команду git clone
, которая не требует указания ни имени, ни email, пока вы не начнёте создавать коммиты:
git clone -b lineage-22.1 https://github.com/LineageOS/android.git
После выполнения этой команды вы получите локальную копию ветки lineage-22.1
без необходимости вводить лишнюю информацию.
Вывод
Проблема с требованием указать имя и email связана исключительно с конфигурацией вашего локального Git и необходимостью этой информации для ведения истории коммитов. Введение фиктивных данных решает эту проблему, и эти данные не будут утекать за пределы вашей локальной среды без вашего желания. Альтернативный подход с использованием git clone
может быть более подходящим для однократного получения исходного кода без необходимости в дальнейшей синхронизации с несколькими репозиториями.