Shanraq.org Shanraq.org
GitHub: код, который видно
IT

Go: с нуля до своего блога Урок 17 из 50

GitHub: код, который видно

Семнадцатый урок курса по Go. GitHub — не резервная копия, а та же история, видимая другим. Аккаунт и первый репозиторий, git remote и git push, почему пароль там больше не принимают и чем его заменили, README как первое, что читает человек, и что нельзя выкладывать никогда.

Зачем это нужно

История у вас уже есть — она лежит в папке .git на вашем компьютере. Пропадёт компьютер, пропадёт и она.

Но копия в сети нужна не только поэтому. Ваш код становится видимым. Работодатель не поверит словам «я прошёл курс»; он откроет ваш GitHub и за минуту увидит, что вы писали, как часто и насколько внятно объясняли свои правки. Это и есть резюме разработчика — не список пройденных курсов, а сорок записей с понятными сообщениями.

Образ. Не сейф, а витрина. Сейф прячет и хранит. Витрина хранит тоже — но её видно с улицы, и именно поэтому в неё что-то ставят.

Сразу целиком

Если аккаунт заводить нельзя или не хочется — пропустите этот абзац. GitHub требует, чтобы пользователю было не меньше 13 лет, а если законы вашей страны требуют больше — то больше; так написано в его условиях, и соблюдать их — ваша забота. Урок можно пройти целиком без аккаунта: ниже есть раздел «Без аккаунта», где не меняется ни одна команда.

Заведите аккаунт на github.com — почта, имя, пароль. Имя выбирайте спокойно: оно попадёт в адрес ваших проектов и в резюме, поэтому лучше daulet-b, чем kotik2007.

Дальше — новый репозиторий: кнопка New, имя go-oqu, публичный, и не добавляйте README, лицензию и .gitignore: файлы у вас уже есть, а пустая заготовка потом столкнётся с вашей историей.

GitHub покажет несколько команд. Нужны эти:

git remote add origin https://github.com/ВАШЕ-ИМЯ/go-oqu.git
git branch -M main
git push -u origin main

Обновите страницу репозитория — там ваши файлы и вся история. Дальше, после каждой записи, хватает одной команды:

git push

Кнопки на сайте со временем переезжают, а эти команды не менялись годами. Если вид страницы отличается от описанного — ищите не кнопку, а строку git remote add, GitHub всегда показывает её на пустом репозитории.

Разбор

Что такое GitHub и чем он не является

Git — программа на вашем компьютере. GitHub — сайт, который хранит копию репозитория и показывает её людям. Это разные вещи, и Git прекрасно работает без GitHub.

Поэтому «выложить на GitHub» не значит «сохранить». Сохраняет git commit — у вас. git push только отправляет уже сохранённое.

remote, push и pull

origin — это имя для адреса вашего репозитория в сети. Имя условное, просто так принято.

git push отправляет ваши записи туда. git pull забирает оттуда то, чего у вас нет, — понадобится, когда вы работаете с двух компьютеров или когда кто-то ещё вносит правки.

Флаг -u в первой команде говорит: «запомни, что эта ветка отправляется туда». После него достаточно git push без продолжения.

Без аккаунта: свой «сервер» в соседней папке

Git не знает слова «GitHub». Для него удалённый репозиторий — это адрес, а адресом может быть обычная папка: на диске, на флешке, в облачной.

git init --bare -b main ~/blog.git

--bare значит «репозиторий без рабочих файлов»: в нём только история. Такой и лежит на сервере — в него отправляют, из него клонируют, но в нём не работают.

-b main здесь не украшение. Без него у голого репозитория останется ветка по умолчанию master, а вы отправляете main. Ошибки при отправке не будет, зато клон потом скажет:

warning: remote HEAD refers to nonexistent ref, unable to checkout

и придёт пустая папка. Понять это с первого раза трудно, поэтому имя ветки задают сразу.

Дальше — те же команды, слово в слово:

git remote add origin ~/blog.git
git push -u origin main

Проверить, что история действительно уехала, можно так же, как это делает другой человек, — клонированием:

git clone ~/blog.git ~/blog-copy
ls ~/blog-copy
main.go

С флешкой всё то же самое, меняется только путь: /Volumes/USB/blog.git на маке, E:/blog.git в Windows. И вот это уже настоящая резервная копия — она лежит не на том диске, где вы работаете.

Чего так не получится: дать ссылку на код другому человеку и принять от него правку. Ради этого GitHub и заводят — но заводят тогда, когда можно.

Ветка main и зачем -M

Вы набрали git branch -M main и не спросили, что это. Спросим за вас.

Ветка — имя для линии записей. У проекта их может быть несколько: основная и, например, та, где вы пробуете рискованную правку. Пока вам хватит одной.

Раньше основную ветку по умолчанию звали master, теперь — main, и GitHub ждёт именно это имя. Команда -M переименовывает вашу текущую ветку в main, если она называлась иначе. Если у вас уже main — команда просто ничего не сделает.

Пароль там больше не принимают

Если вы попробуете войти паролем от сайта, GitHub откажет — так с 2021 года. Вместо пароля два способа, выбирайте любой:

Токен. В настройках GitHub создаётся длинная строка — персональный токен доступа, — и она вводится вместо пароля при первом push. Система запомнит её в хранилище ключей.

SSH-ключ. Один раз выполняете ssh-keygen -t ed25519 -C "ваша@почта", открываете созданный файл ~/.ssh/id_ed25519.pub, копируете содержимое и добавляете в настройках GitHub в разделе SSH keys. После этого адрес репозитория берут в форме git@github.com:имя/проект.git, и пароль больше не спрашивают никогда.

Образ. Пропуск на одну дверь вместо ключа от всей квартиры. Пароль открывает весь ваш аккаунт. Токен можно выдать только на нужное и отозвать, не меняя ничего остального.

Новичку проще начать с токена, а SSH настроить, когда надоест его вводить.

README — первое, что читает человек

Файл README.md на главной странице репозитория GitHub показывает сразу. Пустой репозиторий выглядит как склад чужих файлов; репозиторий с README — как работа.

Трёх абзацев достаточно:

# go-oqu

Мои решения уроков курса «Go: с нуля до своего блога».

## Как запустить

    cd sabaq-05
    go run .

## Что уже сделано

- уроки 1–15: язык
- блог по шагам в папке blog/

.md — это Markdown, тот же простой язык разметки, которым набраны эти уроки: # — заголовок, - — список.

Что делать каждый день

Ритм такой: поработали — git add ., git commit -m "…", git push. Три команды, десять секунд.

Сели за другой компьютер — сначала git pull, потом работайте. Забудете — Git откажется отправлять и скажет, что сначала надо забрать чужие правки; это не поломка, а защита.

Что не выкладывать никогда

Публичный репозиторий видят все, включая программы, которые круглосуточно ищут в чужом коде пароли. Найдут за минуты.

Поэтому: ни паролей, ни ключей, ни файлов .env — их место в .gitignore, о котором был прошлый урок. Если пароль всё же попал в историю, менять надо сам пароль, а не только файл: запись остаётся в истории и после удаления.

Образ. Вывеска на двери мастерской. Внутри порядок или беспорядок — судят по тому, что видно снаружи. И ключи от дома на вывеске не пишут.

Карта урока

Карта урока: одна история в двух местах, push отправляет, pull приносит

Скажите своими словами

Не подглядывая, ответьте вслух или на бумаге. Ответы — в конце урока.

  1. Чем git commit отличается от git push?
  2. Почему GitHub не принимает пароль и что вместо него?
  3. Зачем публичному репозиторию README, если код и так виден?

Задание

Обязательное — вариант без аккаунта. Сделайте голый репозиторий в соседней папке (git init --bare -b main ~/blog.git), отправьте туда историю, склонируйте её в другую папку и убедитесь, что файлы на месте. Напишите README.md с тремя частями — что это, как запустить, что уже сделано — и отправьте отдельной записью.

Обязательное — вариант с аккаунтом. Выложите свой репозиторий с уроками на GitHub: аккаунт, новый публичный репозиторий, git remote add origin …, git push -u origin main. Напишите README.md с тремя частями — что это, как запустить, что уже сделано, — и отправьте отдельной записью. Откройте адрес репозитория в браузере и убедитесь, что README видно на главной.

По желанию.

  • Настройте SSH-ключ и смените адрес репозитория командой git remote set-url origin git@github.com:….
  • Сделайте запись, отправьте её и посмотрите на GitHub во вкладке коммитов, как выглядит ваше сообщение со стороны.
  • Найдите на GitHub исходники самого Go: github.com/golang/go. Посмотрите, как выглядят их сообщения к записям.

Куда это встанет в блоге

Отсюда начинается вторая половина обещания курса. Блог, который вы напишете, будет полностью работать у вас на компьютере — но если захотите показать его миру, бесплатные хостинги умеют брать код прямо из GitHub: подключили репозиторий, и при каждом git push сайт обновляется сам.

Платить придётся только за своё доменное имя. Всё остальное — код, история, размещение — бесплатно.

Ответы

Показать ответы
  1. git commit записывает состояние в историю у вас на компьютере — это и есть сохранение. git push отправляет уже записанное в копию репозитория на GitHub. Без commit отправлять нечего.
  2. Пароль от сайта открывает весь аккаунт, и GitHub перестал принимать его для работы с кодом в 2021 году. Вместо него — персональный токен, который можно выдать на нужное и отозвать, или SSH-ключ, после настройки которого пароль не спрашивают вовсе.
  3. Потому что код показывает, как сделано, а README отвечает на вопросы, которые возникают раньше: что это, как запустить, что здесь уже готово. Человек читает его первым и по нему решает, смотреть ли дальше.

Источники

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить задание

Сначала решите и запустите в VS Code — редактор покажет ошибку на месте. Готовое решение вставьте сюда. Проверяет модель: она укажет на ошибку, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.