Решил давеча приобщиться к прекрасному. Ну в самом деле, кругом 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
Кстати,
вот тут лежит хороший учебник.