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

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

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

Удачи в изучении Git!

Git: краткое описание Обзор

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

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

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

Вопросы:

  • Почему вам следует использовать Git?
  • В чем преимущество распределенного контроля версий?

Установка Git

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

$ sudo apt install git-all

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

$ sudo dnf install git-all

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

$ git —version

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

git версии 2.17.0

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

$ git config —global user.name «yourusername»
$ git config —global user. email «[электронная почта защищена]»

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

$ git config —list
user.name = yourusername
user.email=yourusername@example.com

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

Вопросы

  • Какая команда используется для установки Git в вашей системе Linux?
  • Почему вы должны настраивать конфигурацию user.name и user.email? Как вы их настраиваете?

Концептуальное понимание 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/.git

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

Вопросы:

  • Как инициализировать каталог, который будет отслеживаться Git?

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

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

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

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

Давайте попробуем команду log:

$ git log
fatal : ваша текущая ветка master еще не имеет никаких коммитов

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

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

Привет, мир

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

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

ничего не добавлено для фиксации, кроме присутствуют неотслеживаемые файлы (используйте «git add» для отслеживания)

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

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

$ git add index.html

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

$ git add.

Теперь давайте еще раз проверим статус:

$ git status
На главном сервере

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

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

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

$ git rm —cached index.html

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

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

$ git log
фатальный: ваша текущая ветка ‘master’ еще не зафиксирована

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

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

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

Теперь давайте проверим наш файл журнала:

$ git log
commit f136d22040ba81686c9522f4ff94961a68751af7
Автор: Zak H
Дата: понедельник, 4 июня 16:53:42 2018 -0700
Выполнение index.html

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

$ git log —oneline
f136d22 Фиксация index.html

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

Начнем редактировать index.html. Откройте файл index.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 «Изменен index.html в более счастливое сообщение»
[master 0586662] Изменено index.html на более приятное сообщение
1 файл изменен, 1 вставка (+), 1 удаление (-)

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

$ git log —oneline
0586662 Изменен index.html на более счастливое сообщение
f136d22 Фиксация index.html

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

Вопросы:

  • Что делает git status?
  • Что делает git log?
  • Что делает git добавить do?
  • Что делает git commit?

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

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

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

$ cat index.html
Моя веб-страница

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

Как видите, у вас более новая версия («Привет, мир! Это я! »). Давайте проверим журнал:

$ git log —oneline
0586662 Изменен index.html на более приятное сообщение
f136d22 Фиксация index.html

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

$ git checkout f136d22
Примечание: проверка ‘f136d22’.

Вы находитесь в состоянии «ОТСОЕДИНЕННАЯ ГОЛОВА». Вы можете осмотреться, внести экспериментальные изменения
и зафиксировать их, а также отменить любые фиксации, сделанные в этом состоянии
, не затрагивая никакие ветки, выполнив еще одну проверку.

Если вы хотите создать новую ветку для сохранения созданных вами коммитов, вы можете
сделать это (сейчас или позже), снова используя -b с командой checkout. Пример:

git checkout -b
HEAD теперь находится на f136d22 … Фиксация index.html

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

$ cat index.html
Моя веб-страница

Привет, мир

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

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

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

$ git checkout master
Предыдущая позиция HEAD была f136d22 .. . Фиксация index.html
Переключена на ветку ‘master’

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

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

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

$ cat index.html
Моя веб-страница

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

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

Вопросы:

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

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

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

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

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

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

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

$ git branch david_website

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

$ git branch —list
david_website
* master

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

$ git checkout david_website
Переключился на ветку ‘david_website’

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

$ git branch —list
* david_website
master

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

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

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

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

$ git log —oneline
345c0f4 Изменен веб-сайт Дэвида
0586662 Изменен index.html на более приятное сообщение
f136d22 Фиксация index.html

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

$ cat index.html
Моя веб-страница

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

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

$ git checkout master
Переключился на ветку ‘master’

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

$ git status
На главном сервере ветки
нечего фиксировать, рабочий каталог очищен
$ git log —oneline
0586662 Измененный index. html к более счастливому сообщению
f136d22 Фиксация index.html

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

Вот что произошло

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

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

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

Совет: вы тянете меняется с david_website на master. Чтобы добиться этого, вы должны быть на мастере.

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

$ git log —oneline
345c0f4 Изменен веб-сайт Дэвида
0586662 Изменен index.html на более приятное сообщение
f136d22 Фиксация index.html

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

$ cat index.html
Моя веб-страница

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

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

$ git branch —list
david_website
* master

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

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

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

$ git branch —list
* master

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

Вопросы:

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

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

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

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

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

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

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

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

echo «# project_website» >> README.md
git init
git add README.md
git commit -m «первая фиксация»
git remote add origin git@github.com: yourusername/project_website.git
git push -u origin master

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

$ git remote добавить origin git@github.com: yourusername/project_website.git

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

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

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

$ 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.git
* [новая ветка] master -> master

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

Как разработчик, вы будете работать с кодом других людей.. Так что стоит попробовать получить код из GitHub.

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

$ git clone git@github.com: yourusername/project_website.git

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

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

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

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

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

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

$ touch ReadMe.md
$ git add.
$ git commit -m «Added ReadMe.md»
$ 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
Оцените статью
nanomode.ru
Добавить комментарий