Библиотека сайта rus-linux.net
Руководство по контролю версий с использованием Git
Оригинал: Master version control with Git – tutorialАвтор: Richard Smedley
Дата публикации: 30 November 2014
Перевод: Н.Ромоданов
Дата перевода: декабрь 2014 г.
Git освоить довольно легко, но, поскольку мы расскажем не только о том, "что делать", но и о том "почему", вы узнаете гораздо больше и разберетесь не только со списком команд, но и с тем, что лежит глубже.
Git стал популярным настолько быстро, что можно было легко пропустить, почему им следовало бы пользоваться в повседневном кодировании (и написании статей). Мы намереваемся быстро разобраться, почему Git является таким особенным, и как его использовать - и мы надеемся вернуться к Git в ближайшие месяцы для того, чтобы рассказать о других сферах приложения, в которых Git может помочь вам с организацией дел.
Git является распределенной системой контроля версий, написанной Линус Торвальдсом после того, как из-за фиаско с BitKeeper в пректе ядра Linux возникла необходимость в новом хранилище данных. Теперь, благодаря GitHub и десятку других популярных репозиториев, в которых Git используется как социальное хранилище, а также средство совместного использования кода, он становится именно тем, что по умолчанию выбирается в новых проектах в качестве средства распределенного контроля версий и управления исходным кодом.
В персональных проектах, для которых не требуется центральный репозиторий, Git, используя различные ветки, применяется, главным образом, для отслеживания изменений и экспериментирования в вашем проекте с различными приемами, предоставляя вам возможность либо сливать изменения с проектом, либо выполнять их откат.
Чтобы действительно получить преимущества от использования Git, вам нужно не только знание тех несколько команд, которые можно взять из шпаргалки, но и понимание того, как все работает. Поэтому мы по ходу дела рассмотрим ряд приемов, которые облегчают использование Git, а затем двинемся дальше.
Подключаемся к любому проекту со свободным исходным кодом, в котором есть репозиторий Git
Ресурсы
Базовые знания по использованию командной строки
Пошаговые инструкции
Шаг 01: Проект, любой проект
Система Git управляет проектами, состоящими из файлов, - это не только код, но все начиная от набора карточек с рецептами и до вполне конкретного исторического романа, который вы пишете под псевдонимом.
Шаг 02: Установка
Естественно, в вашем дистрибутиве есть легко устанавливаемый двоичный файл. В большинстве дистрибутивов отдельно есть пакеты, предназначенные для преобразований из Git в Subversion, графический интерфейс, средства визуализации дерева релизов и прочее. Для того, чтобы у вас был очень полный комплект документации в формате HTM, установите пакет git-doc .
Шаг 03: Кто я?
Первоначальная конфигурация состоит в выполнении нескольких команд git config –global, с помощью которых ваши данные будут записаны в файл ~/.gitconfig. Без переключателя -global, команда git config сделает запись в файл ./.gitconfig так, что у вас есть возможность настраивать различные иедивидуальные репозитории.
Шаг 04: Дерево, прежде всего
Это те репозитории, которые создаются там, где находится ваш код; перейдите в каталог проекта и инициализируйте свой ваш первый репозиторий с помощью следующей команды:
git init
Будет создан каталог .git: теперь у вас есть рабочее дерево и теперь вы готовы к фиксации изменений в репозитории. Инициализация в каждом репозитории выполняется только один раз.
Шаг 05: Подготовка данных
Теперь, когда у вас есть рабочий репозиторий, давайте воспользуемся следующей командой:
git add
... которая поместит данные в область подготовленных данных. Если в качестве аргумента указать '.', то операция будет выполнена рекурсивно (т.е. включая и подкаталоги). Теперь мы воспользуемся командой коммит и, наконец, поместим в репозиторий наш код, который будет отслеживаться системой Git.
Примечание переводчика:
В проекте, использующем Git, есть три важных компонента: каталог Git'а (Git directory), рабочий каталог (working directory) и область подготовленных файлов (staging area). Команда git add помещает данные в область подготовленных данных. Т.е. помещение данных в репозитарий происходит за два шага - сначала данные подготавливаются, т. е. помещаются в область подготовленных данных, а только затем отдельным шагом закоммитчиваются в репозитории. Это важное и очень удобное отличие системы Git от многих других систем контроля версий.
Шаг 06: Статус
Если мы вернемся обратно и напишем еще немного кода, а затем попросим Git сообщить о статусе, он сообщит нам, что для того, чтобы добавить изменения в проект, мы должны выполнить некоторые действия, которые еще не сделаны (т. е. выполнить операцию коммит). На практике считается правильным выполнять коммит часто. В конце концов, Git это ваше инструментальное средство управления исходным кодом, так разрешите ему им управлять.
Шаг 07: Где я был?
Если вы вообще не закоммитили изменения, то можно воспользоваться командой git status и увидеть, какие именно изменения вы сделали, когда, например, воспользовались туннелированием через Rails, вносили изменения в формы, контроллеры и вспомогательные файлы. Что изменилось в этих файлах можно посмотреть с помощью команды git diff.
Шаг 08: Отмена подготовки данных
Двухэтапный процесс коммита позволяет на промежуточном этапе изменить свое решение - так что если вы добавили файл, который отредактировали, но не все-таки не хотите его коммитить, то с помощью команды ...
git reset HEAD имя_файла
... просто удалите его из области подготовленный файлов.
Шаг 09: Варианты
Если вы подготовили для коммита совершенно новый файл, а затем выполнили команду
git rm --config имя_файла
… то для того, чтобы удалить этот файл, лучше всего использовать параметр -rm, т. к. при удалении с параметром -cached файл будет просто удален из области подготовленных файлов. В этом случае команда git status, указанная для файла, который мы удалили, покажет изменение состояния со stage (подготовлен) на untracked (неотслеживаемый).
Шаг 10: Коммитим объекты
Со временем будет понятно, что в Git происходит за кулисами. Каждый объект, к которому применяется операция коммит, содержит снимок файлов, ссылки на родительские объекты этого коммита и хэш SHA-1 (40-символьный хэш частей, которые были закоммитчены), причем все это однозначно идентифицирует конкретный коммит.
Шаг 11: HEAD master
Последний объект, к которому применяется коммит, это объект HEAD, а его предок — ссылка HEAD^, которая указывает на самый последней коммит в текущей ветке. По умолчанию у нас есть только ветвь master, но мы для того, чтобы иметь возможность с исходными версиями файлов проекта, можем создавать новые ветки от любых ранее закоммитченных объектов.
Шаг 12: Ветви
Команда git checkout позволит вам использовать другую ветвь. Прежде, чем использовать команду checkout для переключения ветвей, важно закомммитить ваши изменения. В противном случае могут возникнуть некоторые странности, например, можно потерять все изменения, занесенные в ветвь, и т.п. ...
Шаг 13: Закоммитчиваем изменения
Прежде, чем вы смените ветвь, Git в случае, если вы забыли сохранить изменения, выдаст вам подсказку. Для того, чтобы сознательно удалить сделанные вами и еще незакоммитченные изменения, вы можете использовать следующую команду:
git checkout – имя_файла
"На коммиты затрачивается мало ресурсов", поэтому выполняйте коммит в свою собственную отдельную ветвь
Шаг 14: Код релиза
В зависимости от вашей команды и используемой вами стратегии вы можете использовать столько ветвей, сколько вам необходимо. Самый простой подход — использовать ветвь master только для релиза, а дополнительные изменения до тех пор, пока вы не будете готовы слить из обратно в новый релиз, закоммитчивать в ветку, предназначенную для разработок.
Шаг 15: Отслеживаем, что изменено
Иногда, если просто следить за тем, что вы только что сделали, то поможет избежать ошибок, характерных человеческому мышлению. Что это за небольшое изменение, которое, кажется, кто-то нарушил? Команда
git diff
- это ваш друг, который покажет вам, что было изменено, но еще не было подготовлено с помощью команды git add для коммита в Git . Это касается не только файлов (что можно сделать командой git status), но и каждой удаленной, добавленной или отредактированных строки. Команда
git diff --cached
покажет изменения, которые были уже подготовлены, но еще не были закоммитчены.
К числу других полезных команд в Git относится команда
git diff HEAD^
... который показывает изменения, сделанные от момента совершения предшествующего коммита и до последнего коммита.
Шаг 16: Журналы операций над ветвью
Чтобы отследить коммиты в вашей текущей ветки, надо просто для этой ветви выполнить команду git log. Будет показана цепочка объектов, закоммитченных с момента инициализации ветви. Если вы хотите удостовериться в том, что ваш коллега пользуется той же самой ветвью, то лучше всего использовать несколько первых цифр хэша SHA-1, которые указаны в журнале для объекта HEAD.
Шаг 17: Конфликтующий код
Git делает слияние ветвей простой операцией, но в случае, если слияние невозможно, он также сообщих вам, где возник конфликт — обычно это происходит там, где в обе ветви в одном том же месте были внесены изменения. Для того, чтобы поддерживать ваше дерево разработок в актуальном состоянии, вы также можете слить со своей ветвью ветвь master.
Шаг 18: Убираем все лишнее
Теперь, прежде, чем вы начнете работать над проектом вместе с другими разработчиками, укажите в файле .gitignore ваш пароль и особенности настройки докальной базы данных, а также файлы, созданные в режиме автосохранения в вашем текстовом редакторе, заметки, касающиеся только вас, а также все то, что не относится к проекту , но находится в каталоге.
Шаг 19: Получаем обновления
Команда git pull origin master дает возможность получить последнюю копию содержимого ветви merge из удаленного репозитория и слить ее с вашей локальной копией. В результате в вашей локальной копии будут объединены обновления, сделанные другими, с вашими собственными изменениями. Вы можете это выполнять достаточно часто или только после тех изменений, которые касаются именно вас.
Шаг 20: Получаем данные
Команда git fetch берет изменения из удаленного репозитория, но слияние данных не выполняет. Создается локальная копия, над которой вы можете продолжать работать, поэтому для того, чтобы избежать каких-либо проблем, вызванных конфликтами, которые воможно предвидеть, вы можете еще до слияния выполнить проверку с помощью команды git diff и внести изменения
Шаг 21: Отсылаем код
Команда git push используется для отсылки изменений в удаленный репозитории. Когда используется параметр push.default в вашей конфигурационной настройке или указываются аргументы в команде (что проще), отсылка выполнена не будет в случае, если имя ветви удаленного репозитория будет отличаться от имени ветви в ващем локальном репозитории.
Шаг 22: Алиасы, сберегающие время
Такие алиасы, как, например,
gc для команды git commit, ga f для команды git add –all и gst для команды git status
Сократят количество нажатий на клавиши для те, кто этими командами пользуется часто. Вы, возможно, пожелаете добавить свои собственные предпочитаемые алиасы в ваш файл .bashrc или скачаете одну из коллекций макросов, которые можно найти на GitHub.
Шаг 23: Попробуйте команды
Возьмите некоторый код и начните опробовать команды. Команду git clone можно использовать для того, чтобы сделать локальную копию всего репозитория Git в полном объеме, включая и все ветви (их можно увидеть с помощью команды git branch -r). Ваше внимание также привлекут кнопки "Fork me on GitHub" (мой форк на GitHub).
Шаг 24: Переходим к использованию Git
Теперь, вооружившись некоторым пониманием того, что представляет собой Git, двигайтесь дальше и распространяйте свой код! В сети есть много учебников по расширенным возможностям использования Git, а мы в нашем издании надеемся вернуться к этой теме в ближайшее время для того, чтобы вам показать, насколько универсально в использовании творение Торвальдса!