Git
Кратко
Проверяем обстановку
git status
Добавляем файл который хотим закоммитить
git add index.html
Если файлов много и Вы хотите добавить все используйте
git add -A
Убираем файл который не хотим сейчас коммитить
git reset file.txt
Коммитим с комментарием
git commit -m 'Лучшие самоучители на сайте www.aredel.com'
Стэйджим и коммитим с комментарием одной командой
git commit -am 'Наш любимый сайт www.HeiHei.ru'
Пушим на сервер в мастер
git push origin master
Установка Git
В Ubuntu , Debian и подобных ОС нужно выполнить
sudo apt install git
В Rocky , CentOS , RedHat и похожих:
sudo yum install git
Для Windows скачать Git можно здесь про установку есть подробная статья «Установка Git в Windows»
Узнать версию установленного Git
Узнать версию установленного Git можно с помощью опции version
$ git --version
git version 2.22.0.windows.1
Пользователь
Задать имя активного пользовотеля
$ git config --global user.name "Andrei"
Проверить имя активного пользовотеля
$ git config user.name
Andrei
Задать email активного пользовотеля
$ git config --global user.email "www.aolegovich.ru@aredel.com"
init
Начать отслеживать изменения - инициализаци или начало работы Git
$ git init
Initialized empty Git repository in C:/Users/aolegovich/Desktop/Sites/hello-world/.git/
Википедия: По умолчанию репозиторий хранится в подкаталоге с названием «.git» в
корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории.
Любое файловое дерево в системе можно превратить в репозиторий git, отдав команду создания репозитория
из корневого каталога этого дерева (или указав корневой каталог в параметрах программы)
Создать файл
$ touch "index.html"
status
Посмотреть свежие изменения в репозитории
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)
Файл, в котором произошли изменения выделен красным
add
Добавить файл в группу файлов, которые Вы планируете зафиксировать (staging area)
$ git add index.html
Посмотреть свежие изменения в репозитории
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
Файл, который был добавлен в staging area выделен зелёным
Удалить файл из staging area
Если вы добавили что-то лишнее
$ git reset имя_файла
commit
Зафиксировать изменения - записать изменения файла в репозиторий.
$ git commit -m 'Мой первый коммит.'
[master (root-commit) e2d3195] My first commit.
1 file changed, 1 insertion(+)
create mode 100644 index.html
Вернуть файл к последнему закоммиченному состоянию
$ git checkout -- .
clone
Клонировать другой репозиторий
$ git clone https://github.com/Project/Project.git
Cloning into 'welcome-to-git'...
remote: Enumerating objects: 9, done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 9
Unpacking objects: 100% (9/9), done.
Либо по SSH
$ git clone git@gitlab.com:Project/Project.git
Синтаксис выбирается в зависимости от типа авторизации: паролем, по ключу и т.д.
Создать бесплатный репозиторий на GitLab
Адрес -
gitlab.com/sing_in
или
gitlab.com/users/sing_in
Нужно зарегистрироваться, подтвердить почту и создать первый проект.
Доступ к GitLab по ssh
Добавить ключ gitlab.com
Перейдите в домашнюю директорию и сгенерируйте ключ с помощью ssh keygen
cd
ssh-keygen -t rsa -b 2048
Ключ проще всего назвать gitlab_com_rsa
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Andrei/.ssh/id_rsa): gitlab_com_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in gitlab_com_rsa Your public key has been saved in gitlab_com_rsa.pub The key fingerprint is: SHA256:wAhrNr63vvUrQvhP6dbekTHlk6wtP7Y+fIJWnpLyCQN Andrei@DESKTOP-OP43ER5 The key&339;s randomart image is: +---[RSA 2048]----+ | . . | | 2 = + . | |E * = = | | . + . B . | | ... =+ S | | .. .. =. | | .o..*=+ | | ..=J=*+o. | | +PP=+*= | +----[SHA256]-----+
Создайте файл config
touch ~/.ssh/config
vi ~/.ssh/config
# GitLab.com
Host gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_com_rsa
Копируем содержимое ключа в буфер.
В
Windows
GitBash
cat ~/.ssh/gitlab_com_rsa.pub | clip
В Linux если стоит xclip
xclip -sel clip < ~/.ssh/gitlab_com_rsa.pub
Скопированный ключ нужно вставить в поле Key в gitlab.com/~/profile/keys
User Settings > SSH Keys
Пример
Теперь можно клонировать из GitLab по SSH
mkdir test
cd test
git init
touch .gitignore
git clone git@gitlab.com:ВАШ_АККАУНТ/ИМЯ_ПРОЕКТА.git
GitHub
Адрес -
github.com
Бесплатный (Free) аккаунт означает, что Вы можете работать только с
публичным (Public) репозиторием.
О работе с публичным
API
github читайте
здесь
Все могут видеть Ваш код, но редактировать
его можете только Вы.
Не храните в публичном репозитории файлы с паролями. Если Вам нужна приватность - покупайте приватный режим (Private)
или переходите на другой сервис, например BitBucket.org.
После того как аккаунт создан нажмите на плюсик и выберите New repository
Изменить директорию
$ cd /c/Users/aolegovich/Desktop/Sites
Как клонировать репозиторий с GitHub уже разбирали здесь например:
$ git clone https://github.com/Name/name.git
Cloning into 'heihei.ru'...
remote: Enumerating objects: 83, done.
remote: Total 83 (delta 0), reused 0 (delta 0), pack-reused 83
Unpacking objects: 100% (83/83), done.
remote -v
Проверить с каким удалённым репозиторием git связывает локальный репозиторий
$ git remote -v
origin https://github.com/Name/name.git (fetch)
origin https://github.com/Name/name.git (push)
Если Вы ещё не подключились ни к github ни к gitlab ни к другим сервисам, сделать это можно командой
git remote add origin https://git.company.com/user/projectName.git
Конечно, предварительно нужно создать проект на сайте сервиса + нужно заранее сделать git init .
remote set-url
Изменить привязанный удалённый репозиторий
$ git remote set-url origin https://github.com/YourAccount/your project name.git
Проверить изменился ли привязанный репозиторий
$ git remote -v
origin https://github.com/YourAccount/your project name.git (fetch)
origin https://github.com/YourAccount/your project name.git (push)
push
Отправить новые данные на удалённый репозиторий
$ git push origin master
Enumerating objects: 83, done.
Counting objects: 100% (83/83), done.
Delta compression using up to 4 threads
Compressing objects: 100% (81/81), done.
Writing objects: 100% (83/83), 3.36 MiB | 3.19 MiB/s, done.
Total 83 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To https://github.com/andreiolegovichru/travel-site.git
* [new branch] master -> master
Если нужно делать push из другой ветки - просто напишите её называние вместо master
git push origin some/other/branch_name
Enumerating objects: 30, done. Counting objects: 100% (30/30), done. Delta compression using up to 8 threads Compressing objects: 100% (26/26), done. Writing objects: 100% (26/26), 6.32 KiB | 6.32 MiB/s, done. Total 26 (delta 7), reused 0 (delta 0) remote: remote: To create a merge request for some/other/branch_name, visit: remote: https://gitlab.yourcompany.com/Project/Project/merge_requests/new?merge_request%5Bsource_branch%5D=some%2Fother%2Fbranch_name remote: To gitlab.ssh.com:IAM/IAM.git abcdefdc8..abcdef000 topic/qa/init_perf_test_controller -> topic/qa/init_perf_test_controller
Затем нужно перейти по ссылке
https://gitlab.yourcompany.com/Project/Project/merge_requests/new?merge_request%5Bsource_branch%5D=some%2Fother%2Fbranch_name
и сделать Merge Request
pull
Если удалённый репозиторий ушёл вперед и вы хотите обновить свой локальный репозиторий данными с удалённого
$ git pull origin master
Ветки (Branches)
Посмотреть какая ветка сейчас активна
$ git branch
* master
Прежде чем создавать новую ветку нужно убедиться в том, что в старой нет несохранённых изменений.
$ git status
On branch master
nothing to commit, working tree clean
Создать новую ветку
$ git branch new-branch
Проверить появилась ли она в списке
$ git branch
* master
new-branch
Перейти в новую ветку
$ git checkout new-branch
Switched to branch 'new-branch'
Вернуться в ветку master
$ git checkout master
Если Вы сделали в ветке new-branch какие-то изменения, закоммитили из и теперь хотите, добавить эти изменения в ветку master нужно выполнить команду merge
$ git merge new-branch
Updating f521fc5..fe7276a
Fast-forward
index.html | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Создать новую ветку и сразу перейти в неё можно одной командой
$ git checkout -b new-branch-2
Удалить ветку
Удалить локальную ветку
git branch -d branchName
Deleted branch branchName (was 1ce400ce6).
Удалить внешнюю ветку
git push origin --delete remoteBranchName
rev-parse: Показать корневую директорию
Корневая директорию репозитория - то есть та, где был выполнен git init
git rev-parse --show-toplevel
.gitignore
Часто бывает нежелательным отслеживать все изменения до единого.
Если Вы хотите
сфокусироваться на основном коде, можно создать файл
.gitignore
и добавить туда
расширения файлов, которые Вы не будете добавлять в репозиторий.
Пример файла
.gitignore
в котором мы указываету git не следить за ошибками, логами
директорией .tmp и модулями
nodejs
# Ignoring:
*.err
*.log
node_modules/
.tmp/
Подробнее про составление правил для
.gitignore
читайте в статье
«Синтаксис .gitignore»
git hash-object
$ echo "HeiHei.ru" | git hash-object --stdin
0bdb2c54a9617d62b661102a4862b417d7bdde9b
Article author: Andrei Olegovich