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, о котором был прошлый урок. Если пароль всё же попал в историю, менять надо сам пароль, а не только файл: запись остаётся в истории и после удаления.
Образ. Вывеска на двери мастерской. Внутри порядок или беспорядок — судят по тому, что видно снаружи. И ключи от дома на вывеске не пишут.
Карта урока
Скажите своими словами
Не подглядывая, ответьте вслух или на бумаге. Ответы — в конце урока.
- Чем
git commitотличается отgit push? - Почему GitHub не принимает пароль и что вместо него?
- Зачем публичному репозиторию 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 сайт обновляется сам.
Платить придётся только за своё доменное имя. Всё остальное — код, история, размещение — бесплатно.
Ответы
Показать ответы
git commitзаписывает состояние в историю у вас на компьютере — это и есть сохранение.git pushотправляет уже записанное в копию репозитория на GitHub. Безcommitотправлять нечего.- Пароль от сайта открывает весь аккаунт, и GitHub перестал принимать его для работы с кодом в 2021 году. Вместо него — персональный токен, который можно выдать на нужное и отозвать, или SSH-ключ, после настройки которого пароль не спрашивают вовсе.
- Потому что код показывает, как сделано, а README отвечает на вопросы, которые возникают раньше: что это, как запустить, что здесь уже готово. Человек читает его первым и по нему решает, смотреть ли дальше.
Источники
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.