Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development
Code

Простота контроля версий с Git

by
Difficulty:IntermediateLength:LongLanguages:

Russian (Pусский) translation by Anton Lisovsky (you can also view the original English article)

Вам когда либо приходилось работать над настолько громоздким проектом, что вы боялись обновить файл или добавить новый функционал? Возможно проблема заключается в том, что вы не использовали систему контроля версий (version control system). В сегодняшнем туториале, мы научимся основам, вероятно, одной из лучших в мире VCS - Git.

Что такое Git?

Git - это инструмент управления с открытым исходным кодом: он был создан Linus Torvalds, когда он работал над ядром Linux. Поскольку данный инструмент обладает такими корнями, он должен быть очень быстрым, а так же его должно быть просто освоить. Git позволяет работать надо кодом с мыслью, что всё совершенные действия обратимы. Вы можете с легкостью экспериментировать внедряя новые идеи в проект и не переживать о том, что что-либо может сломаться. The Git Parable от Tom Preston-Werner - отличное введение в понятия и идеи использования Git.

Почему я должен использовать Git?

Вам правда стоит задуматься об использовании системы контроля версий; как я уже упоминал, в ваших руках будет свобода делать всё что угодно с кодом и не переживать о том, что, что-либо может сломаться. Так как вы уже поняли преимущества использования системы контроля версий, возможно вы задаётесь вопросом, почему же git? Почему я не могу воспользоваться SVN или Perforce или чем-то другим? Честно признаться, глубоко мне не довелось изучить различия; обратите внимания на WhyGitIsBetterThanX.com для более подробной информации.

Как мне всё настроить?

Git довольно просто установить: на Mac, пожалуй легче всего воспользоваться git-osx-installer. Возможно у вас есть желания установить Git с помощью MacPorts, в случае если они установлены; можно найти инструкции на сайте GitHub. (И да, мы будем обсуждать GitHub в дальнейшем). На Windows, самый простой способ начать - использовать установщик msysgit. Однако, если вы поставите Cygwin, можно также установить Git через него.

Как использовать Git?

На данный момент у вас должен быть установлен Git; если вы пользователь Mac, откройте терминал; если вы пользователь Windows откройте Git Bash (с помощью msysgit) или командную строку Cygwin. На данном этапе всевозможные различия операционных систем не будут иметь значения.

Конфигурация

Мы начнём с конфигурации. В каждом коммите, который вы сделаете будет отображаться ваше имя и адрес электронной почты, в качестве 'owner' (владельца) данного коммита, тем самым вам стоит начать с конфигурации данных значений. Для этого запустите команду:

Также будет неплохо активировать подсветку текста, для простоты чтения в терминале.

git init

Теперь когда Git известно кто вы такой, давайте представим, что мы работаем над простым PHP веб-приложением. (Конечно же, чем больше проект, тем очевиднее польза Git, но мы всего лишь осваиваем инструмент, верно?) У нас имеется пустая директория под названием 'mySite'. Для начала откроем данную директория (используя команду cd). Чтобы начать использовать Git, необходимо запустить команду git init; как вы могли догадаться, тем самым мы инициализируем хранилище Git в данной папке, создав внутри папку .git. Хранилище или репозиторий - это своего рода история проекта. В ней будут содержаться все предыдущие версии кода, также как и текущая версия.

Git Init

Обратите внимание как к вашему пути в терминале добавилось (master). Это ветка, на который мы работаем в текущий момент. Ветка? думайте о своём проекте, как о древе; вы можете создавать различный функционал (фичу) на различных ветках, каждая ветка будет представлять из себя отдельную сущность.

git add

Начнём работу над нашим приложением.

Files

Прежде чем продолжить, мы должны сделать первый коммит. Коммит - это всего лишь определённый пункт, указатель в истории нашего кода. Однако прежде чем это сделать, нам следует перенести интересующие нас файлы в качестве части данного коммита, в так называемую staging area. Staging area - место где хранятся файлы, которые войдут в следующий коммит; возможно вы не хотите коммитить все текущие изменения, таким образом вы переносите определённую часть, если хотите, в staging area. Сделать это можно с помощью команды add.

Знак . означает, что мы хотим добавить всё. Также можно указать специфичные файлы, если захотите.

git commit

Теперь когда мы добавили файлы в staging area, давайте закоммитим их. Это можно сделать командой

Это перенесёт файлы в staging area и укажет, что данный код является определённым пунктом, указателем в истории нашего проекта. Если не добавлять никаких опций к команде выше, вы получите следующий результат.

vim

Каждый коммит должен обладать соответствующим сообщением, тем самым вам будет известно по какой причине данный код был добавлен в коммит. Данный редактор позволят вам написать своё сообщение, также как и посмотреть, что находится в этом коммите. Как показано на картинке выше, коммит состоит из четырёх новых файлов. Редактор, который используется для добавления сообщения называется Vim; если вы не знакомы с vim, знайте, что вам следует нажать i (Insert), прежде чем сможете напечатать текст сообщения. На скриншоте выше, я добавил сообщение "Initial commit (начальный коммит)". После того как напишете сообщение, нажмите escape, после чего :wq (для сохранения и выхода). Далее вы увидите как будет успешно совершён коммит.

Commit Aftermath

Вы можете использовать несколько опций, чтобы сделать коммит быстрее. Для начала, -m позволяет написать сообщение прямо в терминале.

Флаг -a позволяет вам пропустить staging area; не совсем пропустить. Git автоматически перенесёт файлы в stage, после чего добавит в коммит все модифицированные файлы, в случае использования данной опции. (Стоит запомнить, что в этом случае не будут добавлены созданные, новые файлы). Вместе можно использовать эти команды следующим образом:

Итак, как же Git отличает коммиты друг от друга? Вместо того, чтобы нумеровать их, Git использует контент с кодом в коммите, для создания SHA1 хеша из 40 символов. Что здорово в данном подходе, так это то что, используя наш код для создания хеша, вы никогда не встретите двух одинаковых хешей в проекте, разве что в случае абсолютно идентичного кода в коммитах.

git status

Команда git status позволяет вам посмотреть на текущее состояние вашего кода. Мы только что сделали коммит, таким образом git status покажет нам, что нет никаких новых изменений.

status, clean

Если продолжить работу над нашим воображаемым проектом, вы увидите как статус изменится. Я собираюсь отредактировать index.php и добавить новый файл. Теперь, запустив git status мы увидим:

Status, not clean

Обновление разделено на две категории: "changed but not updated (изменено но не обновлено)" и "untracked files (файлы, которые не отслеживаются)". Если запустить

вы увидите как теперь появился раздел "changes to be commited (изменения, которые будут добавлены в коммит)". Тут перечислены файлы добавленные в staging area. Я собираюсь закоммитить данные изменения с помощью:

Теперь запустив git status мы увидим чистую, рабочую директорию.

git branch / git checkout

Предположим сценарий: всё хорошо и мы работаем над нашим проектом, внезапно у нас появилась грандиозная идея. Эта идея революционная, она значительно изменит наш проект. Мы должны её опробовать, но мы не хотим, использовать черновой, нестабильный код вместе с работающим кодом. Что делать? Тут нам придёт на помощь git branch (ветка). Давайте создадим ветку нашего проекта, в случае если новая идея не будет работать, всему проекту не будет нанесён ущерб.

Просто запустив команду branch без каких-либо опций мы увидим список веток; на данном этапе у нас имеется лишь master ветка, с которой начинается любое хранилище git. Для создания новой ветки, добавьте имя новой ветки после команды.

Создавая новую ветку, вы не будете переключены на неё автоматически. Обратите внимание, что наш терминал всё ещё показывает (master). Тут нам пригодится верный товарищ веток - команда git checkout.

Git Branch

(Хитрость: вы можете создать ветку и сразу на неё переключиться с помощью команды: git checkout -b название ветки). Как вы уже возможно заметили, теперь мы находимся на ветке bigIdea. Давайте добавим код. Git status покажет результат нашей работы.

2 new files

Добавим изменения в коммит:

Довольно нового функционала на сегодня; вернёмся на ветку master; но перед этим, я хочу показать папку с нашим текущим проектом.

Files, branch bigIdea

Теперь переключитесь назад на ветвь master; вы знаете как это делать: git checkout master. Снова посмотрите на папку с нашим проектом.

Files, branch master

Нет, я ничего не делал; те два файла лишь часть ветки bigIdea, они не существуют на ветке master. Это работает не только для целых файлов, но также для самых небольших изменений внутри файлов.

git merge

Мы хорошо поработали на ветке bigIdea. По факту, после очередного коммита, нам кажется что новая идея выглядит здорово и мы готовы соединить её с веткой master. Как нам это сделать?

Команда git merge существует специально для этого. Испробуйте её пока находитесь на ветке master:

Это просто; теперь, всё что было на ветке bigIdea станет частью ветки master. На данный момент можно избавиться от ветки bigIdea, если хотите.

Мне нужно упомянуть, что если вы соединил (merge) ветку, git не позволит удалить её этой командой; вам нужно использовать заглавную опцию D. Это всего лишь меры предосторожности.

git log / gitk

На определённом этапе вам захочется взглянуть на историю коммитов. Это можно с легкостью сделать при помощи команды log.

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

  • the commit author (автор коммита)
  • the commit hash (хеш коммита)
  • the date and time (дата и время коммита)
  • the message (сообщение)
git log

Довольно информативно, но также немного сухо, не правда ли? Мы можешь сделать данный вывод немного удобнее с опцией --graph.

git log --graph

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

gitk

Это графический браузер хранилища. Тут можно осмотреться среди коммитов, увидеть любые изменения в каждом файле во время коммита и гораздо больше. (Можно заметить, что я добавил несколько коммитов перед слиянием - merging, лишь для того, чтобы сделать структуру древа более различимой).

GitHub

Теперь когда у вас имеются определённые знания Git за поясом, давайте рассмотрим части Git, предназначенные для сотрудничества, взаимодействия разработчиков друг с другом. Git - отличный способ поделиться своим кодом с окружающими и работать над одним проектом совместно. Есть несколько сайтов созданных для хранения Git репозиториев. Мы разберём лишь один: GitHub.

GitHub Home Page
GitHub Sign Up

Откройте страницу регистрации GitHub и создайте аккаунт. Вам понадобиться публичный SSH ключ, так что давайте создадим его! (Обратите внимание: вам не нужен ключ при регистрации; его можно добавить позже).

Откройте терминал и введите следующее:

ssh

Опция t указывает тип, а опция C добавляет комментарий, обычно это адрес вашей электронной почты. Далее будет задан вопрос куда сохранить ключ; достаточно нажать enter (файл будет сохранён в папку по умолчанию). После этого, дважды введите ключевую фразу. Теперь у вас есть ключ; давайте добавим его на GitHub.

Сперва скопируйте ключ из файла; терминал должен был сообщить место нахождение ключа, который был сохранён; откройте файл, скопируйте ключ (осторожно, не добавляйте новых строк или пробелов). Откройте страницу вашего аккаунта GitHub, прокрутите до места где указано SSH Public Keys, и нажмите "Add another public key (добавить публичный ключ)". Скопируйте ваш ключ и сохраните его. Теперь всё готово! Можно проверить аутентификацию, запустив:

Вам будет задан вопрос о ключевой фразе; чтобы не печатать это каждый раз, как вы подключаетесь к GitHub, данный процесс можно автоматизировать. Я могу рассказать как это сделать, но скорее всего данная инструкция окажется плагиатом страницы со справкой GitHub, там это всё уже описано.

Git Clone

Теперь вы можете работать с GitHub; давайте скачаем проект. Как насчёт jQuery? Если открыть проект jQuery на GitHub, вы обнаружите ссылку для git clone. Запустите:

git clone

Тем самым, на вашем компьютере, будет создана папка jquery и туда будет скопирован весь репозиторий с кодом jquery. Теперь у вас есть вся история проекта; посмотрите её с помощью gitk --all.

git push

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

Create New Repository

Откройте папку с проектом в терминале и запустите следующее:

Слово remote указывает на удалённое хранилище, репозиторий вашего проекта. В данном случае мы даём название удалённому хранилищу - origin, и указываем приватную ссылку для клонирования. Очевидно, что вам придётся заменить мою ссылку из примера своей. Теперь проект знает куда ему отправиться.

Git push

Таким образом ветка master будет отправлена в удалённое хранилище origin, после чего ваш проект будет доступен всему миру! Отправляйтесь на страницу проектов, там вы найдёте ваш проект.

GitHub Project

git pull

Есть вероятность, что вы окажитесь, так сказать, на другом конце проекта: вы будете участником (contributor), а не его владелецем (owner). Когда владелец отправляет новый коммит в хранилище, используйте git pull, чтобы получить соответствующие изменения, обновления. Вообще git pull представляет из себя комбинацию инструментов: он запускает git fetch (получает изменения) и git merge (проводит слияние с текущей копией проекта).

Всё готово!

Есть ещё много информации к изучения, касательно Git; надеюсь вы узнали достаточно команд, чтобы более продуманно работать со следующим проектом. Не останавливайтесь; изучите ссылки ниже, чтобы стать мастером Git!


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.