This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
сервис_git [2020/05/12 21:09] val |
сервис_git [2025/11/27 08:08] (current) val [Пример установки ПО] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Сервис Git ====== | ====== Сервис Git ====== | ||
| + | |||
| + | * [[https://ru.wikipedia.org/wiki/Git|Git - Википедия]] | ||
| * [[https://git-scm.com/book/ru/v2/|The entire Pro Git book (на русском)]] | * [[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://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]] | * [[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)]] | ||
| + | |||
| + | * [[https://github.com/github/gitignore/tree/main|A collection of .gitignore templates]] | ||
| ===== Работа с локальным репозиторием ===== | ===== Работа с локальным репозиторием ===== | ||
| - | * Вместо "искусственного" каталога /root/conf/ можно использовать /etc/ или /srv/tftp/ | + | * Вместо каталога conf/ можно использовать /etc/ или /srv/tftp/ |
| <code> | <code> | ||
| - | server:~# mkdir conf | + | server:~$ mkdir conf |
| - | server:~# cd conf/ | + | server:~$ cd conf/ |
| + | или | ||
| + | server:~$ git -C conf/ ... | ||
| - | server:~/conf# echo Hello World > file1 | + | server:~/conf$ echo Hello World > file1 |
| - | server:~/conf# mkdir dir1 | + | server:~/conf$ mkdir dir1 |
| - | server:~/conf# echo Hello World 2 > dir1/file2 | + | server:~/conf$ echo Hello World 2 > dir1/file2 |
| - | server:~/conf# git init | + | server:~/conf$ git init |
| - | server:~/conf# git add . | + | server:~/conf$ git add . |
| - | server:~/conf# git status | + | server:~/conf$ git status |
| - | server:~/conf# git commit -a -m 'ver: 1.1' | + | server:~/conf$ git config --global user.email "student@corpX.un" |
| + | server:~/conf$ git config --global user.name "FIO" | ||
| - | server:~/conf# echo Hello World 3 > file1 | + | server:~/conf$ git commit -a -m 'ver: 1.1' |
| - | server:~/conf# git status | + | server:~/conf$ echo Hello World 3 > file1 |
| - | server~/conf# git add -v . | + | server:~/conf$ git status |
| - | server:~/conf# git status | grep 'modified\|deleted\|new file\|renamed' | git commit -a -F - | + | server:~/conf$ git add -v . |
| - | server:~/conf# git log | + | server:~/conf$ git --no-optional-locks status | grep 'modified\|deleted\|new file\|renamed' | git commit -a -F - |
| - | server:~/conf# git log --follow -- file1 | + | server:~/conf$ git log |
| - | server:~/conf# git show <commit hash>:file1 | + | server:~/conf$ git log --follow -- file1 В каких коммитах менялся файл |
| - | server:~/conf# git diff <commit hash> file1 | + | server:~/conf$ git show <commit hash> Все изменения файлов в этом коммите по |
| - | server:~/conf# git diff <commit hash N> <commit hash M> file1 | + | 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> | ||
| </code> | </code> | ||
| - | ===== Подготовка сетевого http репозитория ===== | + | |
| + | ===== Пример с использованием cron ===== | ||
| + | |||
| + | <code> | ||
| + | # cat /etc/cron.daily/my-git-etc | ||
| + | </code><code> | ||
| + | #!/bin/sh | ||
| + | |||
| + | for d in /etc/ /root/ | ||
| + | do | ||
| + | cd $d | ||
| + | [ -d $d/.git ] || /usr/bin/git init > /dev/null | ||
| + | /usr/bin/git add . | ||
| + | /usr/bin/git --no-optional-locks status | grep 'modified\|deleted\|new file\|renamed' | /usr/bin/git commit -a -F - > /dev/null | ||
| + | done | ||
| + | |||
| + | exit 0 | ||
| + | </code> | ||
| + | |||
| + | ===== Создание сетевого http/ssh git репозитория ===== | ||
| <code> | <code> | ||
| server:~# mkdir /var/www/html/conf.git | server:~# mkdir /var/www/html/conf.git | ||
| Line 56: | Line 98: | ||
| server#:/var/www/html/conf.git# chmod a+x hooks/post-update | server#:/var/www/html/conf.git# chmod a+x hooks/post-update | ||
| - | + | </code> | |
| - | server/var/www/html/conf.git# cat hooks/post-update | + | Не обязательно, но, если хочется видеть содержимое текущего репозитория по http, можно поправить hooks/post-update |
| - | </code><code> | + | <code> |
| + | server#:/var/www/html/conf.git# cat hooks/post-update | ||
| + | </code> | ||
| + | !!! exec должна быть последняя команда | ||
| + | <code> | ||
| ... | ... | ||
| - | git clone http://server.corpX.un/conf.git | + | #exec git update-server-info |
| - | exec git update-server-info | + | git update-server-info |
| + | |||
| + | rm -rf conf | ||
| + | |||
| + | exec git clone http://server.corpX.un:81/conf.git | ||
| </code><code> | </code><code> | ||
| server:~# chown -R student /var/www/html/conf.git/ | server:~# chown -R student /var/www/html/conf.git/ | ||
| </code> | </code> | ||
| + | |||
| + | * Обновление [[#Персонального 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]] | ||
| + | * [[https://stackoverflow.com/questions/5480258/how-can-i-delete-a-remote-tag|How can I delete a remote tag?]] | ||
| <code> | <code> | ||
| - | server:~/conf# git remote add origin file:///var/www/html/conf.git | + | $ git remote -v |
| - | server:~/conf# git remote -v | + | $ git remote remove origin |
| + | $ ### git remote rename origin old-origin | ||
| - | server:~/conf# git remote rm 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 | ||
| - | server:~/conf# git remote add origin ssh://student@server.corpX.un/var/www/html/conf.git | + | $ git branch |
| - | server:~/conf# git push origin master | + | $ ### git config --global http.sslVerify "false" |
| - | server:~/conf# echo Hello World 4 > dir1/file2 | + | $ ### git config credential.helper store |
| - | server:~/conf# git status | + | $ git push origin master |
| - | server:~/conf# git add . | + | $ ### cat ~/.git-credentials |
| - | server:~/conf# git commit -a -m 'ver: 1.3' | + | $ git tag ver1.2 |
| - | server:~/conf# git push origin master | + | $ git push origin ver1.2 |
| + | |||
| + | $ git tag | ||
| + | |||
| + | $ ###git tag -d ver1.3 | ||
| + | $ ###git push --delete origin ver1.3 | ||
| </code> | </code> | ||
| + | |||
| ==== github.com ==== | ==== github.com ==== | ||
| <code> | <code> | ||
| - | gate:~/zabbix_dhcp_pools# git remote add origin https://github.com/valbmsturu/zabbix_dhcp_pools.git | + | 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 | + | gate:~/zabbix_dhcp_pools$ git push -u origin master |
| </code> | </code> | ||
| + | |||
| + | ==== Персонального http/ssh git репозитория ==== | ||
| + | <code> | ||
| + | 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 | ||
| + | </code> | ||
| + | |||
| + | ==== val.bmstu.ru ==== | ||
| + | <code> | ||
| + | ~/conf# val$ cat readme.txt | ||
| + | </code> | ||
| + | |||
| ===== Клонирование и обновление локального репозитория из сетевого ===== | ===== Клонирование и обновление локального репозитория из сетевого ===== | ||
| - | ==== Использование персонального репозитория ==== | + | ==== On-Premise gitlab ==== |
| <code> | <code> | ||
| - | gate.isp.un:~$ git clone http://server.corpX.un/conf.git | + | # 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 | ||
| + | </code> | ||
| + | |||
| + | ==== github.com ==== | ||
| + | <code> | ||
| + | # git clone https://github.com/valbmsturu/zabbix_dhcp_pools.git | ||
| + | |||
| + | ... | ||
| + | </code> | ||
| + | |||
| + | ==== Персонального http/ssh git репозитория ==== | ||
| + | <code> | ||
| + | gate.isp.un:~$ git clone http://server.corpX.un:81/conf.git | ||
| gate.isp.un:~$ cd conf/ | gate.isp.un:~$ cd conf/ | ||
| Line 110: | Line 225: | ||
| gate.isp.un:~/conf$ less dir1/file2 | gate.isp.un:~/conf$ less dir1/file2 | ||
| </code> | </code> | ||
| - | ==== github.com ==== | + | |
| + | ==== val.bmstu.ru ==== | ||
| <code> | <code> | ||
| - | # git clone https://github.com/valbmsturu/zabbix_dhcp_pools.git | + | $ git clone http://val.bmstu.ru/unix/conf.git |
| ... | ... | ||
| </code> | </code> | ||
| - | ==== val.bmstu.ru ==== | + | |
| + | ===== Работа с ветками ===== | ||
| + | |||
| + | * [[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?]] | ||
| + | ==== Пример с тестовой веткой ==== | ||
| <code> | <code> | ||
| - | # 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 | ||
| + | </code> | ||
| + | |||
| + | ==== Пример установки ПО ==== | ||
| + | |||
| + | <code> | ||
| + | # 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 | ||
| + | </code> | ||
| + | или | ||
| + | |||
| + | * [[Система Kubernetes#Развертывание через Kubespray]] | ||
| + | |||
| + | <code> | ||
| + | (venv1) server:~/kubespray# git tag -l | ||
| + | |||
| + | (venv1) server:~/kubespray# git checkout tags/v2.26.0 | ||
| </code> | </code> | ||