====== Сервис Git ======
* [[https://ru.wikipedia.org/wiki/Git|Git - Википедия]]
* [[https://git-scm.com/book/ru/v2/|The entire Pro Git book (на русском)]]
* [[http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository/|8 ways to share your git repository]]
* [[http://hyperprog.com/howto/etc-git.html|How-To store /etc in a git repository on debian linux]]
* [[https://git-scm.com/download/win|Git for Windows]]
* [[https://git-lfs.github.com/|An open source Git extension for versioning large files]]
* [[https://www.theserverside.com/feature/Why-GitHub-renamed-its-master-branch-to-main|Why GitHub renamed its master branch to main]]
* [[https://youtu.be/SEvR78OhGtw|youtube/Артем Матяшов/Git. Большой практический выпуск (youtube)]]
===== Работа с локальным репозиторием =====
* Вместо каталога conf/ можно использовать /etc/ или /srv/tftp/
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 Все изменения файлов в этом коммите по
server:~/conf$ git show :file1 Содержимое файла в этом коммите
server:~/conf$ git show file1 Изменения файла между этим и предыдущим коммитом
server:~/conf$ git diff file1 Изменения файла после этого коммита
server:~/conf$ git diff
server:~/conf$ git diff file1
server:~/conf$ git reset --hard
===== Пример с использованием 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/
* Обновление [[#Персонального http/ssh git репозитория]]
===== Обновление сетевого репозитория из локального =====
* [[https://dzen.ru/a/YufH0P_uAEpuxnPg|Работа с тегами Git: создание, удаление, использование]]
==== On-Premise gitlab ====
* [[https://stackoverflow.com/questions/6565357/git-push-requires-username-and-password|Git push requires username and password]]
$ 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
...
===== Работа с ветками =====
* [[https://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-locally-and-remotely|How do I delete a Git branch locally and remotely?]]
* [[https://stackoverflow.com/questions/10312521/how-do-i-fetch-all-git-branches|How do I fetch all Git branches?]]
==== Пример с тестовой веткой ====
λ 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