Git: документация – часть 1: создание репозитория

Автор: | 02/06/2015

git-logoПеревод замечательной документации от Atlassian.

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

В этой документации будут рассмотрены основные команды Git. В первой части – “Создание репозитория” – описаны утилиты, необходимые для начала работы с новым проектом под контролем Git.

git init

Команда git init создаёт новый репозиторий. Её можно использовать для превращения уже существующего проекта в Git-репозиторий – или для создания нового. Большинство других команд Git не смогут работать вне проинициализированного репозитория, поэтому как правило – это первая команда при запуске нового проекта.

Выполнение команды git init создаёт каталог .git в корне проекта, который будет содержать все необходимые метаданные для репозитория. Сам каталог проекта остаётся без изменений (в отличии от SVNGit не создаёт каталог .git в каждой вложенной дириектории проекта).

Использование

git init

Превращает текущий каталог в репозиторий Git. В текущем каталоге создаётся каталог .git, и даёт возможность записывать изменения проекта.

git init <directory>

Создаёт пустой репозиторий Git в казанной директории. Запуск этой команды создаст каталог <directory> с вложенным каталогом .git.

git init --bare <directory>

Инициализирует пустой репозиторий Git, но без рабочего каталога. Общие репозитории всегда должны создаваться с флагом --bare (ниже мы рассмотрим этот момент). Общепринято, что имена каталогов репозиториев, проиницилизированных с --bare заканчиваются на .git. Например, неизолированный (bare) репозиторий с именем my-project должен храниться в каталоге с именем my-project.git.

Обсуждение

По сравнению с SVN – команда git init предоставляет очень простой способ создания нового проекта под контролем системы VSC (Version Control System). Git не требует от вас создания репозитория, импорта файлов и загрузки рабочей копии. Всё, что вам надо сделать – это перейти в каталог вашего проекта и выполнить git init – вы сразу получите полнофункциональный репозиторий Git.

Однако, во многих проектах git init требуется выполнить только для центрально репозитория – разработчики как правило не используют git init для создания локальных репозиториев. Вместо этого – они используют git clone для копирования имеющего репозитория на их локальные рабочие станции.

Неизолированные репозитории

Флаг --bare создаёт репозиторий, который не содержит рабочей директории, тем самым делая невозможным редактирование файлов и выполнения коммитов в этот репозиторий. Общие репозитории  всегда должны быть созданы как “незолированные”, так как загрузка бранчей в не-неизолированный репозиторий может привести к перезаписи изменений. Вы можете представлять себе флаг --bare как метку для репоизтория-хранилища, в отличии от репозитория для разработки.

01

Пример

Так как самым подходящим способом создания локальной копии проекта является git clone – то git init обычно использутеся для создания центрального репозитория:

ssh <user>@<host>
cd path/above/repo
git init --bare my-project.git

Сначала вы подключаетесь по SSH к серверу, который будет хранить ваш репозиторий. Затем – вы переходите в каталог, в котором будет храниться проект. И в последним действием – вы используете --bare для создания общего репозитория. Далее разработчики могут выполнить git clone ssh <user>@<host>/path/above/repo/my-project.git, что бы создать локальную копию на их машинах.

git clone

Команда git clone копирует существующий репозиторий Git. Её работа схожа с svn checkout, за исключением того что “рабочая копия” является полноценным репозиторием Git – у него своя история, он сам управляет файлами, и полностью изолирован от центрального репозитория.

Для удобства – git clone автоматически создаёт подключение к удалённому репозиторию, которое называется origin. Это позволяет  слёгкостью “общаться” с центральным хранилищем.

Использование

git clone <repo>

Клонирует репозиторий, расположенный по пути <repo> на локальную машину. <repo> может быть расположен как на локальной файловой системе – так и на удалённом сервере, с доступом по HTTP(S) или SSH.

git clone <repo> <directory>

Клонирует репозиторий, расположенный по пути <repo> на локальную машину в каталог <directory>.

Обуждение

Если проект уже создан в центральном репозитории – git clone наиболее распространённый способ для пользователей получить свою рабочую копию этого проекта. Как и git initgit clone обычно выполняется один раз – после того как разработчик получил своб копию проекта все операции по контролю версий и совместная работа выполняются в локальном репозитории.

Свзять репозиторий-к-репозиторию (repo-to-repo)

Важно понимать, что смысл понятия “рабочая копия” у Git очень отличается от рабочий копии, которую вы получаете после загрузки кода из SVN. В отличии от SVNGit не делает различий между рабочией копией кода и кодом в центральном репозитории – оба являются полноценными репозиториями Git.

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

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

Пример

Пример ниже дмеонстрирует, как получить копию данных из центрального репозитория, который хранится на сервере с именем example.com с помощью SSH и используя имя пользователя john:

git clone ssh://[email protected]/path/to/my-project.git
cd my-project
# начинайте работу над проектом

Первая команда инициализиурет новый Git репозиторий в каталоге my-project на локальной машине, и загружает в него содеоржимое центрального репозитория. Затем вы можете перейти в этот каталог и начать редактировать файлы, коммитить изменений, работать с другими репозиториями. Обратите внимание, что расширение .git не доабвляется к загруженному репозиторию – тем самым показывается его статус “неизолированного” репозитория (non-bare).

git config

Команда git config позволяет вам настроить ваш Git (или отдельный репозиторий) из командной строки. С помощью неё можно определить все – от информации о пользователи до настроек поведения репозитория. Ниже показано нескорлько наиболее используемых настроек.

Использование

git config user.name <name>

Определяет имя автора, которое будет использоваться при всех коммитах в текущем репозитории. Точно так же вы можете использовать флаг --global, что бы сохранить изменения о пользователе во всех репозиториях на локальной машине:

git config --global user.name <name>
git config --global user.email <email>

Определяет почтовый адрес автора для его коммитов.

git config --global alias.<alias-name> <git-command>

Создаёт короткое имя для команды Git.

git config --system core.editor <editor>

Определяет тектовый редактор, который будет использоваться такими командами как git commit для всех пользователей на этой машине. Аргумент <editor> должен быть именем исполняемого файла, который запускает желаемый редактор (например – vi).

git config --global --edit

Открывает основной конфигурационный файл для ручного редактированияю

Обуждение

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

Git хранит опции в трёх различных файлах, что позволяет вам разделить опции для отдельных репозиториев, пользователей и всей системы:

  • <repo>/.git/config – настройки отдельного репозитория;
  • ~/.gitconfig – настройки отдельного пользователя – именно тут харнятся опции, добавленные с помощью --global;
  • $(prefix)/etc/gitconfig – общесистемные настройки.

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

[user]
name = John Smith
email = [email protected]
[alias]
st = status
co = checkout
br = branch
up = rebase
ci = commit
[core]
editor = vim

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

Пример

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

# укажите кто вы
git config --global user.name "John Smith"
git config --global user.email [email protected]
# ваш любимый текстовый редактор
git config --global core.editor vim
# и несколько SVN-like алиасов
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.up rebase
git config --global alias.ci commit