Table of Contents

Сервис Git

Работа с локальным репозиторием

server:~$ mkdir conf

server:~$ cd conf/

server:~/conf$ echo Hello World > file1

server:~/conf$ mkdir dir1

server:~/conf$ echo Hello World 2 > dir1/file2

server:~/conf$ git init

server:~/conf$ git add .

server:~/conf$ git status

server:~/conf$ git config --global user.email "student@corpX.un"
server:~/conf$ git config --global user.name "FIO"

server:~/conf$ git commit -a -m 'ver: 1.1'

server:~/conf$ echo Hello World 3 > file1

server:~/conf$ git status

server:~/conf$ git add -v .

server:~/conf$ git --no-optional-locks status | grep 'modified\|deleted\|new file\|renamed' | git commit -a -F -

server:~/conf$ git log

server:~/conf$ git log --follow -- file1     В каких коммитах менялся файл

server:~/conf$ git show <commit hash>        Все изменения файлов в этом коммите по 

server:~/conf$ git show <commit hash>:file1  Содержимое файла в этом коммите

server:~/conf$ git show <commit hash> file1  Изменения файла между этим и предыдущим коммитом

server:~/conf$ git diff <commit hash> file1  Изменения файла после этого коммита

server:~/conf$ git diff <commit hash N> <commit hash M>

server:~/conf$ git diff <commit hash N> <commit hash M> file1

server:~/conf$ git reset --hard <commit hash N>

Пример с использованием cron

# cat /etc/cron.daily/my-git-etc
#!/bin/sh

for d in /etc/ /root/
do
  cd $d
  [ -d $d/.git ] || git init > /dev/null
  git add .
  git --no-optional-locks status | grep 'modified\|deleted\|new file\|renamed' | git commit -a -F - > /dev/null
done

exit 0

Создание сетевого http/ssh git репозитория

server:~# mkdir /var/www/html/conf.git

server:~# cd /var/www/html/conf.git

server#:/var/www/html/conf.git# git init --bare

server#:/var/www/html/conf.git# mv hooks/post-update.sample hooks/post-update

server#:/var/www/html/conf.git# chmod a+x hooks/post-update

Не обязательно, но, если хочется видеть содержимое текущего репозитория по http, можно поправить hooks/post-update

server#:/var/www/html/conf.git# cat hooks/post-update

!!! exec должна быть последняя команда

...
#exec git update-server-info
git update-server-info

rm -rf conf

exec git clone http://server.corpX.un:81/conf.git
server:~# chown -R student /var/www/html/conf.git/

Обновление сетевого репозитория из локального

On-Premise gitlab

$ git remote -v

$ git remote remove origin
$ ### git remote rename origin old-origin

$ git remote add origin http://server.corpX.un/student/dhcp.git
$ ### git remote add origin http://server.corpX.un:3000/student/dhcp.git
$ ### git remote add origin git@server.corpX.un:student/gowebd.git

$ git branch

$ ### git config credential.helper store

$ git push origin master

$ ### cat ~/.git-credentials

$ git tag ver1.2

$ git push origin ver1.2

$ git tag

github.com

gate:~/zabbix_dhcp_pools$ git remote add origin https://github.com/valbmsturu/zabbix_dhcp_pools.git

gate:~/zabbix_dhcp_pools$ git push -u origin master

Персонального http/ssh git репозитория

server:~/conf$ git remote add origin file:///var/www/html/conf.git

server:~/conf$ git remote -v

server:~/conf$ git remote rm origin

server:~/conf$ git remote add origin ssh://student@server.corpX.un/var/www/html/conf.git

server:~/conf$ git push origin master

server:~/conf$ echo Hello World 4 > dir1/file2

server:~/conf$ git status

server:~/conf$ git add -v .

server:~/conf$ git commit -a -m 'ver: 1.3'

server:~/conf$ git push origin master

val.bmstu.ru

~/conf# val$ cat readme.txt

Клонирование и обновление локального репозитория из сетевого

On-Premise gitlab

# git clone http://server.corpX.un/student/dhcp.git

  или

# git clone http://server.corpX.un:3000/student/dhcp.git

  или

student@gate:~/dhcp$ git pull origin master

github.com

# git clone https://github.com/valbmsturu/zabbix_dhcp_pools.git

...

Персонального http/ssh git репозитория

gate.isp.un:~$ git clone http://server.corpX.un:81/conf.git

gate.isp.un:~$ cd conf/

gate.isp.un:~/conf$ less dir1/file2

gate.isp.un:~/conf$ git pull origin master

gate.isp.un:~/conf$ less dir1/file2

val.bmstu.ru

$ git clone http://val.bmstu.ru/unix/conf.git

...

Работа с ветками

Пример с тестовой веткой

λ git branch test

λ git branch -a

λ git checkout test

... edit ... add ... commit ... 

λ git push origin test

root@server:~/openvpn1# git pull origin test
root@server:~/openvpn1# ansible-playbook ... test_nodes
   или
... ci/cd test ...


λ git checkout main
λ git checkout master

λ git merge test

... commit ...

λ git push -u origin main
λ git push -u origin master

... ci/cd prod ...

λ git push -d origin test
λ git branch -d test

val@bro:~/conf$ git fetch --all

Пример установки ПО

# dpkg -l | grep mediawiki
ii  mediawiki                     1:1.31...
...

# cd /var/lib/mediawiki/extensions/

# git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UserMerge

# cd UserMerge/

# git branch -r

# git checkout REL1_31