Статьи

Контроль версий Git в командной строке для разработчиков iOS

Это случилось со всеми нами: мы что-то изменили в нашем коде, и вдруг все кажется «сломанным». Это когда контроль версий является благом — если вы знаете, как его использовать. В этом уроке мы узнаем, как использовать Git из командной строки.

Xcode и другие современные IDE имеют базовые опции для Git, встроенные в их графический интерфейс пользователя, но вы получаете высокоуровневый контроль над своим репозиторием (Git-репозиторий) только из командной строки. Если вы занимаетесь продвинутым программированием или управлением Git, важно быть уверенным в командной строке. Если вы никогда раньше не использовали командную строку, вы можете проверить мой другой учебник по теме:

  • макинтош
    Основы командной строки и полезные трюки с терминалом

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

Есть много преимуществ и вариантов использования для контроля версий. Например, просматривая изменения (« фиксирует ») вашего проекта, вы можете определить, кто написал какой-то конкретный фрагмент кода и почему. Вы также можете откатить любые изменения, которые были найдены с ошибкой или нарушить функциональность.

На сегодняшний день наиболее часто используемой системой контроля версий является Git, поэтому мы рассмотрим ее в этом посте. Имейте в виду, что существуют и другие широко используемые системы, например, SVN и Mercurial.

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

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

Вот несколько примеров: GitHub, Bitbucket, GitLab и Coding, и они широко используются разработчиками по всему миру. Я и многие другие использую GitHub, потому что он содержит огромное количество проектов с открытым исходным кодом. Репозитории GitHub по умолчанию являются общедоступными, но вы можете создавать частные репозитории за ежемесячную плату.

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

Вот как должна выглядеть среда IDE перед тем, как вы наконец создадите свой проект (когда вам нужно выбрать место для хранения проекта):

Рисунок 1 Создание приложения

Убедитесь, что на моем Mac установлен флажок « Создать репозиторий Git» , так как это обеспечит внутреннюю репо вашего проекта. Позже, если вы решите использовать систему управления репозиторием, вы сможете отправить весь этот код, и каждый сделанный вами коммит будет отображаться.

Чтобы добраться до командной строки, вам нужно открыть Терминал. Вы можете сделать это одним из двух способов. Вы можете открыть Launchpad , и там вы можете найти значок терминала в папке Other на первой странице Launchpad. Или вы можете нажать Command-Space на клавиатуре и найти терминал в центре внимания .

После того, как вы откроете терминал, вы должны увидеть что-то вроде следующего.

Рисунок 2 Пустое окно терминала

Это называется «командная строка» — вы увидите текущий каталог, затем ваше имя пользователя и $ .

Все в порядке! Теперь вы готовы узнать, как использовать контроль версий в Терминале.

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

  • help — как следует из названия, вы можете ввести эту команду в Терминал, чтобы получить список различных команд.
  • man <command name> подобно предыдущей команде, эта команда сообщает вам, что именно делает команда (и предоставляет вам полную документацию) без необходимости искать ее в Google.

Управление файлами

  • ls перечисляет все содержимое в текущем каталоге. Эта команда пригодится, если вы не хотите использовать Finder для просмотра файлов — вы можете просто перечислить их с помощью этой команды в вашем терминале.
  • cd <directory name> — эта команда используется для изменения каталогов. Если вы пишете один только cd , вы выйдете из текущего каталога. После использования ls (чтобы увидеть каталоги), вы можете написать имя каталога, в который вы хотите войти.
  • defaults <setting to change> — эта команда используется для изменения системных настроек по умолчанию, некоторые из которых нельзя изменить без использования терминала.
  • caffeinate — как следует из названия, эта команда используется для предотвращения затемнения, выключения или сна вашего Mac. Чтобы закончить это, все, что вам нужно сделать, это нажать Control-C .
  • vim <file name> — это один из моих любимых. Вы можете редактировать текстовые файлы, используя TextEdit по умолчанию (или любой графический редактор на основе графического интерфейса), но vim — это в основном текстовый редактор командной строки, то есть он полностью работает в терминале.
  • ping <URL or IP Address> — эта команда позволяет проверить время отклика сервера на указанный URL-адрес или IP-адрес. Это может быть не полезно для каждого разработчика, но это приятно знать.
  • sudo <action to perform> — способ переопределить привилегии вашего пользователя и стать суперпользователем компьютера. Вам будет предложено ввести пароль администратора при его использовании.

Теперь, когда вы увидели некоторые базовые команды терминала, давайте узнаем о различных вещах, которые вы можете делать с Git. Я не буду освещать их все, но я научу вас основным из них, которые вы будете использовать в повседневной разработке. Если вам когда-нибудь понадобится дополнительная информация, вы можете просто запустить git help в своем терминале для получения подробной информации, а если этого недостаточно, для полной документации, вы можете запустить man git чтобы получить страницу руководства.

Вот как выглядят страницы справки:

Рисунок 3 Страница справки
  • git clone {remote-repo-link} если вы хотите клонировать репозиторий из службы управления репозиторием, вы можете использовать эту команду вместе с URL-адресом, чтобы получить локальную копию на вашем компьютере.
  • git init если вы создаете новый репозиторий из существующей папки, вы можете использовать эту команду. Это инициализирует текущую папку, чтобы быть новым репо. Обычно вы делаете это, когда создаете проект впервые.
  • git status сообщает, какие файлы в вашем рабочем каталоге были изменены. Если вы изменили файлы, возможно, настало время сделать коммит!
  • git commit -am "{helpful commit message}" коммите git commit -am "{helpful commit message}" — когда вы внесли некоторые изменения в свой проект (например, когда вы выполнили простую функцию или исправили ошибку), вы должны зафиксировать свое изменение. Обязательно предоставьте краткое и четкое сообщение о коммите, так как это поможет другим разработчикам понять, что вы сделали и почему.
  • git add {filename} или git add --all если вы добавляете новый файл в свое хранилище, вам нужно будет добавить его в хранилище, прежде чем его зафиксировать. Используйте команду add .
  • git branch {branch-name?} — с помощью этой команды вы можете либо перечислить текущие ветви, либо создать новую.
  • git merge {branch-name} объединить текущую ветку с указанной веткой. Это объединит код в текущей ветви с именованным.
  • git checkout {branch-name} переключиться на указанную ветку. Это просто отложит текущую ветвь в сторону и сделает другую ветвь активной.
  • git push обновляет хранилище в системе управления хранилищем. После того, как вы закончили вносить изменения и убедились, что ваш код работает хорошо, вы можете отправить свой код, чтобы другие участники могли видеть код и извлекать его.
  • git pull обновляет вашу локальную рабочую копию хранилища, чтобы отразить последние обновления, которые были отправлены в систему управления хранилищем. Это хорошая идея, прежде чем вносить какие-либо изменения, если вы работаете в команде.

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

Теперь давайте рассмотрим несколько примеров использования Git из командной строки с проектом Xcode, который мы создали ранее в этом руководстве. Обратите внимание, что мы будем использовать приведенные выше команды терминала, поэтому убедитесь, что вы продолжаете ссылаться на них или запоминаете их.

Прежде чем мы начнем, вам нужно перейти в каталог проекта с помощью команд, упомянутых выше (подсказка: используйте команды cd и ls ). Когда вы окажетесь там, запустите ls и убедитесь, что у вас есть что-то вроде этого:

Рисунок 4 Навигация по файлам

Та-да! Теперь вы находитесь в каталоге вашего проекта и готовы сделать с вашим проектом все, что вам нужно. Просто следуйте инструкциям и ответвлениям.

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

Для начала внесите изменения в проект Xcode. Для себя я просто добавлю следующую строку фиктивного кода в мой viewDidLoad() :

1
let foobar = «foo»

После того, как вы закончили добавлять (или вычитать) одну или две строки кода, вы готовы проверить состояние вашего проекта. Для этого вставьте следующую команду (без приглашения $ ) в окно терминала:

1
$ git status

Вы увидите что-то вроде этого:

Рисунок 6 Модифицированный файл

Файл, который вы изменили, выделен красным, что говорит о том, что в нем есть незафиксированные изменения.

Если вы хотите зафиксировать только определенные файлы, вы можете сделать это, используя «промежуточную область», в которой будут зафиксированы только эти файлы. Чтобы добавить все измененные файлы в «промежуточную область», все, что вам нужно сделать, это запустить следующую строку кода:

1
$ git add -A

Флаг -A который вы видите, означает, что все файлы, которые вы изменили, будут добавлены ( -A для всех, и вы также можете написать git add --all ).

Чтобы увидеть, что ваши файлы готовы к фиксации, просто запустите следующее:

1
$ git status

Вы увидите что-то вроде этого:

Рисунок 7. Файл промежуточной области

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

Наконец, чтобы окончательно зафиксировать ваш код, все, что вам нужно сделать, это запустить следующую команду в своем терминале, и между кавычками добавить сообщение.

1
$ git commit -m «My very first commit.»

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

Теперь вы сделали свой первый коммит! Вы на правильном пути, чтобы сделать ваш код проще и безопаснее.

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

По умолчанию вы находитесь в том, что мы называем «основной» веткой. Это основная ветвь, в которой, в конце концов, все должно появиться. Лучшая практика, особенно работа с командой, заключается в работе над новыми основными функциями в их собственных ветвях, которые после завершения будут объединены с master.

Чтобы попрактиковаться в работе с ветками, давайте создадим новую ветку. Для этого выполните следующую команду:

1
$ git branch my-first-branch

Вы можете назвать ветку как хотите.

Чтобы увидеть новую ветку, вы можете набрать:

1
$ git branch

Когда вы выполните эту команду, вы увидите что-то вроде этого:

Рисунок 8 Ветви

Обратите внимание, что вы можете видеть две ветви: master и my-first-branch (или как бы вы ни назвали свою ветку). Кроме того, вы увидите, что в master ветви есть звездочка, которая указывает, что вы в данный момент находитесь в этой ветви.

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

Попробуйте это с помощью следующей команды:

1
$ git checkout my-first-branch

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

Рисунок 9 Переключенные ветви

Теперь вы перешли на эту ветку, и она должна быть с чистого листа. Чтобы подтвердить это, запустите git status чтобы проверить, есть ли какие-либо измененные файлы.

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

Сделайте еще одно изменение в проекте Xcode. Для себя я просто добавлю следующую строку фиктивного кода в мой viewDidLoad() :

1
let gooey = «fooey»

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

После этого снова запустите следующую строку кода:

1
$ git status

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

К настоящему времени вы должны были зафиксировать код, поэтому давайте подготовимся к объединению двух ветвей. Сначала запустите следующую команду:

1
$ git checkout master

Эта команда переключается на master ветку, чтобы подготовиться к объединению с другой веткой, которую мы создали. Наконец, для объединения выполните следующую команду:

1
$ git merge my-first-branch

Вы должны получить подтверждение, которое выглядит так:

Рисунок 11 Слияние с Мастером

Теперь ваши изменения из функциональной ветви были объединены обратно в master. Если основная ветка изменилась с момента ее создания, Git попытается автоматически объединить изменения вашей ветки с основной. Если он не может сделать это автоматически, он предложит вам вручную разрешить любые конфликты.

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

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

Я надеюсь, что этот пост вселил в вас уверенность в использовании контроля версий на ежедневной основе. Если вы хотите узнать больше о Git, посмотрите наши анимированные обучающие видео здесь на Envato Tuts +.

  • Гит
    Основы Git: Филиалы
    Эд Вассерманн
  • Гит
    Основы Git: запросы GitHub Pull
    Эд Вассерманн
  • Гит
    Основы Git: три дерева
    Эд Вассерманн