Разработка программного обеспечения - это совместная работа. Как программист, вы должны делиться своей работой с другими. Но совместное использование кода и совместная работа могут стать сложными. Трудно отслеживать различные изменения, которые происходят в течение жизненного цикла программного обеспечения. Таким образом, команды разработчиков полагаются на инструменты контроля версий, которые помогают в процессе совместной работы над программным обеспечением. 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 установить git-allВы можете проверить, установлен ли Git, используя следующую команду:
$ git --versionОн должен показать вам версию установленного Git, например:
git версия 2.17.0После того, как вы установили Git, пришло время настроить ваше имя пользователя и адрес электронной почты:
$ git config - глобальный пользователь.имя "yourusername"$ git config - глобальный пользователь.электронная почта "[электронная почта защищена]"
Вы можете проверить, правильно ли установлены конфигурации, используя следующую команду:
$ git config --listПользователь.name = yourusername
Пользователь.email = yourusername @ пример.ком
Кончик: Важно настроить пользователя.имя и пользователь.электронная почта, потому что эти конфигурации используются для отслеживания ваших изменений.
Вопросов
- Какая команда используется для установки Git в вашей системе Linux?
- Зачем вам настраивать пользователя.имя и пользователь.конфигурация электронной почты? Как вы их настраиваете?
Концептуальное понимание Git
Чтобы использовать Git, сначала вам нужно понять эти четыре концепции:
- Рабочий каталог
- Плацдарм
- Репозиторий
- Удаленный репозиторий
Рабочий каталог, промежуточная область и репозиторий являются локальными для вашего компьютера. Удаленным репозиторием может быть любой другой компьютер или сервер. Давайте подумаем об этих концепциях как о четырех коробках, в которых можно хранить стандартные документы формата A1.
Предположим, вы пишете документ от руки на бумаге формата A1 на своем столе. Вы храните этот документ в поле рабочего каталога. На определенном этапе своей работы вы решаете, что готовы сохранить копию уже выполненной работы. Итак, вы делаете ксерокопию своей текущей статьи и кладете ее в промежуточную коробку.
Промежуточный бокс - это временная зона. Если вы решите выбросить фотокопию в промежуточном ящике и обновить ее новой копией документа рабочего каталога, постоянная запись этого подготовленного документа не будет.
Предположим, вы почти уверены, что хотите сохранить постоянный учет документа, который у вас есть в промежуточной коробке. Затем вы делаете ксерокопию документа промежуточной коробки и перемещаете ее в коробку репозитория.
Когда вы перемещаете его в ящик репозитория, происходят две вещи:
- Снимок документа сохраняется постоянно.
- Для снимка создается запись в файле журнала.
Запись в журнале поможет вам найти именно этот снимок вашего документа, если он вам понадобится в будущем.
Теперь в поле локального репозитория у вас есть снимок вашей работы и запись в журнале. Но это доступно только тебе. Таким образом, вы делаете копию документа локального репозитория вместе с файлом журнала и кладете его в ящик в комнате снабжения компании. Теперь любой сотрудник вашей компании может прийти, сделать копию вашего документа и отнести ее к себе на стол. Ящик в комнате снабжения будет удаленным хранилищем.
Удаленный репозиторий похож на общий доступ к вашему документу с помощью 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?
Основные команды 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 --onelinef136d22 Индекс фиксации.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 --oneline0586662 Модифицированный указатель.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 --oneline0586662 Модифицированный указатель.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 --listdavid_website
* владелец
Звездочка (*) рядом с мастером означает, что вы все еще находитесь в основной ветке. Вы можете проверить ветку david_website с помощью следующей команды:
$ git checkout david_websiteПерешел на ветку david_website
Теперь, если вы снова проверите список веток, вы увидите:
$ git branch --list* david_website
владелец
Итак, вы находитесь в ветке david_website.
Давайте изменим индекс.html из «Привет, мир! Это я!"На" Привет, мир! Это Дэвид!», А затем подготовьте и зафиксируйте его:
$ git add .$ git commit -m "Изменен веб-сайт для Дэвида"
Если вы проверите журналы, вы должны увидеть:
$ git log --oneline345c0f4 Изменен сайт Дэвида
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 --oneline345c0f4 Изменен сайт Дэвида
0586662 Модифицированный указатель.html в более счастливое сообщение
f136d22 Индекс фиксации.html
Вы успешно объединили ветку david_website в master. И ваш индекс.html для основной ветки выглядит идентично ветке david_website:
индекс $ cat.htmlПривет мир! Это Дэвид!
Вы можете сохранить ветку david_website:
$ git branch --listdavid_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