Многие в начале пути разработчика сталкиваются с непониманием такой вещи, как «терминал», боятся его использовать. До сих пор один из членов нашей команды вспоминает слова своего знакомого: «терминалы и командные строки пугают меня. Есть ли у вас какие-нибудь советы разработчикам по началу работы с ними или вы знаете какие-нибудь хорошие ресурсы?»
12.08.2022.01.png64.2 KB
Так что давайте сегодня разберем несколько основных команд, которые помогут нам более комфортно пользоваться Терминалом.
Какой Терминал использовать?
Возможно, хорошей отправной точкой будет вопрос о том, какой Терминал использовать. Честно говоря, это скорее предпочтительный выбор, чем реальная разница. Но мы используем iTerm2 на Macbook'ах, который прекрасно работает.
Если вы предпочитаете другой или же Терминал по умолчанию, будьте нашим гостем. Это ничего не изменит в том, что мы будем делать сегодня.
Основные команды терминала
Хорошо, давайте разберемся с некоторыми командами.
Bash Изменение каталога
Команда cd означает change-directory, что то же самое, что щелкнуть по папке на обычном рабочем столе. Например:
cd Desktop // перейти в «папку» рабочего стола.
Мы также можем подняться на один уровень вверх, используя '..'
cd.. // или даже на несколько уровней cd.. /.. /
Мы всегда можем вернуться в исходную точку, используя cd без аргументов:
cd
Bash Где мы?
Время от времени вы забываете, где находитесь, и хотите узнать текущую папку. Вы можете использовать команду pwd или же 'Print Working Directory'.
pwd // Возвращает что-то вроде: /Users/chrisbongers/Desktop
Bash List
Еще одна удобная команда - ls. Она означает список и может быть использована для показа папок внутри каталога, в котором мы находимся.
ls // Показать текущий каталог ls.. // Показать родительский каталог ls Desktop // Показать конкретный каталог
Bash Создание папок
Иногда проще создать папку в Терминале, потому что вы уже там находитесь. Для этого мы можем использовать mkdir make directory:
mkdir NewApp
Bash Удаление
Будьте осторожны при использовании команды remove. Терминал силен и может удалять системные файлы, поэтому используйте их с осторожностью. Мы можем использовать rmdir Remove Directory для удаления папки.
rmdir NewApp
Или мы можем использовать rm Remove в общем случае.
rm testfile. txt
Для команды rm мы можем задать параметр -r, что означает «рекурсивный». Она удалит все внутри переданной папки.
rm -r NewApp
Копирование с помощью Bash
Мы также можем копировать папки и файлы с помощью Терминала, используя команду cp, то есть Copy.
cp testfile. txt test2. csv
Где первый аргумент - источник, а второй - файл назначения. Мы также можем скопировать всю папку и ее содержимое:
cp -r NewApp TestApp
Bash Move
Еще одна замечательная команда - mv или же Move. Она работает так же, как и cp, но вместо копирования перемещает элементы.
mv testfile. txt Desktop/testfile2. txt
Как видите, мы можем даже перемещать и переименовывать.
Bash создание файла
Возможно, самым интересным является возможность создавать файлы. Существует несколько способов создания файлов, самый распространенный - touch, но наш личный фаворит - nano. Nano отлично работает, потому что он универсален. Он может не только создавать, но и редактировать файл одновременно.
nano testfile. txt // Создаст файл и откроет его.
Открыв файл в nano, вы можете набирать все, что хотите, а когда закончите, используйте CTRL+X, чтобы закрыть и сохранить файл.
Заключение
Надеемся, что эти команды Терминала были полезны, и мы предлагаем вам поиграть с ними.
Понравилась статья? Тогда Ставьте лайки, пишите комментарии, делитесь ею с друзьями, а также подписывайтесь на нас тут и на остальных платформах (ссылка в шапке профиля).
{"document": [{"text": [{"type": "string", "attributes": {}, "string": "Многие в начале пути разработчика сталкиваются с непониманием такой вещи, как «терминал», боятся его использовать. До сих пор один из членов нашей команды вспоминает слова своего знакомого: «терминалы и командные строки пугают меня. Есть ли у вас какие-нибудь советы разработчикам по началу работы с ними или вы знаете какие-нибудь хорошие ресурсы?» "}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/png", "filename": "12.08.2022.01.png", "filesize": 65740, "height": 1080, "pic_id": 119527, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/08/12.08.2022.01.jpeg", "width": 1920}}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Так что давайте сегодня разберем несколько основных команд, которые помогут нам более комфортно пользоваться Терминалом."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Какой Терминал использовать?"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Возможно, хорошей отправной точкой будет вопрос о том, какой Терминал использовать. Честно говоря, это скорее предпочтительный выбор, чем реальная разница. Но мы используем iTerm2 на Macbook'ах, который прекрасно работает."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Если вы предпочитаете другой или же Терминал по умолчанию, будьте нашим гостем. Это ничего не изменит в том, что мы будем делать сегодня."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Основные команды терминала"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Хорошо, давайте разберемся с некоторыми командами."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Bash Изменение каталога"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Команда "}, {"type": "string", "attributes": {"bold": true}, "string": "cd"}, {"type": "string", "attributes": {}, "string": " означает "}, {"type": "string", "attributes": {"bold": true}, "string": "change-directory"}, {"type": "string", "attributes": {}, "string": ", что то же самое, что щелкнуть по папке на обычном рабочем столе. Например:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "cd Desktop // перейти в «папку» рабочего стола."}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Мы также можем подняться на один уровень вверх, используя '"}, {"type": "string", "attributes": {"bold": true}, "string": ".."}, {"type": "string", "attributes": {}, "string": "'"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "cd.. \n// или даже на несколько уровней\ncd.. /.. /"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Мы всегда можем вернуться в исходную точку, используя "}, {"type": "string", "attributes": {"bold": true}, "string": "cd "}, {"type": "string", "attributes": {}, "string": "без аргументов:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "cd"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Bash Где мы?"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Время от времени вы забываете, где находитесь, и хотите узнать текущую папку. Вы можете использовать команду "}, {"type": "string", "attributes": {"bold": true}, "string": "pwd"}, {"type": "string", "attributes": {}, "string": " или же '"}, {"type": "string", "attributes": {"bold": true}, "string": "Print Working Directory'"}, {"type": "string", "attributes": {}, "string": "."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "pwd // Возвращает что-то вроде: /Users/chrisbongers/Desktop"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Bash List"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Еще одна удобная команда - "}, {"type": "string", "attributes": {"bold": true}, "string": "ls"}, {"type": "string", "attributes": {}, "string": ". Она означает список и может быть использована для показа папок внутри каталога, в котором мы находимся."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "ls // Показать текущий каталог\nls.. // Показать родительский каталог\nls Desktop // Показать конкретный каталог"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Bash Создание папок"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Иногда проще создать папку в Терминале, потому что вы уже там находитесь. Для этого мы можем использовать "}, {"type": "string", "attributes": {"bold": true}, "string": "mkdir make directory"}, {"type": "string", "attributes": {}, "string": ":"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "mkdir NewApp"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Bash Удаление"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Будьте осторожны при использовании команды "}, {"type": "string", "attributes": {"bold": true}, "string": "remove"}, {"type": "string", "attributes": {}, "string": ". Терминал силен и может удалять системные файлы, поэтому используйте их с осторожностью. Мы можем использовать "}, {"type": "string", "attributes": {"bold": true}, "string": "rmdir Remove Directory"}, {"type": "string", "attributes": {}, "string": " для удаления папки."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "rmdir NewApp"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Или мы можем использовать "}, {"type": "string", "attributes": {"bold": true}, "string": "rm Remove"}, {"type": "string", "attributes": {}, "string": " в общем случае."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "rm testfile. txt"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Для команды "}, {"type": "string", "attributes": {"bold": true}, "string": "rm "}, {"type": "string", "attributes": {}, "string": "мы можем задать параметр "}, {"type": "string", "attributes": {"bold": true}, "string": "-r"}, {"type": "string", "attributes": {}, "string": ", что означает «рекурсивный». Она удалит все внутри переданной папки."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "rm -r NewApp"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Копирование с помощью Bash"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Мы также можем копировать папки и файлы с помощью Терминала, используя команду "}, {"type": "string", "attributes": {"bold": true}, "string": "cp"}, {"type": "string", "attributes": {}, "string": ", то есть"}, {"type": "string", "attributes": {"bold": true}, "string": " Copy"}, {"type": "string", "attributes": {}, "string": "."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "cp testfile. txt test2. csv"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Где первый аргумент - источник, а второй - файл назначения. Мы также можем скопировать всю папку и ее содержимое:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "cp -r NewApp TestApp"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Bash Move"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Еще одна замечательная команда - "}, {"type": "string", "attributes": {"bold": true}, "string": "mv"}, {"type": "string", "attributes": {}, "string": " или же "}, {"type": "string", "attributes": {"bold": true}, "string": "Move"}, {"type": "string", "attributes": {}, "string": ". Она работает так же, как и "}, {"type": "string", "attributes": {"bold": true}, "string": "cp"}, {"type": "string", "attributes": {}, "string": ", но вместо копирования перемещает элементы."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "mv testfile. txt Desktop/testfile2. txt"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Как видите, мы можем даже перемещать и переименовывать."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": ""}, {"type": "string", "attributes": {"bold": true}, "string": "Bash создание файла"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Возможно, самым интересным является возможность создавать файлы. Существует несколько способов создания файлов, самый распространенный - "}, {"type": "string", "attributes": {"bold": true}, "string": "touch"}, {"type": "string", "attributes": {}, "string": ", но наш личный фаворит - "}, {"type": "string", "attributes": {"bold": true}, "string": "nano"}, {"type": "string", "attributes": {}, "string": ". "}, {"type": "string", "attributes": {"bold": true}, "string": "Nano "}, {"type": "string", "attributes": {}, "string": "отлично работает, потому что он универсален. Он может не только создавать, но и редактировать файл одновременно."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "nano testfile. txt // Создаст файл и откроет его."}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Открыв файл в "}, {"type": "string", "attributes": {"bold": true}, "string": "nano"}, {"type": "string", "attributes": {}, "string": ", вы можете набирать все, что хотите, а когда закончите, используйте "}, {"type": "string", "attributes": {"bold": true}, "string": "CTRL+X"}, {"type": "string", "attributes": {}, "string": ", чтобы закрыть и сохранить файл."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Заключение"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Надеемся, что эти команды Терминала были полезны, и мы предлагаем вам поиграть с ними. "}], "attributes": []}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Понравилась статья? Тогда Ставьте лайки, пишите комментарии, делитесь ею с друзьями, а также подписывайтесь на нас тут и на остальных платформах (ссылка в шапке профиля)."}], "attributes": []}], "selectedRange": [351, 351]}
Вы могли видеть, что некоторые коммиты из merge-requests или Dependabot имеют значок с надписью verified. Но у ваших коммитов нет этого модного значка?
Детали верифицированного коммита на GitHub
Зачем беспокоиться о проверенных коммитах?
Это правильный вопрос, который в основном сводится к безопасности в наше время.
Мы по-прежнему в основном работаем удаленно/из дома. Это означает, что у компаний, на которые мы работаем, возникает много вопросов о том, безопасно ли то, что мы делаем дома. Когда вы задаете конфигурацию git, вы вводите определенный email и имя пользователя. И выдаёте себя за другого человека. Это, конечно, немного странно.
13.08.2022.01.jpg60.89 KB
Если посмотреть на частные репозитории, это имеет смысл. Вы используете какой-то SSH-ключ для фиксации в git, но вы все равно можете притвориться, например, коллегой. Вот против чего будут направлены проверенные коммиты. Они будут проверять, что коммит подписан от имени конкретного пользователя.
Настройка верифицированных коммитов на GitHub
GitHub использует криптографические подписи в виде ключа GNU Privacy Guard (GPG). Такой ключ бывает открытым, который мы установим в GitHub, и закрытым, который находится на нашем компьютере. В следующий раз, когда мы отправим коммит в GitHub, он будет использовать этот ключ и зашифрует наш коммит и данные. На сайте GitHub он будет расшифровываться и проверять, что это правильный пользователь.
Шаг 1. Установите GPG
Мы будем использовать Homebrew, так как это самый быстрый способ установки. Выполните следующую команду в терминале:
brew install gpg
Шаг 2 Генерирование нового ключа GPG
Теперь мы можем использовать команду GPG для генерации нового ключа. Выполните следующую команду в терминале:
gpg --full-generate-key
Это вызовет программу CLI, которая проведет вас через весь процесс генерации.
CLI для генерации ключей GPG
Помните о следующих настройках:
Мы выбираем ключ RSA (вариант 1).
Размер ключа должен быть МИНИМУМ 4096 бит
Мы устанавливаем, что срок его действия никогда не истекает (вариант 0)
Имя и электронная почта. Используйте свой email на GitHub, иначе ничего не получится!
После этого дважды появится поле для ввода пароля. Используйте надежный пароль:
GPG, защищенный паролем
Шаг 3 Проверка ключа GPG
Теперь, когда мы создали ключ, давайте проверим, правильно ли он настроен. Выполните следующую команду в терминале:
gpg --list-secret-keys --keyid-format LONG
В результате должно получиться что-то вроде этого:
[SCRAMBLING NOT REALLY IMPORTANT] -------------------------------------- sec rsa4096/[THIS_KEY_ID] 2021-07-07 [SC] 2B18EEB732D15480D40A60D605AE1785E201CE95 uid [ultimate] Chris Bongers <chrisbongers@gmail. com> ssb rsa4096/C98A99F6B0202433 2021-07-07 [E]
Обратите внимание, мы добавили [THIS_KEY_ID], который будет содержать ключ, важный для выполнения коммитов.
Шаг 4 Экспортируйте ключ в GitHub
Теперь мы должны быть в состоянии создать экспорт этого ключа для использования в GitHub. С [THIS_KEY_ID], который вы получили в шаге 3, выполните следующую команду:
gpg --armor --export [THIS_KEY_ID].
В результате будет сгенерирован большой блок кода:
-----BEGIN PGP PUBLIC KEY BLOCK----- [SCRAMBLE] -----END PGP PUBLIC KEY BLOCK-----
Скопируйте весь этот раздел, включая комментарии.
Теперь зайдите на GitHub, нажмите на изображение своего профиля -> Настройки. Выберите SSH и GPG Keys в левом меню, прокрутите вниз и добавьте новый GPG ключ.
Ключи GitHub
Скопируйте этот блок кода в редакторе и нажмите сохранить. Теперь у вас должен быть настроен GPG-ключ.
Шаг 5 Настройка git always для подписи коммитов
Давайте включим клиент Git, чтобы он всегда подписывал коммиты нашим новым ключом. Выполните следующие команды в терминале.
Теперь попробуйте зафиксировать один из ваших проектов. Должен появиться проверенный коммит, как показано здесь:
Верифицированный коммит на GitHub
Устранение неполадок
Если у вас возникли проблемы с последней частью и терминал выдаёт, что коммит не может быть проверен, вы можете попробовать следующее:
echo «test» | gpg --clearsign
Если снова выдаёт ошибку, используйте следующую команду:
export GPG_TTY=$ (tty)
Теперь повторите команду, и вы должны увидеть подпись PGP. Это также может помочь убить gpg-клиент, чтобы он запросил пароль в первый раз:
gpgconf --kill all gpg-agent --daemon
Заключение
Понравилась статья? Тогда Ставьте лайки, пишите комментарии, делитесь ею с друзьями, а также подписывайтесь на нас тут и на остальных платформах (ссылки в шапке профиля).
{"document": [{"text": [{"type": "string", "attributes": {}, "string": "Вы могли видеть, что некоторые коммиты из "}, {"type": "string", "attributes": {"bold": true}, "string": "merge-requests"}, {"type": "string", "attributes": {}, "string": " или "}, {"type": "string", "attributes": {"bold": true}, "string": "Dependabot "}, {"type": "string", "attributes": {}, "string": "имеют значок с надписью "}, {"type": "string", "attributes": {"bold": true}, "string": "verified"}, {"type": "string", "attributes": {}, "string": ". Но у ваших коммитов нет этого модного значка?"}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"caption": "Детали верифицированного коммита на GitHub", "presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/png", "filename": "13.08.2022.02.png", "filesize": 99875, "height": 277, "pic_id": 124257, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/13/13.08.2022.02.jpeg", "width": 891}}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Зачем беспокоиться о проверенных коммитах?"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Это правильный вопрос, который в основном сводится к безопасности в наше время."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Мы по-прежнему в основном работаем удаленно/из дома. Это означает, что у компаний, на которые мы работаем, возникает много вопросов о том, безопасно ли то, что мы делаем дома. Когда вы задаете конфигурацию "}, {"type": "string", "attributes": {"bold": true}, "string": "git"}, {"type": "string", "attributes": {}, "string": ", вы вводите определенный email и имя пользователя. И выдаёте себя за другого человека. Это, конечно, немного странно."}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/jpeg", "filename": "13.08.2022.01.jpg", "filesize": 62351, "height": 1080, "pic_id": 124258, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/13/13.08.2022.01.jpeg", "width": 1920}}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Если посмотреть на частные репозитории, это имеет смысл. Вы используете какой-то SSH-ключ для фиксации в "}, {"type": "string", "attributes": {"bold": true}, "string": "git"}, {"type": "string", "attributes": {}, "string": ", но вы все равно можете притвориться, например, коллегой. Вот против чего будут направлены проверенные коммиты. Они будут проверять, что коммит подписан от имени конкретного пользователя."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Настройка верифицированных коммитов на GitHub"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "GitHub использует криптографические подписи в виде ключа GNU Privacy Guard (GPG). Такой ключ бывает открытым, который мы установим в GitHub, и закрытым, который находится на нашем компьютере. В следующий раз, когда мы отправим коммит в GitHub, он будет использовать этот ключ и зашифрует наш коммит и данные. На сайте GitHub он будет расшифровываться и проверять, что это правильный пользователь."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Шаг 1. Установите GPG"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Мы будем использовать "}, {"type": "string", "attributes": {"bold": true}, "string": "Homebrew"}, {"type": "string", "attributes": {}, "string": ", так как это самый быстрый способ установки. Выполните следующую команду в терминале:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "brew install gpg"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Шаг 2 Генерирование нового ключа GPG"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Теперь мы можем использовать команду "}, {"type": "string", "attributes": {"bold": true}, "string": "GPG "}, {"type": "string", "attributes": {}, "string": "для генерации нового ключа. Выполните следующую команду в терминале:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "gpg --full-generate-key"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Это вызовет программу "}, {"type": "string", "attributes": {"bold": true}, "string": "CLI"}, {"type": "string", "attributes": {}, "string": ", которая проведет вас через весь процесс генерации."}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"caption": "CLI для генерации ключей GPG", "presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/png", "filename": "13.08.2022.03.png", "filesize": 609065, "height": 1446, "pic_id": 124260, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/13/13.08.2022.03.jpeg", "width": 1364}}], "attributes": []}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Помните о следующих настройках:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Мы выбираем ключ RSA (вариант 1)."}], "attributes": ["bulletList", "bullet"]}, {"text": [{"type": "string", "attributes": {}, "string": "Размер ключа должен быть МИНИМУМ 4096 бит"}], "attributes": ["bulletList", "bullet"]}, {"text": [{"type": "string", "attributes": {}, "string": "Мы устанавливаем, что срок его действия никогда не истекает (вариант 0)"}], "attributes": ["bulletList", "bullet"]}, {"text": [{"type": "string", "attributes": {}, "string": "Имя и электронная почта. Используйте свой email на GitHub, иначе ничего не получится!"}], "attributes": ["bulletList", "bullet"]}, {"text": [{"type": "string", "attributes": {}, "string": "После этого дважды появится поле для ввода пароля. Используйте надежный пароль:"}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"caption": "GPG, защищенный паролем", "presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/png", "filename": "13.08.2022.04.png", "filesize": 42558, "height": 356, "pic_id": 124261, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/13/13.08.2022.04.jpeg", "width": 876}}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Шаг 3 Проверка ключа GPG"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Теперь, когда мы создали ключ, давайте проверим, правильно ли он настроен. Выполните следующую команду в терминале:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "gpg --list-secret-keys --keyid-format LONG"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "В результате должно получиться что-то вроде этого:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "[SCRAMBLING NOT REALLY IMPORTANT]\n--------------------------------------\nsec rsa4096/[THIS_KEY_ID] 2021-07-07 [SC]\n 2B18EEB732D15480D40A60D605AE1785E201CE95\nuid [ultimate] Chris Bongers <chrisbongers@gmail. com>\nssb rsa4096/C98A99F6B0202433 2021-07-07 [E]"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Обратите внимание, мы добавили "}, {"type": "string", "attributes": {"bold": true}, "string": "[THIS_KEY_ID]"}, {"type": "string", "attributes": {}, "string": ", который будет содержать ключ, важный для выполнения коммитов."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Шаг 4 Экспортируйте ключ в GitHub"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Теперь мы должны быть в состоянии создать экспорт этого ключа для использования в GitHub. С "}, {"type": "string", "attributes": {"bold": true}, "string": "[THIS_KEY_ID]"}, {"type": "string", "attributes": {}, "string": ", который вы получили в шаге 3, выполните следующую команду:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "gpg --armor --export [THIS_KEY_ID]."}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "В результате будет сгенерирован большой блок кода:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n[SCRAMBLE]\n-----END PGP PUBLIC KEY BLOCK-----"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Скопируйте весь этот раздел, включая комментарии."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Теперь зайдите на GitHub, нажмите на изображение своего профиля -> Настройки. Выберите SSH и GPG Keys в левом меню, прокрутите вниз и добавьте новый GPG ключ."}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"caption": "Ключи GitHub", "presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/png", "filename": "13.08.2022.05.png", "filesize": 227043, "height": 1122, "pic_id": 124262, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/13/13.08.2022.05.jpeg", "width": 2108}}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Скопируйте этот блок кода в редакторе и нажмите сохранить. Теперь у вас должен быть настроен GPG-ключ."}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Шаг 5 Настройка git always для подписи коммитов"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Давайте включим клиент Git, чтобы он всегда подписывал коммиты нашим новым ключом. Выполните следующие команды в терминале."}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "git config --global user. signingkey [THIS_KEY_ID]\ngit config --global commit. gpgsign true"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Теперь попробуйте зафиксировать один из ваших проектов. Должен появиться проверенный коммит, как показано здесь:"}], "attributes": []}, {"text": [{"type": "attachment", "attributes": {"caption": "Верифицированный коммит на GitHub", "presentation": "gallery"}, "attachment": {"caption": "", "contentType": "image/png", "filename": "13.08.2022.06.png", "filesize": 129984, "height": 436, "pic_id": 124263, "url": "https://storage.yandexcloud.net/pabliko.files/article_cloud_image/2022/08/13/13.08.2022.06.jpeg", "width": 1470}}], "attributes": []}, {"text": [{"type": "string", "attributes": {}, "string": "Устранение неполадок"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {}, "string": "Если у вас возникли проблемы с последней частью и терминал выдаёт, что коммит не может быть проверен, вы можете попробовать следующее:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "echo «test» | gpg --clearsign"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Если снова выдаёт ошибку, используйте следующую команду:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "export GPG_TTY=$ (tty)"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Теперь повторите команду, и вы должны увидеть подпись PGP. Это также может помочь убить gpg-клиент, чтобы он запросил пароль в первый раз:"}], "attributes": []}, {"text": [{"type": "string", "attributes": {"italic": true}, "string": "gpgconf --kill all\ngpg-agent --daemon"}], "attributes": ["quote"]}, {"text": [{"type": "string", "attributes": {}, "string": "Заключение"}], "attributes": ["heading1"]}, {"text": [{"type": "string", "attributes": {"bold": true}, "string": "Понравилась статья? Тогда Ставьте лайки, пишите комментарии, делитесь ею с друзьями, а также подписывайтесь на нас тут и на остальных платформах (ссылки в шапке профиля)."}], "attributes": []}], "selectedRange": [0, 4408]}
Комментарии 1