1 Востаннє редагувалося miroslav.chandler (13.08.2012 21:58:57)

Тема: Git

Напишу капітанську статтю як користуватися гітом. Можливо комусь пригодиться

Дисклеймер
Не претендую на оригінальність і правильність, просто ділюся досвідом

На нашому r2d2 дебіанчик :3

1) Ставим гіт

#server
apt-get install git git-core

#client
apt-get install git

Як відомо програміст це суміш логіки і ледарства, тому трошки полегшимо собі життя аутинтифікуючись на сервері через ключі(authorized keys).

2)Впевнимося що у вас є / нема ключів.

#local
ls ~/.ssh #папка по замовчуванню

Якщо в вас ця папка не пуста і містить в собі (зазвичай) id_rsa  id_rsa.pub, тоді переходьте до 4 пункту.

3)Якщо нема, треба створити

#local
ssh-keygen

В вас спитають місце розташування і пароль, який потрібно буде ввести, кожен раз, коли ви будете авторизуватися по ключах, можете залишити це поле пустим.
Далі пару слів про ключі.
id_rsa.pub - публічний ключ.
id_rsa - приватний ключ, вкрадуть, буде лихо (:
Тому.

chmod 700 ./.ssh
chmod 600 ./.ssh/id_rsa

4)Далі налаштуєм сервер.

#server
adduser git
su git
cd
mkdir .ssh

Далі нам порібно id_rsa.pub, який ми щойно згенерували, занести в файл authorized_keys.
Переносим його на сервер і

#server
cat id_rsa.pub >> ~/.ssh/authorized_keys

chown -R git ~/.ssh
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

Виходимо з сесії юзера

#server
exit

5)Провіряєм

#local
ssh git@ip

Вас має пуститина сервер, без пароля. Якщо щось пішло не так, дивимся конфіг

nano /etc/ssh/ssh_config
#якщо стоїть no, міняємо на yes

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Ящо це не вирішило проблему, дивимся /var/log/auth.log

6)Далі заради тої ж безпеки, поміняємо оболонку на git-shell, яка буде дозволяти виконувати операції тільки з гітом.

#server
nano /etc/passwd
#находимо нашого користувача
git:x:1001:1002:,,,:/home/git:/bin/bash
# і заміняємо
git:x:1001:1002:,,,:/home/git:/usr/bin/git-shell

7)Тепер знову протестуємо

ssh git@-ip
bla-bla
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Aug date from local-ip
fatal: What do you think I am? A shell?
Connection to ip closed.

fatal: What do you think I am? A shell?

Тільки тролфейса бракує :D


8)Це означає шо в нас все норма, тому налаштуєм гіт.

git config --global user.name "ololo"
git config --global user.email ololo@gmailcom

Тепер можна гітити.
8)Базовий лік-без. (для себе використовую такий метод)

Допустимо, в нас є сайт, який ми локально розробляємо і продакшн, на якому цей сайт крутиться.
Наша задача, налаштувати гіт, для мінімального деплою.

#server
cd /home
mkdir site.git
cd site.git
git init --bare

Тут ми ініціалізували bare (пустий) репозиторій.
Далі перейдем в дерикторію, в якій розміщується сайт.

#server
cd /var/www/site
git init .
git remote add orgin /home/site.git

Тут ми ініціалізували репозиторій і зробили "ссилку" на наш бейр.

Далі шаманим на локалці

#local
cd /var/www/site-dev
git init .
git remote add orgin git@ip:/home/site.git

Тепер весь мед.

Коли ми закінчили процес розробки і хочемо відправити зміни на сервер

#local
git add .
git commit -m"fix"
git push orgin master

Індексуємо, комітимо і відправляємо на сервер.

На сервері

#server
cd /var/www/site
git pull orgin master

І ваші зміни на продакшині.

Надіюся комусь буде корисно.

pew pew :D
Блоґ
Подякували: Replace, Voron, d4rkc10ud, Russell S.4

2

Re: Git

утиліти які мені дуже помагають при роботі з гітом, meld і git-gui

3

Re: Git

meld сам юазаю ) Класна тєма
А ще gitlist поставили

4

Re: Git

доречі для деплою юзаю капістрано, треба якость написати про цей чудо продукт)

pew pew :D
Блоґ

5

Re: Git

вирішив доповнити статейку, мануалом по установці gitolite
gitolite - тулза, для розмежування прав ропозиторії. Нажаль, стандартної системи аутентифікації в гіті нема.

Server requirements:

      * any unix system
      * sh
      * git 1.6.6+
      * perl 5.8.8+
      * openssh 5.0+
      * a dedicated userid to host the repos (in this document, we assume it
        is 'git'), with shell access ONLY by 'su - git' from some other userid
        on the same server.

1)
Добавимо ного юзверя

#server
adduser gitolite --disabled-password

2)
Цього разу, ключі добавляти не будемо. authorized_keys має бути пустим, або відсутнім.
Свій публічний ключ скопіюємо в ~/YourName.pub

3)
Логінимся під юзером

#server
su gitolite
#в мене чомусь в PATH не попало, тому
PATH="$HOME/bin:$PATH"
cd ~/

4)
Добавляємо ключ.

gitolite setup -pk YourName.pub

5)
Клонуємо репу до себе

#local
git clone gitolite@ip:gitolite-admin

В вас зявиться 2 папки

gitolite-admin/keydir
gitolite-admin/conf

В папку keydir, потрібно закинути ключі, тих хто повинен мати доступ(username.pub) і пушнути репу.
В папці conf є файл конфігурації - gitolite.conf, в якому можна налаштувати доступ до репозиторіїв.

Про налаштування, я напишу трохи пізніше.

pew pew :D
Блоґ
Подякували: Russell S.1

6 Востаннє редагувалося bunyk (13.05.2013 21:47:34)

Re: Git

Так як я ssh досі не допетрав, то зробив так:

git config credential.helper store

Після цього на перший git push, git просив пароль, на другий вже не просив. Зручно.

Правда пароль зберігається в відкритому вигляді в ~/.git-credentials, що несек’юрно, але як на мене не так вже й страшно.

7 Востаннє редагувалося miroslav.chandler (13.05.2013 21:55:37)

Re: Git

bunyk написав:

Так як я ssh досі не допетрав, то зробив так:

git config credential.helper store

Після цього на перший git push, git просив пароль, на другий вже не просив. Зручно.

Правда пароль зберігається в відкритому вигляді в ~/.git-credentials, що несек’юрно, але як на мене не так вже й страшно.

це погано в двох випадах:

  • все ж, ви зберігаєте пароль в відкриому вигляді

  • ви не розібралися з ssh авторизацією. :)


пишіть питання, спробую відповісти)

pew pew :D
Блоґ