Что такое GitHub? Что такое Git? И как использовать эти инструменты разработчика.
Первые написанные вами программы, вероятно, будут не очень впечатляющими. Вы будете делать много ошибок и вам никогда не захочется возвращаться в прошлое.
Достаточно скоро вы будете писать большие и сложные программы. Возможно вы удалите некоторые вещи, которые захотите вернуть позже. Или пока вы работаете над частями программы можно изящно добавлять в нее свои изменения.
Вот тут-то и начинается управление версиями, и это умение, которое любой работодатель будет ожидать от вас. Это также чрезвычайно полезно для всех, кто работает над чем-то, что сохраняется по частям.
Что такое контроль версий?
Контроль версий - это возможность сохранить свое место в документе или папке и сослаться на предыдущие сохранения.
Когда я пишу эту статью, мои новые изменения постоянно перезаписывают мои предыдущие версии. Это не контроль версий, потому что я не могу вернуться к черновику, который у меня был неделю назад. Но если бы я написал это с помощью Git, это было бы возможно.
Что такое Git?
Git - это система контроля версий, разработанная Линусом Торвальдсом в 2005 году (тот же парень, который писал для Linux). Git помогает разработчикам отслеживать состояние своего кода и позволяет совместно работать над базой кода. Мы рассмотрим основные компоненты чуть позже.
Если вы хотите продолжить, вам придется установить Git на свой компьютер. Откройте терминал и введите git
. Если вы видите список возможных команд, вы готовы!
Использование Git
Если вы когда-либо использовали компьютерную программу или видеоигру и заметили, что можете вернуться к ранее сохраненной версии, вы по сути понимаете необходимость использования Git. Это просто сохранение snapshot вашей программы во времени.
Но вместо того, чтобы следить за каждой отдельной строкой кода в вашей программе, он вместо этого отмечает изменения между кодом, который у вас есть сейчас, и последним сохраненным вами. Он постоянно отслеживает, когда каждая строка кода была сохранена последней и сохраняет их в специальной скрытой папке.
Давайте рассмотрим эту программу в JavaScript. Она выводит на консоль три строки (вывод, который вы можете увидеть в своем браузере или терминале):
console.log('Hello, this is a git example!')
console.log('And here is another!')
console.log('And yet a third')
git init
Если я хочу сохранить версии своей работы, я могу использовать Git. Сначала я введу в свой терминал git init
, чтобы начать использовать Git. Это создаст папку .git
, в которой Git будет хранить свои файлы.
git add
git add.
добавит все файлы в нашу программу. Если вы ввели git init
после того, как создали файл, или каждый раз, когда вы создаете новые файлы, вам нужно будет указать Git, чтобы он начал отслеживать изменения в них с помощью этой команды.
git commit
Далее я наберу git commit -am "Initial commit"
. git commit
- это команда для сохранения версии нашего кода. -am
является "флагом" и сигнализирует о том, что существуют необязательные действия, которые мы хотели бы предпринять с этим поручением. Флаг a
означает, что мы собираемся сохранить все наши изменения. Флаг m
обозначает, что мы предоставим сообщение позже, то есть "Initial commit"
.
Как Git сохраняет изменения
Если мы внесем изменения в нашу программу (например, изменим текст в первой строке), мы можем захотеть сохранить версию. Мы могли бы даже переключаться между версиями, если бы хотели увидеть, как наша программа менялась со временем.
console.log('Now I have changed the first line.')
console.log('And here is another!')
console.log('And yet a third')
git diff
Вот как это выглядит, когда вы запускаете git diff
. Git покажет вам разницу между кодом, который у вас есть сейчас, и последним, когда он был сохранен.
Немного сложно понять, что здесь происходит, но есть удаления -
и вставки +
. Мы удалили текст "'Hello, this is a git example!" и добавили текст "Now I have changed the first line." Вот как Git отслеживает, что изменилось между версиями.
diff --git a/git.js b/git.js
index eb0f1d1..8dbf769 100644
--- a/git.js
+++ b/git.js
@@ -1,3 +1,3 @@
+console.log('Now I have changed the first line.')
-console.log('Hello, this is a git example!')
console.log('And here is another!')
console.log('And yet a third')
Теперь, когда мы рассмотрели изменения, которые мы фиксируем, мы можем пойти дальше и сделать вторую фиксацию: git commit-am 'Update first console log'
. Это позволит сохранить изменения, которые я внес в первую строку текста.
git log
Мы можем просмотреть коммиты, которые мы сделали с командой git log
. Если я сейчас запущу его в своей программе, то получу такой вывод:
commit 67627dd44e84a3106a18a19e94cf9f3723e59b3c (HEAD -> master)
Author: amberwilkie <amber@amberwilkie.com>
Date: Wed Apr 22 16:55:39 2020 -0400
Update first console log
commit 49fe4152f474a9674a83e2b014a08828209d2690
Author: amberwilkie <amber@amberwilkie.com>
Date: Wed Apr 22 16:54:59 2020 -0400
Initial commit
Мы видим наши сообщения о коммите, время, которое мы зафиксировали, и уникальный идентификатор для нашего коммита, который мы можем использовать для ссылки на коммиты в будущем.
Git Checkout
Если мы хотим вернуться и посмотреть изменения в нашем коде по сравнению с предыдущим коммитом, мы сделаем это с git checkout 49fe4152f474a9674a83e2b014a08828209d2690
. Git переведет наш код во временное состояние, чтобы мы могли посмотреть, как он выглядит на snapshot.
Я скопировал идентификатор для моего первого коммита. Если я запускаю эту команду, моя программа говорит: «Hello, this is a git example!» на первой линии.
Чтобы вернуться к последнему коду, вы наберете git checkout master
.
Ветви
Как вы заметили выше, нам пришлось печатать master
, чтобы вернуться к текущему состоянию нашего кода. Почему? Потому что master
это имя по умолчанию для ветви филиалов - место, где наш код наиболее актуален.
Git использует ветвление для поддержки нашего кода. Вы можете рассмотреть ствол вашего дерева кода master
. Вы можете прерваться и внести некоторые изменения, но конечной целью всегда является вернуть их в ствол master
.
Вы можете использовать git checkout
, чтобы создать новую ветку, а не только проверить предыдущие версии вашего кода. Попробуйте git checkout -b new-branch
. Флаг -b
используется, когда мы создаем новую ветвь. После флага мы пишем имя нашей новой ветви. Мы можем сделать много коммитов в этой ветке и затем вернуть их в мастер с помощью процесса, называемого слиянием.
На диаграмме ниже точки представляют собой коммиты. Две ветви были сделаны "вне" мастера. При разработке программного обеспечения мы часто называем эти ветви" функциональными", в отличие от основной ветви. Синяя ветвь была объединена обратно с мастер, а желтая ветвь все еще развивается.
Обратите внимание, что хотя желтая ветвь была создана после синей ветки, в этой ветке будут видны только изменения от мастера. Если мы сделаем третью ветку когда-нибудь в будущем, изменения в основной и синей ветвях будут присутствовать в новой третьей ветке.
git merge
git merge
возьмет все коммиты, которые вы сделали в этой ветке, и вставит их в ветку master
, сохраняя вашу работу.
Зачем использовать ветки?
Если вы работаете в одиночку, разделение вашей работы на ветви может не иметь большого смысла. Почему бы просто не сохранить все в master
?
Утилита ветвления становится не очень понятной, пока мы не начнем думать о работе в команде разработчиков. Если бы каждый из них вносил свой вклад в ветку master
каждый раз, когда вносил изменения, все очень быстро становилось бы беспорядочным. Также было бы трудно контролировать, какой код идет «в производство» (в прямом эфире для клиентов), а какой код все еще тестируется или работает.
Таким образом, каждый разработчик может иметь свою собственную ветвь (или множество), работать над своей функцией столько времени, сколько ему нужно, и объединять ее, когда наступит подходящее время.
Что такое GitHub?
GitHub - это бесплатная (для личного использования) облачная платформа для кода. Он работает с Git на ваших компьютерах и компьютерах ваших коллег, служа источником истины для всех, кто работает над кодом.
Вы и ваши соавторы периодически загружаете свой код в GitHub, а GitHub предоставляет инструменты, помогающие управлять изменениями кода с течением времени.
Загрузка вашего кода на GitHub
Во-первых, вам нужно создать учетную запись GitHub. Вы будете использовать эту учетную запись на протяжении всей своей карьеры программиста, поэтому совет: используйте ваше настоящее имя.
Как только вы войдете, найдите в верхнем углу +
. Нажмите «New Repository» (название для папок Git, для краткости «repo»). Дайте ему имя - вероятно, то же самое, что и папка, которую вы создали ранее, где вы сохранили свои коммиты. Затем нажмите «Create Repository». Теперь вы можете скопировать URL-адрес, на который вы перенаправлены и можете указать источник нашего кода.
В какой-то момент здесь будет шаг аутентификации - просто следуйте инструкциям. Git очень хорошо дает нам четкие инструкции о следующих шагах.
git remote add origin
Теперь мы сообщим нашей кодовой базе (папке, где находится наш код), где хранить наш код в облаке. Мы введем git remote add origin <your-url>
, который установит для нашего хранилища origin
. Теперь мы можем перейти к нашему источнику, чтобы сохранить наше облако в GitHub.
git push
Предполагая, что мы все еще находимся в нашей ветке master
(то есть мы не извлекли другую ветку), теперь мы можем напечатать git push
и наш код перейдет в GitHub.
Просмотр вашего кода
Теперь ваш код живет в GitHub! Вот как выглядит мой приведенный выше пример:
Вы можете просматривать файлы и папки своего хранилища, просматривая текущее состояние кода. Вы также можете просмотреть предыдущие версии кода, нажав «X commits» справа, посередине. Вы увидите список коммитов, сделанных в репо, и если вы нажмете на них, вы можете просмотреть файлы вашего проекта, как они существовали в тот момент времени.
Pull Requests
Есть много других функций GitHub, но наиболее важным в сотрудничестве с коллегами является запрос на извлечение. Pull Requests (очень часто сокращенный до PR) - это способ управлять входящими изменениями в кодовую базу.
Чтобы сделать его, вы создадите новую ветвь на своем локальном компьютере, создадите по крайней мере одну фиксацию на этой ветви, а затем git push origin head
отправит эту ветвь на GitHub. (Вы можете поставить название своей ветви вместо head, но это полезно для того, чтобы все было точно согласовано).
Теперь, когда вы вернетесь на GitHub, вы должны увидеть свою ветку, чтобы сделать PR.
Если вы нажмете кнопку «Compare & pull request», вы сможете изменить многие настройки для вашего PR. Наиболее важными являются, как правило, заголовок и описание. Если вы работаете в команде, вы можете пометить для коллег ваш код с просьбой просмотреть его и добавить в проекты многие другие функции, которые вам, вероятно, пока не нужны.
Обратите внимание, что мы сравниваем ветви. Здесь мы просим добавить изменения из этой ветви (pr-example
) в ветку master
. Но мы можем нацелиться на любую из других веток в нашем репо. На данный момент, просто поймите, что master
это не единственная ветка, против которой вы можете «make a pull request against».
Когда вы нажмете «Create Pull Request», вы увидите этот экран:
Вы можете увидеть все коммиты в этой ветке (у меня есть только один - «Change third line of program»), а также вы можете объединить ваш Pull Request.
Помните, как мы могли объединить наш код локально, когда мы говорили о Git? Мы можем выполнить то же действие с нашим облачным кодом на GitHub. Если вы нажмете зеленую кнопку «Merge pull request», ваши изменения будут объединены в master.
git pull
Последняя команда, которую вы должны знать прямо сейчас git pull
. Если вы объединили свой PR в главную ветвь на GitHub, то в исходном коде нет никаких изменений, которых еще нет на вашем локальном компьютере.
Если вы проверите ветку master
, то изменения git pull origin master
, которые вы только что объединили, теперь будут на вашем локальном компьютере.
➜ git-example git:(master) git pull origin master
From https://github.com/AmberWilkie/git-example
* branch master -> FETCH_HEAD
Updating 67627dd..38ad2da
Fast-forward
git.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Эта "Fast-forward" относится к нашей локальной главной ветви, "догоняющей" ветвь origin на GitHub. Мы завершили круг:
- Локальные изменения
- Нажмите на GitHub и сделайте PR
- Объединить PR в мастер
- Перетащите мастер на локальный компьютер
Когда вы освоитесь с этими шагами, вы будете на 80% пути к освоению Git и GitHub!