Перевод замечательной документации от Atlassian.
Так же – есть отличный ресурс на русском тут>>>, в котором более детально рассматриваются вопросы, связанные с внутренней структурой Git.
В этой документации будут рассмотрены основные команды Git. В первой части – “Создание репозитория” – описаны утилиты, необходимые для начала работы с новым проектом под контролем Git.
Содержание
git init
Команда git init
создаёт новый репозиторий. Её можно использовать для превращения уже существующего проекта в Git-репозиторий – или для создания нового. Большинство других команд Git не смогут работать вне проинициализированного репозитория, поэтому как правило – это первая команда при запуске нового проекта.
Выполнение команды git init
создаёт каталог .git
в корне проекта, который будет содержать все необходимые метаданные для репозитория. Сам каталог проекта остаётся без изменений (в отличии от SVN – Git не создаёт каталог .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
как метку для репоизтория-хранилища, в отличии от репозитория для разработки.
Пример
Так как самым подходящим способом создания локальной копии проекта является 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 init
– git clone
обычно выполняется один раз – после того как разработчик получил своб копию проекта все операции по контролю версий и совместная работа выполняются в локальном репозитории.
Свзять репозиторий-к-репозиторию (repo-to-repo)
Важно понимать, что смысл понятия “рабочая копия” у Git очень отличается от рабочий копии, которую вы получаете после загрузки кода из SVN. В отличии от SVN – Git не делает различий между рабочией копией кода и кодом в центральном репозитории – оба являются полноценными репозиториями 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