Статьи

Простое управление версиями с помощью Git

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

Git — инструмент управления открытым исходным кодом; он был создан Линусом Торвальдсом, когда он собирал ядро ​​Linux. Из-за этих корней это должно было быть действительно быстро; что это так, и легко освоиться. Git позволяет вам работать над своим кодом с уверенностью, что все, что вы делаете, обратимо. Это позволяет легко экспериментировать с новыми идеями в проекте и не беспокоиться о том, чтобы что-то сломать. Притча о Git Тома Престона-Вернера — отличное введение в термины и идеи Git.

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

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

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

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

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

1
2
3
git config —global color.diff auto
git config —global color.status auto
git config —global color.branch auto

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

Git Init

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

Мы начали работать над нашим приложением.

файлы

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

. просто значит добавить все. Вы могли бы быть более конкретным, если хотите.

Теперь, когда мы подготовили наши файлы, давайте передадим их. Это делается с помощью команды

Это берет все файлы в нашей области подготовки и помечает этот код как точку в истории нашего проекта. Если вы не добавите какие-либо параметры в команду выше, вы получите что-то вроде этого.

напор

Каждый коммит должен иметь сопроводительное сообщение, чтобы вы знали, почему этот код был зафиксирован. Этот редактор позволяет вам написать ваше сообщение, а также посмотреть, что находится в этом коммите. На изображении выше вы можете видеть, что этот коммит состоит из четырех новых файлов. Редактор, который вы используете для написания сообщения — Vim; если вы не знакомы с vim, знайте, что вам нужно нажать i (для вставки), прежде чем вы сможете напечатать сообщение. На приведенном выше снимке я добавил сообщение «Initial Commit». После того, как вы напишите свое сообщение, нажмите escape и наберите: wq (чтобы сохранить и выйти). Затем вы увидите, что вы совершаете.

Совершить последствия

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

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

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

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

статус, чистый

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

Статус, не чистый

Обновление разделено на две категории: «измененные, но не обновленные» и «неотслеживаемые файлы». Если мы запустим

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

Теперь запущенный git status показывает нам чистый рабочий каталог.

Вот сценарий: мы счастливо работаем над нашим проектом, когда вдруг у нас появляется грандиозная идея. Эта идея настолько революционная, что она кардинально изменит наш проект. Мы должны попробовать, но мы не хотим добавлять этот небезопасный, первый черновой код в наш проверенный и настоящий код. Что делать? Вот где Git Branch будет очень полезен. Давайте развернем наш проект так, чтобы, если наша большая идея не сработала, не было никакого вреда.

Просто запустив команду ветки sans , вы увидите список наших веток; сейчас у нас есть только основная ветвь, с которой начинается любой git-репозиторий. Чтобы фактически создать новую ветку, добавьте имя вашей новой ветви после команды.

Когда вы создаете новую ветку, вы не переключаетесь на нее автоматически. Обратите внимание, что наш терминал все еще говорит (мастер). Здесь мы используем ветки товарищ команды git checkout .

Git Branch

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

2 новых файла

Давайте передадим наши изменения:

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

Файлы, ветка bigIdea

Теперь переключитесь обратно на главную ветку; Вы знаете, как: Git Checkout Master . Посмотрите на нашу папку проекта еще раз.

Файлы, ветка мастер

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

Итак, мы работали над этой веткой bigIdea в наше свободное время. На самом деле, после очередного коммита это выглядит так мило, что мы решили, что достаточно, чтобы присоединиться к основной ветке. Так как нам это сделать?

Команда git merge создана именно для этой цели. Находясь в основной ветке, попробуйте:

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

1
git branch -d bigIdea

Я должен отметить, что если вы не слили ветку, Git не позволит вам удалить ее с помощью этой команды; вам нужно использовать заглавную букву D в опции. Это всего лишь мера безопасности.

Возможно, вы захотите взглянуть на историю ваших коммитов в какой-то момент вашего проекта. Это легко сделать с помощью команды log.

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

  • автор коммита
  • хеш коммита
  • дата и время
  • сообщение
мерзавец

Определенно информативно, но довольно сухо, нет? Мы можем немного прояснить ситуацию с помощью опции графика.

git log --graph

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

gitk

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

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

Домашняя страница GitHub
GitHub Зарегистрироваться

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

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

SSH

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

Сначала получите ваш ключ из файла; терминал скажет вам, где хранится ключ; откройте файл, скопируйте ключ (будьте осторожны, чтобы не добавлять новые строки или пробелы). Откройте страницу своей учетной записи GitHub, выделите Открытые ключи SSH и нажмите «Добавить еще один открытый ключ». Вставьте свой ключ и сохраните его. Тебе хорошо идти! Вы можете проверить свою аутентификацию, выполнив это:

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

Итак, теперь вы настроены с GitHub; давайте возьмем проект. Как насчет jQuery? Если вы зайдете в проект jQuery GitHub , вы найдете URL-адрес git clone. Запустите это:

мерзкий клон

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

Допустим, вы работали над проектом, управляя им с помощью git локально. Теперь вы хотите поделиться этим с другом или с миром. Войдите в GitHub и создайте новый репозиторий. GitHub предоставит вам общедоступный URL-адрес клонирования (для тех, кто хочет загрузить ваш проект) и персональный URL-адрес клонирования (для себя).

Создать новый репозиторий

Затем вернитесь к своему проекту в терминале и приведите это в движение:

Удаленный — это хранилище проекта в удаленном месте. В этом случае мы даем этому пульту имя источника и передаем его нашему частному URL-клону. (Очевидно, вам придется заменить мой URL своим собственным.) Теперь, когда проект знает, куда он идет. , ,

Git push

Это выдвигает основную ветвь к исходному удаленному. Теперь ваш проект доступен всему миру! Вернитесь на страницу своего проекта и посмотрите свой проект.

GitHub Project

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

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

  • Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для получения лучших учебных материалов по веб-разработке.