Git

Учебник по Git для начинающих

Учебник по Git для начинающих

Разработка программного обеспечения - это совместная работа. Как программист, вы должны делиться своей работой с другими. Но совместное использование кода и совместная работа могут стать сложными. Трудно отслеживать различные изменения, которые происходят в течение жизненного цикла программного обеспечения. Таким образом, команды разработчиков полагаются на инструменты контроля версий, которые помогают в процессе совместной работы над программным обеспечением. Git - один из самых известных инструментов контроля версий в индустрии программного обеспечения.

Кончик: В этом руководстве вы узнаете, как использовать основы Git. Каждый раздел заканчивается несколькими вопросами. Вы можете прочитать вопросы, прежде чем приступить к чтению раздела. Это поможет вам понять и обратить внимание на важные моменты.

Получайте удовольствие от изучения Git!

Git: краткий обзор

Git - это распределенная система контроля версий. Он отслеживает любые изменения, которые вы вносите в свои файлы и папки. Это упрощает сохранение незавершенной работы. Если есть проблема, вы можете легко проверить более раннюю версию файла или папки. При необходимости вы даже можете вернуть всю кодовую базу к более старой версии.

Разработка Git началась в 2005 году. Группа ядра Linux, используемая для поддержки своего кода в BitKeeper, проприетарной распределенной системе контроля версий. Однако BitKeeper отказался от бесплатного использования продукта. Итак, Линус Торвальдс, создатель и главный разработчик Linux, разработал новую распределенную систему управления версиями с открытым исходным кодом, которая отвечала бы требованиям сообщества разработчиков Linux. И родился Git.

Как распределенная система контроля версий, Git не требует централизованного управления для отслеживания кода. Более старые централизованные средства управления версиями, такие как CVS, SVN или Perforce, требуют, чтобы центральные серверы поддерживали историю изменений. Git может отслеживать все изменения локально и работать в одноранговой сети. Так что он более универсален, чем централизованные системы.

Вопросов:

Установка Git

Для систем Linux установить Git легко. Если вы используете дистрибутив на основе Debian, например Ubuntu, вы можете использовать apt install:

$ sudo apt install git-all

Для Fedora, RHEL или CentOS вы можете использовать:

$ sudo dnf установить git-all

Вы можете проверить, установлен ли Git, используя следующую команду:

$ git --version

Он должен показать вам версию установленного Git, например:

git версия 2.17.0

После того, как вы установили Git, пришло время настроить ваше имя пользователя и адрес электронной почты:

$ git config - глобальный пользователь.имя "yourusername"
$ git config - глобальный пользователь.электронная почта "[электронная почта защищена]"

Вы можете проверить, правильно ли установлены конфигурации, используя следующую команду:

$ git config --list
Пользователь.name = yourusername
Пользователь.email = yourusername @ пример.ком

Кончик: Важно настроить пользователя.имя и пользователь.электронная почта, потому что эти конфигурации используются для отслеживания ваших изменений.

Вопросов

Концептуальное понимание Git

Чтобы использовать Git, сначала вам нужно понять эти четыре концепции:

Рабочий каталог, промежуточная область и репозиторий являются локальными для вашего компьютера. Удаленным репозиторием может быть любой другой компьютер или сервер. Давайте подумаем об этих концепциях как о четырех коробках, в которых можно хранить стандартные документы формата A1.

Предположим, вы пишете документ от руки на бумаге формата A1 на своем столе. Вы храните этот документ в поле рабочего каталога. На определенном этапе своей работы вы решаете, что готовы сохранить копию уже выполненной работы. Итак, вы делаете ксерокопию своей текущей статьи и кладете ее в промежуточную коробку.

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

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

Когда вы перемещаете его в ящик репозитория, происходят две вещи:

  1. Снимок документа сохраняется постоянно.
  2. Для снимка создается запись в файле журнала.

Запись в журнале поможет вам найти именно этот снимок вашего документа, если он вам понадобится в будущем.

Теперь в поле локального репозитория у вас есть снимок вашей работы и запись в журнале. Но это доступно только тебе. Таким образом, вы делаете копию документа локального репозитория вместе с файлом журнала и кладете его в ящик в комнате снабжения компании. Теперь любой сотрудник вашей компании может прийти, сделать копию вашего документа и отнести ее к себе на стол. Ящик в комнате снабжения будет удаленным хранилищем.

Удаленный репозиторий похож на общий доступ к вашему документу с помощью Google Docs или Dropbox.

Вопросов:

Ваш первый репозиторий Git

После того, как вы установили Git, вы можете начать создавать свои собственные репозитории Git. В этом разделе вы собираетесь инициализировать свой репозиторий Git.

Предположим, вы работаете над проектом веб-разработки. Создадим папку с именем project_helloworld и перейдем в каталог:

$ mkdir project_helloworld
$ cd project_helloworld

Вы можете указать Git отслеживать этот каталог с помощью следующей команды:

$ git init

Вы должны увидеть такой вывод:

Инициализированный пустой репозиторий Git в / Users / zakh / _work / LearnGIT / git_tutorial /
project_helloworld /.мерзавец

Теперь любые файлы и папки внутри project_helloworld будут отслеживаться Git.

Вопросов:

Основные команды Git: статус, журнал, добавление и фиксация

Команда status показывает текущее состояние вашего рабочего каталога, а команда log показывает историю. Попробуем команду status:

$ git status
О мастере филиала
Начальная фиксация
нечего фиксировать (создавать / копировать файлы и отслеживать с помощью "git add")

В выводе команды git status говорится, что вы находитесь в главной ветке. Это ветка по умолчанию, которую инициализирует Git. (Вы можете создавать свои собственные ветки. Подробнее о ветках позже). Кроме того, вывод говорит, что нечего фиксировать.

Попробуем команду log:

$ git журнал
фатальный: ваша текущая ветка master еще не имеет никаких коммитов

Итак, пора написать код. Создадим файл с названием index.html:


Моя веб-страница


Привет мир

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

$ git status
О мастере филиала
Начальная фиксация
Не отслеживаемые файлы:
(используйте "git add … »Включить в то, что будет совершено)
индекс.html
ничего не добавлено для фиксации, но присутствуют неотслеживаемые файлы (для отслеживания используйте "git add")

Git сообщает вам, что у вас есть файл с именем index.html в вашем рабочем каталоге, который не отслеживается.

Убедимся, что index.html отслеживается. Вам нужно будет использовать команду добавления:

$ git добавить индекс.html

В качестве альтернативы вы можете использовать «.»Возможность добавить все в каталог:

$ git add .

А теперь еще раз проверим статус:

$ git status
О мастере филиала
Начальная фиксация
Изменения, которые необходимо зафиксировать:
(используйте "git rm --cached … "Убрать сцену")
новый файл: index.html

Зеленый цвет означает, что индекс.html отслеживается Git.

Кончик: Как указано в приведенных выше инструкциях, если вы используете команду:

$ git rm --cached index.html

Ваш индекс.html вернется в статус неотслеживаемого. Вам нужно будет добавить его снова, чтобы вернуть его к постановке.]

Давайте еще раз проверим журнал:

$ git журнал
фатальный: ваша текущая ветка master еще не имеет никаких коммитов

Итак, хотя Git отслеживает индекс.html, в репозитории Git о файле пока нет. Давайте зафиксируем наши изменения:

$ git commit -m "Индекс фиксации.html "
Результат должен выглядеть примерно так:
[master (root-commit) f136d22] Индекс фиксации.html
1 файл изменен, 6 прошивок (+)
режим создания индекса 100644.html

Текст в кавычках после «-m» - это комментарий, который войдет в файл журнала. Вы можете использовать git commit без «-m», но тогда Git откроет текстовый редактор с просьбой написать комментарии. Легче просто поместить комментарии прямо в командную строку.

Теперь проверим наш лог-файл:

$ git журнал
совершить f136d22040ba81686c9522f4ff94961a68751af7
Автор: Зак Х
Дата: Пн, 4 июня 16:53:42 2018 -0700
Индекс фиксации.html

Вы можете видеть, что он показывает фиксацию. Вы успешно зафиксировали свои изменения в локальном репозитории. Если вы хотите кратко просмотреть тот же журнал, вы можете использовать следующую команду:

$ git log --oneline
f136d22 Индекс фиксации.html

В дальнейшем мы будем использовать эту форму команды журнала, потому что она упрощает понимание того, что происходит.

Приступим к редактированию индекса.html. Откройте указатель.html в редакторе и измените строку «Hello world» на «Hello world»! Это я!”И сохраните это. Если вы проверите статус еще раз, вы увидите, что Git заметил, что вы редактируете файл:

$ git status
О мастере филиала
Изменения, не предназначенные для фиксации:
(используйте "git add … ", Чтобы обновить то, что будет зафиксировано)
(используйте "git checkout -- … "Чтобы отменить изменения в рабочем каталоге)
изменено: index.html
в фиксацию изменений не добавлено (используйте "git add" и / или "git commit -a")

Изменение все еще находится в вашем рабочем каталоге. Вам нужно подтолкнуть его к плацдарму. Используйте команду добавления, которую вы использовали раньше:

$ git add .

Еще раз проверьте статус:

$ git status
О мастере филиала
Изменения, которые необходимо зафиксировать:
(используйте "git reset HEAD … "Убрать сцену")
изменено: index.html

Теперь ваши изменения находятся в области подготовки. Вы можете передать его в репозиторий на постоянное хранение:

$ git commit -m "Измененный индекс.html в более счастливое сообщение "
[master 0586662] Измененный индекс.html в более счастливое сообщение
1 файл изменен, 1 вставка (+), 1 удаление (-)

Вы можете проверить журнал на наличие постоянных изменений:

$ git log --oneline
0586662 Модифицированный указатель.html в более счастливое сообщение
f136d22 Индекс фиксации.html

В этом разделе вы научились использовать команды status, log, add и commit для отслеживания ваших документов в Git.

Вопросов:

  • Что делает git status?
  • Что делает git log?
  • Что делает git add?
  • Что делает git commit?

Возврат к старым файлам с помощью Checkout

Когда вы фиксируете файл в Git, он создает уникальный хеш для каждой фиксации. Вы можете использовать их как идентификаторы, чтобы вернуться к более старой версии.

Предположим, вы хотите вернуться к своей более ранней версии index.html. Сначала посмотрим на индекс.html в текущем состоянии:

индекс $ cat.html

Моя веб-страница


Привет мир! Это я!

Вы видите, что у вас установлена ​​более новая версия («Hello world! Это я!”). Проверим журнал:

$ git log --oneline
0586662 Модифицированный указатель.html в более счастливое сообщение
f136d22 Индекс фиксации.html

Хеш для предыдущей версии был f136d22 («Привет, мир»).  Вы можете использовать команду checkout, чтобы перейти к этой версии:

$ git checkout f136d22
Примечание: проверка 'f136d22'.
Вы находитесь в состоянии "отключенная ГОЛОВА". Вы можете осмотреться, внести экспериментальные изменения
и зафиксируйте их, и вы можете отказаться от любых коммитов, сделанных в этом состоянии
без воздействия на какие-либо ветки, выполнив еще одну проверку.
Если вы хотите создать новую ветку для сохранения созданных вами коммитов, вы можете
сделайте это (сейчас или позже), снова используя -b с командой checkout. Пример:
git checkout -b
HEAD теперь на f136d22… Индекс фиксации.html

Если вы посмотрите на содержание index.html, вы увидите:

индекс $ cat.html

Моя веб-страница


Привет мир

Только "Hello world". Итак, ваш индекс.html изменился на более старую версию. Если вы проверите статус:

$ git status
ГОЛОВА отсоединена на f136d22
ничего не фиксировать, рабочий каталог чист

Git в основном сообщает вам, что HEAD находится не в самом последнем коммите. Вы можете вернуться к самой последней фиксации, проверив основную ветку, используя следующую команду:

$ git checkout master
Предыдущая позиция HEAD была f136d22… Индекс фиксации.html
Перешел на ветку master

Теперь, если вы проверите статус:

$ git status
О мастере филиала
ничего не фиксировать, рабочий каталог чист

Красное предупреждение исчезло. Кроме того, если вы проверите свой индекс.html, вы должны вернуться к последней версии:

индекс $ cat.html

Моя веб-страница

Привет мир! Это я!

Команда оформления заказа переводит вас в различные состояния. Подробнее о кассе мы узнаем в следующем разделе.

Вопросов:

  • Как использовать команду git checkout для перехода к более старой версии файла?
  • Как использовать git checkout, чтобы вернуться к последней версии файла?

Оформление заказа, ветвление и слияние

Ветвление - одна из лучших функций Git. Это поможет вам разделить свою работу и больше экспериментировать. В других системах управления версиями ветвление было трудоемким и трудным. Git упростил ветвление и слияние.

Как вы заметили в команде status, когда вы создаете новый репозиторий Git, вы находитесь в главной ветке.

$ git status
О мастере филиала
ничего не фиксировать, рабочий каталог чист

Предположим, вы делаете сайт для своего друга Дэвида. Вы хотите повторно использовать код своего собственного веб-сайта. Ветвление - отличное решение. Назовем ветку david_website.

Вы можете выполнить следующую команду:

$ git ветка david_website

Вы можете использовать следующую команду, чтобы увидеть все ветки:

$ git branch --list
david_website
* владелец

Звездочка (*) рядом с мастером означает, что вы все еще находитесь в основной ветке. Вы можете проверить ветку david_website с помощью следующей команды:

$ git checkout david_website
Перешел на ветку david_website

Теперь, если вы снова проверите список веток, вы увидите:

$ git branch --list
* david_website
владелец

Итак, вы находитесь в ветке david_website.

Давайте изменим индекс.html из «Привет, мир! Это я!"На" Привет, мир! Это Дэвид!», А затем подготовьте и зафиксируйте его:

$ git add .
$ git commit -m "Изменен веб-сайт для Дэвида"

Если вы проверите журналы, вы должны увидеть:

$ git log --oneline
345c0f4 Изменен сайт Дэвида
0586662 Модифицированный указатель.html в более счастливое сообщение
f136d22 Индекс фиксации.html

И ваш индексный файл должен выглядеть так:

индекс $ cat.html

Моя веб-страница


Привет мир! Это Дэвид!

Теперь давайте снова проверим основную ветку:

$ git checkout master
Перешел на ветку master

Если вы проверите статус и зарегистрируетесь:

$ git status
О мастере филиала
ничего не фиксировать, рабочий каталог чист
$ git log --oneline
0586662 Модифицированный указатель.html в более счастливое сообщение
f136d22 Индекс фиксации.html

Обратите внимание, что у вас нет третьего коммита в мастере. Потому что эта фиксация поддерживается только в ветке david_website.

Это то, что случилось

Предположим, на этом этапе вы решили, что не хотите продолжать работу с сайтом. Ты просто будешь разработчиком Дэвида. Итак, вы хотите объединить изменения в ветке david_website с мастером. В главной ветке вам просто нужно ввести следующие команды (команда status используется для проверки того, что вы находитесь в нужном месте):

$ git status
О мастере филиала
ничего не фиксировать, рабочий каталог чист
 
$ git merge david_website
Обновление 0586662… 345c0f4
Перемотка вперед
индекс.html | 2 +-
1 файл изменен, 1 вставка (+), 1 удаление (-)

Кончик: Вы переносите изменения с david_website на master. Вы должны быть хозяином, чтобы добиться этого.

Теперь, если вы проверите журнал на главном сервере, вы увидите, что есть третий коммит:

$ git log --oneline
345c0f4 Изменен сайт Дэвида
0586662 Модифицированный указатель.html в более счастливое сообщение
f136d22 Индекс фиксации.html

Вы успешно объединили ветку david_website в master. И ваш индекс.html для основной ветки выглядит идентично ветке david_website:

индекс $ cat.html

Моя веб-страница


Привет мир! Это Дэвид!

Вы можете сохранить ветку david_website:

$ git branch --list
david_website
* владелец

Или вы можете удалить его:

$ git branch -d david_website
Удалена ветка david_website (было 345c0f4).

После удаления вы больше не должны видеть ветку david_website:

$ git branch --list
* владелец

Кончик: Во время слияния, если Git не может выполнить слияние автоматически, он выдаст вам ошибки конфликта слияния. В этом случае вам нужно вручную решить проблемы слияния.

Вопросов:

  • Зачем нужно ветвление?
  • Как вы разветвляете и объединяете файлы и папки?

Удаленный репозиторий

До сих пор вся ваша работа была локальной. Вы фиксировали свои изменения в локальном репозитории. Но пришло время поделиться своей работой со всем миром.

Удаленный репозиторий Git - это, по сути, еще одна копия вашего локального репозитория, к которой могут получить доступ другие. Вы можете настроить сервер и сделать его удаленным репозиторием. Но большинство людей используют для этого GitHub или Bitbucket. Вы можете бесплатно создавать общедоступные репозитории, к которым может получить доступ любой.

Создадим удаленный репозиторий на GitHub.

Во-первых, вам нужно создать учетную запись GitHub []. После того, как у вас появится учетная запись, создайте новый репозиторий с помощью кнопки «Новый репозиторий». Используйте «project_website» в качестве имени репозитория (вы можете выбрать что-нибудь другое, если хотите).

Вы должны увидеть вкладку «Код» с такими инструкциями:

… Или создайте новый репозиторий в командной строке

echo "# project_website" >> README.мкр
git init
git добавить README.мкр
git commit -m "первая фиксация"
git удаленный добавить источник git @ github.com: yourusername / project_website.мерзавец
git push -u origin master

Скопируйте следующую команду «git remote add origin» и запустите ее в своем рабочем каталоге:

$ git удаленное добавление источника git @ github.com: yourusername / project_website.мерзавец

Примечание: в вашем случае yourusername должно быть тем, что вы использовали для создания своей учетной записи GitHub.

В приведенной выше команде вы указали Git расположение удаленного репозитория. Команда сообщает Git, что «origin» для вашего рабочего каталога project_helloworld будет «[email protected]: yourusername / project_website.мерзавец ».

Теперь отправьте свой код из основной ветки в источник (удаленный репозиторий):

$ git push origin master
Подсчет объектов: 9, готово.
Дельта-сжатие с использованием до 4 потоков.
Сжатие объектов: 100% (6/6), готово.
Запись объектов: 100% (9/9), 803 байта | 0 байт / с, выполнено.
Всего 9 (дельта 2), повторно используется 0 (дельта 0)
удаленный: разрешение дельт: 100% (2/2), выполнено.
В git @ github.com: yourusername / project_website.мерзавец
* [новая ветка] мастер -> мастер

Если вы обновите свой браузер в GitHub, вы увидите, что индекс.html файл находится там. Таким образом, ваш код является общедоступным, и другие разработчики могут проверять и изменять код в удаленном репозитории.

Как разработчик вы будете работать с чужим кодом. Так что стоит попробовать проверить код с GitHub.

Пойдем в новый каталог, где у вас ничего нет. В правой части репозитория GitHub вы заметите кнопку «Клонировать или скачать». Если вы нажмете на него, он должен предоставить вам адрес SSH. Выполните следующую команду с адресом SSH:

$ git clone git @ github.com: yourusername / project_website.мерзавец

Результат должен выглядеть так:

$ git clone git @ github.com: yourusername / project_website.мерзавец
Клонирование в "project_website"…
удаленный: Подсчет объектов: 9, готово.
удаленный: сжатие объектов: 100% (4/4), готово.
удаленный: всего 9 (дельта 2), повторно используется 9 (дельта 2), повторно используется пакет 0
Получение объектов: 100% (9/9), готово.
Разрешение дельт: 100% (2/2), выполнено.
Проверка подключения… выполнено.

Он создаст project_website в вашей чистой папке. Если вы войдете внутрь, то увидите указатель.html из вашего project_helloworld.

Итак, вы добились следующего:

  • Создал и внес изменения в project_helloworld
  • Загрузили код на GitHub в project_website
  • Загрузил код с GitHub

Давайте еще один файл из нового рабочего каталога project_website:

$ touch ReadMe.мкр
$ git add .
$ git commit -m "Добавлен ReadMe.мкр "
$ git push origin master

Если вы обновите страницу GitHub project_website, вы должны увидеть ReadMe.md файл там.

Примечание. Когда вы загружаете код с GitHub, рабочий каталог автоматически знает источник. Вам не нужно определять его с помощью команды «git remote add origin».

Вопросов:

  • Зачем вам нужно использовать удаленные репозитории?
  • Как настроить текущий локальный репозиторий для подключения к удаленному репозиторию?
  • Как клонировать удаленные репозитории на локальный компьютер?

Заключение

Дополнительную информацию обо всех командах можно найти в документации Git []. Несмотря на то, что доступны инструменты пользовательского интерфейса Git, командная строка - лучший способ освоить Git. Это даст вам более прочную основу для вашей работы по развитию.

Дальнейшее изучение:
  • https: // git-scm.com / docs
  • https: // git-scm.com / book / en / v2
  • https: // git-scm.com / videos
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...
Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...