вторник, 26 июня 2012 г.

Debian: осваиваю git

Решил давеча приобщиться к прекрасному. Ну в самом деле, кругом XXI век, а я до сих пор как школьник все свои проекты храню в папочках и раз в неделю архивирую. Захотелось по-взрослому, чтобы была система контроля версий, доступ к репозиторию по http и прочее - в общем, сам пока не знаю толком, чего мне доселе не хватало.

Первый же заплыв привел на github.com, а от него - к git. Командная строка, всё такое черно-серое, юниксоидное, бесплатное - словом, понравилось. Единственная проблема: как поднять репозиторий, доступный по http (у гитхаба какие-то ограничения, да и вообще прикольно же).

К счастью, нашлась толковая инструкция. Вкратце последовательность действий такова:

1. Конфигурируем apache2. Добавляем в /etc/apache2/sites-available/default следующие строки:
SetEnv GIT_PROJECT_ROOT /путь-до-репозитория
SetEnv GIT_HTTP_EXPORT_ALL

ScriptAliasMatch \
 "(?x)^/git/(.*/(HEAD | info/refs | objects/(info/[^/]+ | [0-9a-f]{2}/[0-9a-f]{38} | \
                    pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                    git-(upload|receive)-pack))$" \
                    "/usr/lib/git-core/git-http-backend/$1"

<Directory /usr/lib/git-core/>
    Options +ExecCGI
    Order Allow,Deny      
    Allow from all
</Directory>

<Location /git>
    AuthType Basic
    AuthName "Private Git Access"
    AuthUserFile /etc/apache2/authusers
    Require valid-user
</Location>

2. Добавляем в файл с разрешенными пользователями нового пользователя по имени username командой:
htpasswd -c /etc/apache2/authusers username

3. Перезапускаем апач командой:
sudo /etc/init.d/apache2 restart

4. Настраиваем репозиторий. Создаем внутри каталога /путь-до-репозитория очередную папочку для проекта myProject, переходим в неё и выполняем волшебную команду:
git init --bare

5. Раздаем на каталог myProject права для учетной записи, под которой работает апач:
sudo chown -R www-data myProject
sudo chgrp -R www-data myProject

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

1. Устанавливаем и настраиваем git на клиентской машине. Вводим имя пользователя (username), его e-mail (это будет отображаться при просмотре истории коммитов) и, если нужно, прокси:
git config --global user.name username
git config --global user.email mymail@mymail.ru
git config --global http.proxy http://myproxy:8888

2. Можно еще указать, чтобы git кэшировал на какое-то время пароли:
git config --global credential.helper 'cache --timeout=3600'
(честно говоря, у меня не сработало; приходится каждый раз при выполнении команд git push, git pull вводить пароль)

3. Клонируем нужный проект в локальный каталог командой:
git clone http://username@host/git/myProject

4. Меняем в проекте всё, что нам надо, и скармливаем изменения git-у:
git add мой-измененный-файл

5. Коммитим изменения в проекте:
git commit -m "описание изменений"

6. Заливаем измененный проект обратно на сервер:
git push origin master

Кстати, вот тут лежит хороший учебник.

Комментариев нет:

Отправить комментарий