Ссылки
https://github.com/
https://gitlab.com/
https://aws.amazon.com/ru/codecommit/
https://bitbucket.org/
https://github.com/progit/progit2-ru - книга
https://githowto.com/ - онлайн учебник
https://githowto.com/ru/setup
https://git-scm.com/book/ru/v2 - книга
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git - установка
https://git-scm.com/downloads - загрузка дистрибутива windows и linux
https://www.youtube.com/watch?v=DK2PsTcSFFM&list=PLg5SS_4L6LYstwxTEOU05E0URTHnbtA0l - видео
0. Установка на debian \ ubuntu
sudo apt update && sudo apt upgrade - обновить список пакетов и обновить установленные пакеты
sudo apt install git - установка
git --version - посмотреть версию
0.1 Установка на redhat \ centos
sudo yum update - обновить установленные пакеты
sudo yum install git - установка
git --version - посмотреть версию
0.2 Установка на windows
https://git-scm.com/download/win - скачиваем и устанавливаем .... тупа next, next, next ...
1. Конфигурация .gitconfig
git config --global user.name "Evgeny Yakovlev" - задаем имя пользователя
git config --global user.email "git@b14esh.com" - задаем электронную почту (правильную почту указывать не обязательно)
git config -l - посмотреть что там настроили
cat ~/.gitconfig - посмотреть что там настроили
!!! В windows так же файл .gitconfig находится в профиле пользователя
1.1 Не обязательно \ Параметры установки окончаний строк \ Установка отображения unicode
Параметры установки окончаний строк Unix/Mac:
git config --global core.autocrlf input
git config --global core.safecrlf warn
Параметры установки окончаний строк Windows:
git config --global core.autocrlf true
git config --global core.safecrlf warn
Установка отображения unicode
По умолчанию, git будет печатать не-ASCII символов в именах файлов в виде восьмеричных последовательностей \nnn.
Что бы избежать нечитаемых строк, установите соответствующий флаги:
git config --global core.quotepath off
2. Git работа с Local Repository / локальным репозиторием
mkdir myproject - создадим директорию
git init /home/user_name/myproject - создать локальный репозиторий /home/user_name/myproject
git init . - создать локальный репозиторий в текущем каталоге
.git - каталог, который будет создан при выполнении команды (git init .), некая база данных git
git status - покажет состояние репозитория (очень частая команда)
git add . - подготовили файлы к созданию снимка
git add * - подготовили файлы к созданию снимка
git add file_name - подготовили файл созданию снимка
git commit -m "My first commit " - создать снимок из подготовленных файлов
git status - покажет состояние репозитория (очень частая команда)
3. Логи \ история изменений
git status - покажет состояние репозитория (очень частая команда)
git log - посмотреть историю изменений
git log -1 - посмотреть последний commit
git log -1 p - посмотреть изменение в последнем commit
git log -2 p - посмотреть изменение в последнем и предпоследнем commit
git log ID -p - посмотреть изменения в commit с ID
git log 62d232e98a5aa10aa13aee7e1f0cc1978c5d94e1 -p - посмотреть изменения в commit с 62d232e98a5aa10aa13aee7e1f0cc1978c5d94e1
3.1 Восстановление файлов
echo GADOSTI >> filename.txt - нагадили в файл
cat - filename.txt - посмотреть файл
git status - посмотрели состояние git
git checkout -- filename.txt - отменить изменения в файле filename.txt (последний commit)
git diff --staged - показывает разницу между commit (+/- был, будет)
3.2 Игнорирование файлов \ .gitignore
echo "Super Log file" > sfile.log - создали файл sfile.log с содержимым "Super Log file"
mkdir log - создать папку log
nano .gitignore - создаем файл .gitignore со следующим содержимым
---------------
*.log
log/
filename.txt
---------------

4. Загрузка проекта на GitHub HTTPS
mkdir myproject - создали каталог myproject
cd myproject - перешли в каталог myproject
git clone https://github.com/b14esh/myproject.git - загрузка проекта с github
cd myproject - перешли в каталог myproject
ls - посмотрели содержимое
echo "Hello world" > first_file.txt - создали пустой файл
git add . - подготовили файлы к созданию снимка (добавили статус stagid)
git commit -m "My First commit" - создали снимок из подготовленных файлов (локальный репозиторий)
git push origin - отправили изменения на удаленный репозиторий
5. Загрузка проекта на GitHub SSH linux
cd - перешли в домашний каталог
ls ~/.ssh - посмотрели содержимое каталога .ssh, убедились что никаких ключей нет
ssh-keygen - с генерировали пару ключей приватный и публичный ( id_rsa и id_rsa.pub )
cat ~/.ssh/id_rsa.pub - что бы было удобнее скопировать выводим содержимое файла id_rsa.pub (публичный ключ) на экран терминала
Идем на https://github.com справа user -> settings -> "ssh and GPG keys" -> "New SSH key" ( https://github.com/settings/keys)
git remote -v - посмотреть как настроено подключение к репазиторию git
-------------
origin https://github.com/b14esh/myproject.git (fetch) - видим что используется HTTPS
origin https://github.com/b14esh/myproject.git (push)
-------------
git remote set-url origin git@github.com:b14esh/myproject.git - сменил настройки с HTTPS на SSH
git remote -v
-------------
origin git@github.com:b14esh/myproject.git (fetch) - вот так выглядит SSH
origin git@github.com:b14esh/myproject.git (push)
-------------
echo gg > x7.txt - создал файл x7.txt для теста
git add . - подготовили файлы к созданию снимка
git commit -m "add file x7.txt" - создал снимок из подготовленных файлов (локальный репозиторий)
git push origin - отправили изменения на удаленный репозиторий
6. Загрузка проекта на GitHub SSH Windows
0. При установке git на windows установился gitbash, запускаем gitbash
1. ssh-keygen запускаем генерацию ключей ssh, при генерации ssh ключей напишет куда сохранит ssh ключи ( /c/Users/USER_NAME/.ssh/ примерно так )
2. cat .ssh/id_rsa.pub - показать содержимое файла id_rsa.pub (публичный ключ)
3. Идем на https://github.com справа user -> settings -> "ssh and GPG keys" -> "New SSH key" ( https://github.com/settings/keys)
4. Добавляем публичный ключ, название любое, но лучше дать адекватное название.
5. git clone git@github.com:b14esh/myproject.git - загрузка проекта myproject с github
7. Создание и работа с ветвями (Branch) git
Обычно ветку master не изменяют.
Создают копию master, например ветку fix_error, выполняют исправления в новой ветке fix_error.
Когда в ветке fix_error все работает ее мигрируют в master.
git init myapp - создали новый локальный репазиторий myapp
cd myapp - перешли каталог myapp
git status - посмотрели состояние git
git branch - посмотреть ветки (в пустом репозитории команда ничего не покажет)
echo "ver1" > index.html - создали файл index.html с содержимым ver1
git add . - подготовили файлы к созданию снимка
git commit -m "version1.0" - создал снимок из подготовленных файлов (локальный репозиторий)
git branch - посмотреть ветки
echo "ver2" > index.html - изменили файл index.html с содержимым ver2
git add . - подготовили файлы к созданию снимка
git commit -m "version2.0" - создал снимок из подготовленных файлов (локальный репозиторий)
echo "ver3" > index.html - изменили файл index.html с содержимым ver3
git add . - подготовили файлы к созданию снимка
git commit -m "version3.0" - создал снимок из подготовленных файлов (локальный репозиторий)
git branch fix_error - создать ветку fix_error
git checkout fix_error - выполнить переход на ветку fix_error
git branch - посмотреть ветки, убедится что переход на ветку fix_error был выполнен
git status - посмотрели состояние git, убедится что переход на ветку fix_error был выполнен
git checkout master - переключится на ветку мастер
git branch -d fix_error - удалить ветку fix_error
git checkout -b fix_error - создать ветку fix_error, переход будет выполнен сразу в ветку fix_error
echo "ver4" > index.html - изменили файл index.html с содержимым ver4
git add . - подготовили файлы к созданию снимка
git commit -m "version4.0" - создал снимок из подготовленных файлов (локальный репозиторий)
git log - посмотреть историю изменений
7.1 Git миграция ветки fix_error в master
git branch - посмотрели какие у нас ветки
git checkout master - перешли в ветку мастер
git status - посмотрели состояние git, убедится что переход на ветку master был выполнен
git merge fix_error - выполнили слияние веток master с fix_error
git branch -d fix_error - удаляем ветку fix_eror
7.2 Git удаление не нужной ветки test
git checkout -b test - создали ветку test и перешли в нее
echo "test 1111" > index.html - создали файл index.html с содержимым "test 1111"
git add . - подготовили файлы к созданию снимка
git commit -m "test" - создал снимок из подготовленных файлов (локальный репозиторий)
git checkout master - перешли в ветку мастер
git branch -d test - решили прибить ветку не нужна.... (windows удалила, а вот на linux ошибка error: The branch 'test' is not fully merged, просит -D)
git branch -D test - удалили ветку
7.2 Git создали ветку add_link, изменили, сделали слияние и удалили ветку add_link
git checkout -b add_link - создали ветку add_link и перешли в нее
echo "ver4.1" > index.html - изменили файл
git add . - подготовили файлы к созданию снимка
git commit -m "version 4.1" - создал снимок из подготовленных файлов (локальный репозиторий)
git status - посмотрели состояние git
git log - посмотреть историю изменений
echo "ver5" > index.html
git add . - подготовили файлы к созданию снимка
git commit -m "version 5.0" - создал снимок из подготовленных файлов (локальный репозиторий)
git log - посмотреть историю изменений
git checkout master
git merge add_link
git status - посмотрели состояние git
git log - посмотреть историю изменений
git branch -d add_link - удалили ветку
8. Git возврат на предыдущие версии
git log - посмотреть историю изменений
git checkout ID_commit - перейти на ID_commit
git checkout 949589d98963f657928b4f1e4e2bf2e60a6a0065 - перейти на ID_commit 949589d98963f657928b4f1e4e2bf2e60a6a0065
git log - посмотреть историю изменений
git checkout master - перешли обратно в ветку мастер
8.1 Git изменить commit не создавая новый commit
git status - посмотрели состояние git
git log - посмотреть историю изменений
echo "version 5.0" > index.html - изменили файл index.html
git commit --amend - изменили последний commit
git log - посмотреть историю изменений
9. Git полный возврат на commit
!!! внимание, будет удаленно все
git status - посмотрели состояние git
git log - посмотреть историю изменений
!!! git reset --hard HEAD~ - полный возврат на один commit (верхний comit будет удален)
!!! git reset --hard HEAD~2 - полный возврат на два commit ( два верхних comit будут удалены)
10. Git как удалить лог commit, файлы оставить последней версии
Дано у нас 4 commita
git status - посмотрели состояние git
git log - посмотреть историю изменений
git reset --soft HEAD~3 - удалит три верхних commit (файлы останутся последней версии)
git log - посмотреть историю изменений, увидим что остался последний commit
git commit --amend - если нужно можно изменить последний commit
11. Git полный рабочий цикл действий git + github
0. git clone git@github.com:b14esh/myproject.git - клонируем репозиторий
1. cd myproject/ - перешли в каталог myproject
2. git branch - показать ветви
3. git checkout -b evgeny_task001 - создаем новую ветвь evgeny_task001 для работы
4. nano x7.txt - начинаем работать над файлом
5. git status - посмотрели состояние git
6. git add . - подготовили файлы к созданию снимка
7. git commit -m "test checkout branch"
8. git status - посмотрели состояние git
9. git log - посмотреть историю изменений
10. git push origin - пытаемся залить на сервер github исправления в файле, получаем ошибку что нет такой ветки evgeny_task001, и команду для создания ветви
11. git push --set-upstream origin evgeny_task001 - выполняем команду для загрузки на github и создания ветви evgeny_task001
12. Идем на github, нужно бы наши исправления добавить в мастер, запрашиваем выполнить merge жмем на кнопку "Compare & Pull Request".
13. Собственно там будет выполнен "Merge pull request".
14. git checkout master - переходим в мастер ветку
15. git push origin --delete evgeny_task001 - работу по таску мы сделали, можно удалять нашу ветку evgeny_task001
12. git pull обновить репозиторий у себя с github
git pull - обновить репозиторий проекта у себя
git autoupdate
#!/bin/bash
cd /home/ey/Documents
git add .
git commit -a -m "autoupdate `date +%F-%T`"
#git push
x
#---------------------------------------------------------------------
# Format for the commit title (the very first line) is the following:
#
# : (If applied, this commit will...) (max 72 chars)
#
# Where `` is one of the following:
# - build = Changes to the build system
# - ci = CI related changes (GH actions, hooks, ...)
# - docs = Changes to the documentation/manuals
# - feat = The commit introduces a new feature
# - fix = The commit fixes a bug/regression/typo
# - impr = The commit bring some improvements
# - misc = Other actions
# - package = Changes to the package produced
# - refactor = The commit performs a refactoring
# - release = The commit prepares a repo for release
# - style = The commit fixes formatting
# - testing = Changes to the tests or testing process
# - wip = Work In Progress
#
# About conventional commits: https://www.conventionalcommits.org
#---------------------------------------------------------------------
# NOTE: Leave the next line empty to separate title from the body
# Explain why this change is being made below... (max 120 chars per line)
# Optionally provide links or keys to any relevant tickets, articles or other resources.
# See also: https://confluence.atlassian.com/fisheye/using-smart-commits-960155400.html
#---[Git inserted text goes blow]-------------------------------------