====== Сервис 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