Показаны сообщения с ярлыком git. Показать все сообщения
Показаны сообщения с ярлыком git. Показать все сообщения

четверг, 22 декабря 2016 г.

Linux: Продолжаю осваивать git

Сегодня после долгого перерыва опять подступился к git.
После прошлых экспериментов остался веб-доступ к репозиторию. Попытался сделать папочку для нового проекта, затем склонировал проект на локальную машину, там чего-то добавил/поменял, сделал коммит, затем попытался выполнить команду git push origin master и... получил ошибку:
error: unpack failed: unpack-objects abnormal exit
error: RPC failed; result=18, HTTP code = 200
fatal: The remote end hung up unexpectedly
error: error in sideband demultiplexer
Оказалось, забыл на сервере раздать права на папку с проектом для учетки, под которой работает веб-сервер.

Попутно выяснилось, что если веб-сервер использует самоподписанный кривой сертификат, то git при общении с ним обламывается с ошибкой: fatal: unable to access 'https://user@server/git/myProject/': SSL certificate problem: self signed certificate. С этим можно побороться так: стащить с сервера файл *.crt и использовать его сначала в команде git clone:
git -c http.sslCAInfo=myCertificate.crt clone https://user@server/git/myProject/
А затем вообще сконфигурировав локальную копию проекта на использование этого сертификата командой:
git config --local --add http.sslCAInfo myCertificate.crt

Также попутно пришлось вспомнить, что прокси можно прописать глобально командой:
git config --global http.proxy http://proxy:port
или индивидуально для проекта, выполнив в папке с его локальной копией команду:
git config --local --add http.proxy http://myproxy:8888

понедельник, 27 мая 2013 г.

Linux: Продолжаю осваивать git

Собственно, возникла простая задача:
1. Поднять на "сервере" сервер git (это не тавтология)
2. Научиться с репозиториями этого сервера работать по ssh.

Первая задача в первом приближении решилась просто: скачиваем исходники git одним архивом, разархивируем, читаем внимательно файл INSTALL, выполняем команды:
$ make configure
$ ./configure --prefix=/usr
$ make all doc
# make install install-doc install-html
в общем, на вид ничего сложного, справится даже такой тупень, как я.

Вторая задача, как оказалось, тоже не бином Ньютона. Если, конечно, внимательно прочитать инструкцию. Или полезные указания опытных людей. Или ещё что-нибудь.

Но это всё, конечно, не про меня. Узнав про команду ssh-keygen и обрадовавшись открывшимся возможностям я полез заводить юзера git, создавать домашнюю папку, давать разрешения и т.п. В результате каких-то вычурных команд репозиторий обосновался в домашней папке этого пользователя, а сам пользователь получил возможность интерактивного входа в систему. Кошмар. (Зато научился блокировать и разблокировать пользователя командами passwd -l git и passwd -u git)

Короче говоря, сделал так. В папке /opt создал символическую ссылку на папку с репозиторием (этот репозиторий с проектами будет жить на отдельном диске), и принял следующую схему работы при создании нового проекта.

На сервере выполняем команды:
$ cd /opt/git
$ mkdir newProject
$ cd newProject
$ git init --bare
$ git commit -m 'Initial commit'

На клиенте выполняем команды
$ cd newProject
$ git init
$ git remote add origin mylogin@myserver:/opt/git/newProject
$ git pull origin master

Если когда-нибудь этот репозиторий перекочует, можно будет сменить оригины командой
$ git remote set-url origin mylogin@myserver:/new-git-repository/newProject
(кстати, текущие значения этих оригинов в текстовом виде хранятся в папке проекта в файле .git/config)

Ну, эта схема ещё явно не окончательная.

Кстати, набрёл еще на одну памятку. Может, пригодится...

Важное дополнение: клиент git под Windows как-то странно рисует кириллические имена файлов. Вроде бы научить его русскому языку удалось командой:
$ git config --global core.quotepath false

вторник, 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

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