Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒FreeBSD and Nix⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA
⇐Мото

FreeBSD + Git + Gitolite


 

FreeBSD + Git + Gitolite


Gitolite по сути менеджер проектов, позволяет управлять доступом и т.п.
Установку и настройку будем производить на FreeBSD


Имеются две машины:
10.0.2.7 - сервер с git freebsd
10.0.2.4 - клиентская машина внутри сети linux centos


Пропишем сразу автозагрузку:
/etc/rc.conf:
git_daemon_enable="YES"
git_daemon_directory="/git"
git_daemon_flags="--syslog --base-path=/git --export-all --reuseaddr --detach"

 

Установка git:
pkg install git

Или:
make -C /usr/ports/devel/git install clean

 

Заведем пользователя, с которым будет работать git:
pw groupadd -n git -g 9418
pw useradd -n git -u 9418 -g git -d /git -s /bin/sh
passwd git


Домашняя папка пользователя:
mkdir -p /git/base/
chown -R git:git /git
chmod -R 755 /git

 

Папка для ssh ключей:
mkdir /git/.ssh/
chmod 700 /git/.ssh/
touch /git/.ssh/authorized_keys
chmod 600 /git/.ssh/authorized_keys

chown -R git:git /git/.ssh/

 

Стартуем:
/usr/local/etc/rc.d/git_daemon start

 


Заводим контакты пользователя в git:
git config --global user.name "git"
git config --global user.email "git@domain.local"
git config --global core.editor "vi"
git config --global push.default "simple"

Проверяем текущие настройки:
git config --list

 

Создадим ssh ключи учетке:
su git

ssh-keygen

cp /git/.ssh/id_rsa.pub /git/.ssh/git.pub
cp /git/.ssh/id_rsa /git/.ssh/git


Создадим репозиторий:
mkdir /git/base/test.git
cd /git/base/test.git && git init --bare --shared


СОздадим локальный репозиторий:
mkdir ~/test
cd ~/test && git init

СОздадим файл, добавим в индекс:
echo 'test_homedir' > test_homedir
git add .
git commit -m 'test_homedir commit'

ДОбавим линк на созданный ранее репозиторий:
git remote add origin git@127.0.0.1:base/test.git

Отправим изменения на сервер:
git push origin master

 


##### На удаленной машине 10.0.2.4


Создали пользователя и папки:
groupadd -g 9418 git
useradd -d /git -u 9418 -g 9418 git
usermod -g git git
passwd git


mkdir /git/.ssh/
chmod 700 /git/.ssh/
touch /git/.ssh/authorized_keys
chmod 600 /git/.ssh/authorized_keys

chown -R git:git /git/.ssh/

 

Создаем ключи:
su git

ssh-keygen
ssh-copy-id git@10.0.2.7


#На 10.0.2.7
su git
ssh-copy-id git@10.0.2.4
#На 10.0.2.7


Данные пользователя:
git config --global user.name "git"
git config --global user.email "git@domain.local"
git config --global core.editor "vi"
git config --global push.default "simple"

 

СОздадим проект, подключим удаленный:
cd ~

mkdir test
cd test


git init .

git remote add origin git@10.0.2.7:/git/base/test.git
git add .
git commit -m "Initial client commit"

git pull origin master
git push origin master


Внесем изменения и отправим их на 10.0.2.7
echo 'client_content' > test_homedir
git diff

git add test_homedir
git status

git commit -m "1st client commit"

git push origin master


Посмотреть линковку:
git remote -v

 


### Gitolite на 10.0.2.7


/etc/rc.conf
hostname="gitserver"


Установка:
cd /usr/ports/devel/gitolite && make install clean


pw usermod git -d /home/git

 

Проинсталлируем ключи:
su git

cd

/usr/local/bin/gitolite setup -pk /git/.ssh/git.pub


Скопируем администраторский репозиторий:
git clone ssh://git@127.0.0.1/gitolite-admin


ls -la gitolite-admin/
total 20
drwxr-xr-x  5 git  git  512 Sep 27 14:53 .
drwxr-xr-x  8 git  git  512 Sep 27 14:53 ..
drwxr-xr-x  8 git  git  512 Sep 27 14:53 .git
drwxr-xr-x  2 git  git  512 Sep 27 14:53 conf
drwxr-xr-x  2 git  git  512 Sep 27 14:53 keydir


Файл конфигурации доступа (прописываем репозиторий, пользователя, тип доступа):
vi gitolite-admin/conf/gitolite.conf
repo gitolite-admin
 RW+     =   git

repo test
 RW+     =   git

 

Типы прав:
"R" - чтение
"RW" - чтение \ запись
"RW+" - чтение \ запись \ удаление
"-" - доступ запрещен

Refex - регулярные выражения удаленных веток \ тегов \ файлов:
repo  test
        RW+                           = @admins
        RW   test                     = @developers
        R    test_*                   = @developers
        -    refs/heads/master        = @staff
        RW+                           = @staff

 


КОнфиг ssh:
su git

vi /git/.ssh/config
Host 10.0.2.7
     User git
     Hostname 10.0.2.7
     Port 22
     IdentityFile /git/.ssh/git.pub

 

Создадим новый проект:
cd ~/repositories
mkdir newproject.git && cd newproject.git/

git init --bare
Initialized empty Git repository in /git/repositories/newproject.git/


Дописываем новый репозиторий, учетку и тип доступа:
vi ~/gitolite-admin/conf/gitolite.conf
repo gitolite-admin
 RW+     =   git

repo test
 RW+     =   git

repo newproject
 RW+     =   git

 


Коммитим изменения админки:
cd /git/gitolite-admin
git status
git add conf/gitolite.conf
git commit -m 'Add new users'
git push origin master

 

ПРоверяем:
ssh -T git@10.0.2.7
hello git, this is git@gitserver running gitolite3 v3.6.7 on git 2.19.0

 R W    gitolite-admin
 R W    newproject
 R W    testvi


Выкчиваем, изменяем и коммитим:
git clone ssh://git@10.0.2.7:22/newproject
echo '1' >> newproject/testfile.txt
cd newproject
git status
git add .
git commit -m 'Add test file'
git push

 


Отправим ssh ключи на клиентскую машину:
cat ~/.ssh/git.pub | ssh git@10.0.2.4 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
scp /git/.ssh/config git@10.0.2.4:/git/.ssh/
scp /git/.ssh/git.pub git@10.0.2.4:/git/.ssh/
scp /git/.ssh/id_rsa git@10.0.2.4:/git/.ssh/git


#### На удаленной машине 10.0.2.4

su git

cat ~/.ssh/git.pub | ssh git@10.0.2.7 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

cd

chmod 400 /git/.ssh/git.pub

ssh-add -k /git/.ssh/git
Identity added: /git/.ssh/git (/git/.ssh/git)

ssh-add -l
2048 SHA256:SOZFD5LH2BtgUTCQZiS1FjZVaNBsGo+MBXU5lRZJEEs /git/.ssh/id_rsa (RSA)
2048 SHA256:hXRVlDP+yuSmBjkcB+jlJL1HtpYjIUtGreUCDq9az/k /git/.ssh/git (RSA)


Проверяем:
ssh -T git@10.0.2.7
hello git, this is git@gitserver running gitolite3 v3.6.7 on git 2.19.0

 R W    gitolite-admin
 R W    newproject
 R W    test


Скачиваем проект:
git clone ssh://git@10.0.2.7:22/newproject


Делаем изменения, закачиваем их на сервер:
echo '2' >> newproject/testfile.txt
cd newproject
git add .
git status
git commit -m 'Add test file from remote server'
git push

 

 

##### Некоторые команды:

### Справка:
git --help


### Справка по определенной команде:
git branch --help


### Вывести все ветки:
git branch-a


### Покажите различные типы объектов:
git show


### Посмотреть изменения:
git diff


### Показать логи коммитов:
git log


### Удалить последний коммит в ветке (опасно, безвозвратно):

### Выбираем нужный брэнч (ветку):
git checkout master

git reset --hard HEAD^

До какого то определенного коммита по хешу из вывода git log:
git reset --hard HEAD hash

Пример:
git reset --hard 0be7ef22d1a10563ee98870962cbe50aa4320205


### Временное переключение на коммит и возврат обратно:

### Выбираем нужный брэнч (ветку):
git checkout master

$ git log
commit adabd3042875d9788abb8d24bef8e6cc07d71832 (HEAD -> master, origin/master, origin/HEAD)
Author: git <git@domain.local>
Date:   Thu Sep 27 16:11:42 2018 +0300

    Add test file


$ git checkout adabd3042875d9788abb8d24bef8e6cc07d71832
Note: checking out 'adabd3042875d9788abb8d24bef8e6cc07d71832'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at adabd30 Add test file


$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.


### Постоянное переключение на коммит:
git checkout -b имя_новой_ветки имя_коммита


### Вывести лог действий:
git reflog
0be7ef2 (HEAD -> master) HEAD@{0}: reset: moving to 0be7ef22d1a10563ee98870962cbe50aa4320205
115b160 (origin/master, origin/HEAD) HEAD@{1}: commit: new commit
0be7ef2 (HEAD -> master) HEAD@{2}: pull: Fast-forward
adabd30 HEAD@{3}: reset: moving to HEAD^
d87211d HEAD@{4}: commit: new commit
adabd30 HEAD@{5}: reset: moving to HEAD~0
adabd30 HEAD@{6}: reset: moving to HEAD@{4}
adabd30 HEAD@{7}: reset: moving to HEAD
adabd30 HEAD@{8}: reset: moving to HEAD
adabd30 HEAD@{9}: checkout: moving from adabd3042875d9788abb8d24bef8e6cc07d71832 to master
adabd30 HEAD@{10}: checkout: moving from master to adabd3042875d9788abb8d24bef8e6cc07d71832
adabd30 HEAD@{11}: clone: from ssh://git@10.0.2.7:22/newproject

git checkout 115b160
или:
git checkout HEAD@{1}


### Удаление изменений в рабочей области, вернуть ее к состоянию при последнем коммите:

Не индексированные:
git stash save --keep-index

Уже индексированные:
git stash save

Восстановление несохраненных изменений:
git stash apply

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru