#format wiki
#language ru

== Совместная работа с документами в git ==

 * git -- распределенная система контроля версий [http://www.kernel.org/pub/software/scm/git/docs/core-tutorial.html Основное руководство]
 * [http:wiki.sisyphus.ru/devel/git git.altlinux.org] -- платформа для совместной разработки в git. 

В связи с тем, что для совместной разработки Sisyphus организована 
совместная разработка в git, работа над
документ Кучи также теперь будет перемещаться на эту платформу. 

В настоящий момент на git.altlinux.org импортирован полный архив 
документов Кучи с историей изменений, каждому модулю Кучи соответствует
отдельный git-репозиторий. Подробности см. ниже.
Репозитории с документами Кучи называются так же, как и [http://sisyphus.ru/team/docs пакеты с этими документами в Sisyphus]: docs-*. 

Сценарии работы с документами Кучи в git несколько отличаются для тех, 
у кого есть учетная запись на git.altlinux.org и для тех, у кого ее нет.

=== Регистрация на git.alt ===

На сегодняшний день учетную запись на git.alt автоматически получили все разработчики 
Sisyphus, у которых есть опубликованные в течение прошлого года пакеты в
Sisyphus. Для получения учетной записи обращайтесь на [[MailTo(joindocs AT СПАМУ НЕТ altlinux DOT ru)]].

==== Настройка ====

Настроить ssh. В ~/.ssh/config нужно добавить: 

{{{
Host    git.alt
        HostName git.altlinux.org
        Port 222
        User git_ID
}}}

Где ID -- ваш идентификатор при доступе к ресурсам ALT, тот же, что и в 
incoming. Доступ осуществляется по тому же ssh-ключу, что и к прочим ресурсам 
ALT.

Настроить свое имя/e-mail, которыми будут подписываться ваши изменения в репозиториях:

Создать файл `$HOME/.gitconfig` следующего содержания:

{{{
[user]
        name = Your Name
        email = ID@altlinux.org
}}}

==== Поиск репозитория на git.alt ====

Просмотреть список всех репозиториев с документами: 
{{{
$ ssh git.alt find-package "docs-*"
/people/azol/packages/docs-distributed_sisyphus_development-azol.git
/people/kirill/packages/docs-issue-textbooks.git
 . . .
/people/kirill/packages/docs-distributed_sisyphus_development-azol.git
 . . .
}}}

Обратите внимание, один и тот же репозиторий может присутствовать у нескольких
разработчиков -- 


==== Внесение изменений в существующий документ ====

Рассмотрим случай, когда нужно внести изменения в документ, для которого уже существует 
репозиторий на git.alt.

Для этого нужно перенести к себе интересующий нас репозиторий.

Допустим, нам нужно работать с репозиторием docs-migrationbook в
версии kirill. Ваш ID на git.alt -- abc.

{{{
$ ssh git.alt find-package docs-migrationbook
/people/kirill/packages/docs-migrationbook
}}}

Прежде всего склонируем интересующий нас репозиторий в свой собственный каталог на git.alt:

{{{
$ ssh git.alt git-clone /people/kirill/packages/docs-migrationbook packages/docs-migrationbook
}}}

Теперь следует склонировать этот репозиторий уже из своего каталога на git.alt:

{{{
$ mkdir src; cd src
$ git-clone git.alt:packages/docs-migrationbook
$ cd docs-migrationbook
}}}

Обратите внимание на отсутствие / после git.alt: таким образом можно ссылаться на свои каталоги на git.alt 
по "относительному пути", т. е. ваш относительный путь `packages/docs-migrationbook` эквивалентен абсолютному
`/people/abc/packages/docs-migrationbook`, где abc -- ваш ID. 


==== Создание нового репозитория с документом ====

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

Создаём локальный репозиторий: 

{{{
$ mkdir docs-newdocument; cd docs-newdocument
$ git-init-db
defaulting to local storage area
}}}

Готовим почву на git.alt: создаём там пустой репозиторий, в который будем помещать сделанные 
нами локально изменения:

{{{
$ ssh git.alt git-init-db packages/docs-newdocument
}}}

Настраиваем свой локальный репозиторий на публикацию изменений на git.alt:

{{{
$ cat > .git/remotes/origin <<EOF
URL: git.alt:packages/docs-newdocument.git
Push: refs/heads/master:refs/heads/master
EOF
}}}


==== Работа с git-репозиторием ====

Главная задача git в самом простом случае -- хранить историю изменений в файлах
и при необходимости получать файл в любом из сохранённых состояний или сумму различий
между двумя заданными состояниями (diff).

В простейшем случае история в git-репозитории представляет собой последовательную 
цепочку сохранённых состояний (всего репозитория, т. е. всех файлов сразу) -- ''комиттов''.

Простейший сценарий по сохранению истории изменений в git-репозитории:
{{{
$ oowriter file.odt
<создаём документ>
$ git-add file.odt
$ git-commit
$ oowriter file.odt
<редактируем>
$ git-add file.odt
<указываем, что нужно закомиттить изменения>
$ git-commit
}}}

При работе с git ваши друзья: 
  * `git-status` информация о текущем состоянии репозитория и подсказки, что делать дальше
  * `git-diff` информация об изменениях в файлах, полезна, если используются текстовые форматы 
  * `git-commit --amend` полезный способ заменять последний коммит, если вдруг замечено, что в нем ошибка. помогает не плодить лишних комиттов в истории 
  * tutorial.html и другая документация из пакета git-doc

Cуть совместной работы в git: каждый работает '''над своей версией''' документа и ее публикует '''в своем репозитории''' на git.alt.
После этого разработчики обмениваются патчами между репозиториями.
Подробнее об этом см. в [http://www.kernel.org/pub/software/scm/git/docs/core-tutorial.html руководстве по git], раздел "Working with others".

==== Публикация своих изменений ====

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

Опубликовать свои изменения:
{{{
$ git push origin
}}}

==== Дальнейшая совместная работа ====

TODO