Содержание

Шпаргалка Git для управления версиями файлов

Система управления версиями (Version Control System, VCS или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и многое другое.

Такие системы наиболее широко применяются при разработке программного обеспечения, для хранения исходных кодов разрабатываемой программы. Однако, они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов, в частности, они всё чаще применяются в САПР, обычно, в составе систем управления данными об изделии (PDM).

Что такое Git?

Git - Fast Version Control System - это система контроля версий, предназначенная для быстрой и эффективной работы над очень большими проектами; используется многими проектами с открытым исходным кодом, самым заметным из которых является ядро FAQ Linux. В git исходный код не хранится на одном центральном сервере, а распределён по нескольким серверам. Каждый рабочий каталог Git является полнофункциональным репозиторием с полным набором функций слежения за версиями, независимо от доступности сети или центрального сервера.

Наверно наиболее часто используемый транспортный протокол это SSH. Причина того в том что доступ по SSH уже есть на многих серверах, а если его нет, то его очень легко настроить. Кроме того SSH единственный из сетевых протоколов предоставляющий доступ и на чтение, и на запись. Два других сетевых протокола HTTP и Git в большинстве случаев дают доступ только на чтение, поэтому даже если они вам доступны, вам все равно понадобится SSH для записи. К тому же SSH протокол с аутентификацией, и благодаря его распространенности обычно его легко настроить и использовать.

SSH имеет множество достоинств. Во-первых, вы должны его использовать когда вам нужен авторизованый доступ на запись к вашему репозиторию через сеть. Во-вторых, SSH достаточно легко настроить ― демоны SSH распространены, многие системные администраторы имеют опыт работы с ними, и многие дистрибутивы поставляются с ними или утилитами для управления ими. Также, доступ по SSH безопасен ― данные передаются зашифрованными по авторизованным каналам. Наконец, также как и Git-протокол и локальный протокол SSH эффективен, делая данные перед передачей максимально компактными.

Недостаток SSH в том, что, используя его, вы не можете обеспечить анонимный доступ к репозиторию. Клиенты должны иметь доступ к машине по SSH, даже для работы в режиме только чтение, что делает SSH неподходящим для open source проектов. Если вы используйте Git только внутри корпоративной сети, то возможно SSH единственный протокол с которым вам придется иметь дело. Если же вам нужен анонимный доступ на чтение для ваших проектов, вам придется настроить SSH для себя, чтобы выкладывать изменения, и что-нибудь другое для других, для скачивания.

Следующий протокол ― Git- протокол. Вместе с Git поставляется специальный демон который слушает порт 9418 и предоставляет сервис схожий с протоколом ssh, но абсолютно без аутентификации. Чтобы использовать Git- протокол для репозитория, вы должны создать файл git-export-daemon-ok, иначе демон не будет работать с этим репозиторием, но следует помнить, что в протоколе отсутствуют средства безопасности. Соответственно любой репозиторий в Git может быть либо доступен для клонирования всем, либо не доступен никому. Как следствие обычно вы не можете отгружать изменения по этому протоколу. Вы можете открыть доступ на запись, но из-за отсутствия авторизации в этом случае кто угодно зная URL вашего проекта сможет его изменить. В общем это редко используемая возможность.

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

Недостатком Git-протокола является отсутствие аутентификации. Поэтому обычно не следует использовать этот протокол как единственный способ доступа к вашему проекту. Обычно он используется в паре с SSH разработчиков, имеющих доступ на запись, тогда как все остальные используют git для доступа на чтение. Кроме того это вероятно самый сложный для настройки протокол. Вы должны запустить собственно демон, не являющийся стандартным. К тому же ему необходим сервис xinetd или ему подобный, что не всегда легко сделать. Также для работы необходимо настроить фаервол, чтобы открыть нестандартный порт 9418, который обычно закрыт на корпоративных брандмауэрах. За крупными корпоративными фаерволами, этот неизвестный порт практически всегда заблокирован.

Последний доступный протокол ― HTTP. Прелесть протоколов HTTP и HTTPS в простоте их настройки. По сути, все что необходимо сделать ― поместить чистый репозиторий внутрь каталога с HTTP документами, установить обработчик post-update и все. Теперь, каждый имеющий доступ к веб-серверу на котором был размещен репозиторий, может его клонировать.

Варианты инсталляции Git сервера

Для управления пользовательским доступом при ssh- ключей можно использовать специальный скрипт/сервер — Git- хостинг, который будет встречать каждого виртуального пользователя при попытке доступа к Git хранилищу. Самые популярные Git хостинги это: gitosis и Руководство по инсталляции и использованию Gitolite. Первый написан на Синтаксис Python и более простой по возможностям, второй же написан на perl.

Клиенты Git

Примеры использования Git

Генерация версии приложения из ревизии

Software versioning - это процесс создания уникальных имен или номеров для различных версий продуктов программного обеспечения.

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

Управление тэг (git tag) для создания версии ПО

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

В git также представленные легковесные тэги (lightweight tags), состоящие только из имени и ссылки на коммит. Такие тэги, как правило, используются для упрощения навигации по дереву истории. Обычные тэги имеет смысл использовать для приложения к коммиту какой-либо информации, вроде номера версии и комментария к нему. Иными словами, если в комментарии к коммиту пишешь «исправил такой-то баг», то в комментарии к тэгу по имени «v1.0» будет что-то вроде «стабильная версия, готовая к использованию».

Пример работы с версиями:

Управление ветками (branch)

По традиции ветка master содержит официальную (стабильную) версию проекта. Для небольшого проекта можно предложить такую схему: имеется две основные ветки master и develop. Тогда в бранчах от master будут находится стабильные(замороженные) версии разрабатываемого проекта, на которые можно только налаживать багфиксы, но не расширять функциональные возможности создаваемого проекта. В бранчах от ветки develop будут разрабатываться новый функционал создаваемого продукта, фичи, которые по мере тестирования будут сливаться вместе, чтобы в конечном итоге залиться в мастер и стать следующем стабильным бранчем от master.

Ключ checkout переключает на выбранную ветку и обновляет рабочую директорию до её состояния, синтаксис

$ git checkout [имя ветки]

git add, git rm, git reset

git add позволяет внести в индекс — временное хранилище — изменения, которые затем войдут в коммит. Например

git rm одновременное удаление файлы из индекса и дерева.

git reset - откат состояния. Позволяет сбросить весь индекс или удалить из него изменения определенного файла.

У вас есть снимок файлов в текущей директории, созданный например так

$ git add .
$ git commit -am "Мой минорный backup"

Вы начинаете править файлы и в какой-то момент решили откатиться к предыдущей сохраненной версии. Это можно сделать так:

$ git reset --hard

Или до любого другого коммита.

# git reset --hard b0b9c22b1fc49b25a104e1dc2986172aece8b442
Если при этом были созданы новые файлы (без git add), их придется удалять вручную.
Если нужно вернуть конкретный файл в состояние до изменения используйте git checkout HEAD file а не git reset - EDITEDFILE

Настройка игнорирования файлов, директорий (.gitignore)

Файл .gitignore служит для настройки игнорирования файлов, готовые настроенные файлы доступны на Github A collection of .gitignore templates. Обычно .gitignore находится в корне проекта, но он может быть создан в каждой подпапке проекта со своими индивидуальными запросами.

Если вам нужно исключить из игнорирования файл или директорию используйте символ "!" и размешайте эти правила в конце файла gitignore. Пример .gitignore:

$ git help ignore
$ nano .gitignore
# Игнорировать файлы с расширением *.a и *.o
*.[oa]
# Игнорировать файлы moc_ и core
moc_*
*.core
# все html-файлы…
*.html
# все файлы заканчивающиеся на знак ~
*~
 
# Игнорировать папки
/backup/*
/other/*
/public_www/cache/*
/public_www/logs/*
/public_www/tmp/*
 
# Игнорировать файлы, кроме файла .keepdir
!.keepdir

Строки, начинающиеся с '#' считаются комментариев. Файлы .gitignore могут быть добавлены в репозиторий подобно другим файлам (просто запустив git add .gitignore, как обычно).

Если игнорируемые файлы уже есть в репозитории - обязательно почистите кеш репозитория:

git rm -r --cached .
git add .
git commit -am ".gitignore tune. Clean."

git commit

$ git commit -am 'Добавить изменения к проекту'

Если нужно изменить описательную запись в журнале для последнего коммита запустите команду

$ git commit --amend

Если забыли добавить новый файл в последний коммит нужно запустить git add и команду выше:

$ git add .
$ git commit --amend

Если нужно добавить еще немного изменений в последний коммит запустите, после внесения изменений в файлы проекта:

$ git commit --amend -a

git log

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

git diff

Manual Page: git-diff

gitconfig

git остальные команды