Git (произн. «гит») — распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. На сегодняшний день его поддерживает Джунио Хамано.
СВК - это система контроля версий
- Установка GIT
- Кофигурация
- Просмотр информации и состояние изменения файлов проекта
- Основы Git - Запись изменений в репозиторий
- Определение состояния файлов ($ git status);
- Отслеживание новых файлов;
- Фиксация изменений;
- Удаление файлов;
- Перемещение файлов;
- GIT Ветление
- Работа с удаленными репозиториями
- GIT хостинг;
- Origin;
- Получение и отправка файлов на удаленный гит репозиторий;
- Archive - добавить каталог в архив;
Скачать и установить GIT можно на сайте : https://git-scm.com/downloads
###Общие алиасы
git status, git add, git commit, git checkout — общие команды, для которых полезно иметь сокращения. Для пользователей Windows.Добавить алиасы следует в ~/.gitconfig file:
[alias]
st = status
ci = commit
br = branch
co = checkout
df = diff
dc = diff --cached
lg = log -p
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
ls = ls-files
Выполнить алиасы можно командами:
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.hist 'log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short'
git config --global alias.type 'cat-file -t'
git config --global alias.dump 'cat-file -p'
###Глобальные настройки :
$ git config --global user.name 'Vlad Voitovich'
$git config --global user.email [email protected]
В глобальные настройки прописываем свое имя и email для комитов (commit)
Для просмотра списка конфигов:
$ git config --list
Чтобы создать git репозиторий в каталоге, выполните команду git init.
$ git init
Предназначен для игнорирования файлов, в которых не следует отслеживать изменения. В файле достаточно указать путь к файлам:
node_modules/
src/libs/
Предназначен для описания проекта или инструкций.
-
$ git reflog
- основные логи последних изменений в проекте. -
$ git diff
- изменения между предыдущей и последней версии фала. ( $ git diff c784s...42asd21) Аналог git diff > git --staged$ git diff -b
- игнорирование всех изменений в пробелах$ git diff -w
- игнорирование всех пробелов
-
$ git show d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
- изменения, сделанные в заданном коммите. -
$ git blame file.txt
- изменения, сделанные в заданном коммите. -
$ git ls -tree
- показывает дерево файлов и изменений.
$ git log
- просмотр логов, историю коммитов изменений проекта.
В результате выполнения git log в данном проекте, вы должны получить что-то вроде этого:
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <[email protected]>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <[email protected]>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
По умолчанию, без аргументов, git log выводит список коммитов созданных в данном репозитории в обратном хронологическом порядке. То есть самые последние коммиты показываются первыми. Как вы можете видеть, эта команда отображает каждый коммит вместе с его контрольной суммой SHA-1, именем и электронной почтой автора, датой создания и комментарием.
Существует превеликое множество параметров команды git log и их комбинаций, для того чтобы показать вам именно то, что вы ищете. Здесь мы покажем вам несколько наиболее часто применяемых.
Один из наиболее полезных параметров — это -p, который показывает дельту (разницу/diff), привнесенную каждым коммитом. Вы также можете использовать -2, что ограничит вывод до 2-х.
options:
- ` --all` - отобразить все.
- ` --color` - логи с цветом.
- ` --graph` - показывать ASCII-граф истории ветвлений и слияний рядом с выводом лога.
- ` --decorate` - логи с branch и tag names.
- ` --stat` - для каждого коммита дополнительно выводить статистику по изменённым файлам.
- ` --shortstat` - показывать только строку changed/insertions/deletions от вывода с опцией --stat.
- ` --name-only` - показывать список изменённых файлов после информации о коммите.
- ` --name-status` - выводить список изменённых файлов вместе с информацией о добавлении/изменении/удалении.
- ` --abbrev-commit` - выводить только первые несколько символов контрольной суммы SHA-1 вместо всех 40..
- ` -p` - для каждого коммита показывать дельту внесённых им изменений
- ` --word-diff` - показывать изменения на уровне слов.
- ` --merge` - только коммиты слияний.
- `--pretty=oneline` - отображать коммиты в альтернативном формате. Возможные параметры: oneline, short, full, fuller и format (где вы можете указать свой собственный формат).
- `-(n)` - показать последние n коммитов.
- `--since, --after` - ограничить коммиты теми, которые сделаны после указанной даты.
- `--until, --before` - ограничить коммиты теми, которые сделаны до указанной даты.
- `--author` - показать только те коммиты, автор которых соответствует указанной строке.
- `--committer` - показать только те коммиты, коммитер которых соответствует указанной строке.
- ` --reverse` - история изменений в обратном порядке.
Можно использовать универсальную команду:
$ git log --oneline --graph --all --decorate
$ git status
- основной инструмент, используемый для определения, какие файлы в каком состоянии находятся.
Для того чтобы начать отслеживать (добавить под версионный контроль) новый файл, используется команда git add. Чтобы начать отслеживание файла README, вы можете выполнить следующее:
-
$ git add "file_name"
- добавить в буфер файл. -
$ git add "folder"
- добавить папку с файлами в буфер. -
$ git add all
или$ git add .
- добавить все файлы в буфер.
Вы можете видеть, что файл проиндексирован по тому, что он находится в секции “Changes to be committed”. Если вы выполните коммит в этот момент, то версия файла, существовавшая на момент выполнения вами команды git add, будет добавлена в историю снимков состояния. Как вы помните, когда вы ранее выполнили Git-init, вы затем выполнили git add (файлы) — это было сделано для того, чтобы добавить файлы в вашем каталоге под версионный контроль. Команда git add принимает параметром путь к файлу или каталогу, если это каталог, команда рекурсивно добавляет (индексирует) все файлы в данном каталоге.
-
$ git commit -m "file_name"
-
$ git commit -v
- более подробное напоминание того, что именно было изменено -
$ git commit --amend или git commit -a -m (-am)
- если у вас есть желание пропустить этап индексирования.
Это приведёт к тому, что в комментарий будет также помещена дельта/diff изменений, таким образом вы сможете точно увидеть всё, что сделано.) Когда вы выходите из редактора, Git создаёт для вас коммит с этим сообщением (удаляя комментарии и вывод diff'а).
Для того чтобы удалить файл из Git'а, вам необходимо удалить его из отслеживаемых файлов (точнее, удалить его из вашего индекса) а затем выполнить коммит. Это позволяет сделать команда git rm, которая также удаляет файл из вашего рабочего каталога, так что вы в следующий раз не увидите его как “неотслеживаемый”.
$ git rm <file>
$ git mv file_from file_to
Git неявно определяет, что произошло переименование, поэтому неважно, переименуете вы файл так или используя команду mv. Единственное отличие состоит лишь в том, что mv — это одна команда вместо трёх — это функция для удобства. Важнее другое — вы можете использовать любой удобный способ, чтобы переименовать файл, и затем воспользоваться add/rm перед коммитом.
-
$ git branch
- получаем список веток, с которыми работаем (вездочкой отмечена текущая ветвь). -
$ git branch -a
- просмотреть все существующие ветви. -
$ git branch some_branch
- создать новый бранч (ответвится от текущего). -
$ git checkout -b
- создать и переключиться на бранч. -
$ git branch -m
- пере бранча. -
$ git branch -d some_branch
- удалить бранч (после мерджа). -
$ git branch -r
- список всех удаленных брачей. -
$ git branch -D some_branch
- просто удалить бранч (тупиковая ветвь). -
$ git checkout some_branch
- переключиться на данную ветку.
-
$ git reset
- говорит о том, что мы можем перемещатся на предыдущие комиты и записывать изменения снова.Существует 3 типа reset:
-
$ --soft
- просто возвращает нас к заданному комиту не меняя комит или файлы в буфере. -
$ --mixed
- перемещает head на заданный комит, при этом меня буфер. -
$ --hard
- полностью удаляет файлы заданного комита.
-
-
$ git merge <branch>
- слияние текущей ветки с мастер. -
$ git merge <branch> --no-commit
-
$ git merge <branch>
-s ours - слияние текущей ветки , но отбрасывая любые изменения в ветвлении, используя текущее дерево, как новое. -
$ git merge --no-ff branch
- заставляет сделать коммит слияния. -
$ git merge --ff-only
- не делать быстрого слияния. -
$ git merge --abort
- оборвать слияние.
$ git mergetool
При слиянии могут возникать конфликты. head указывает на код мастера.Конфликты редактируются в основном вручную.
Часто возникает такая ситуация, что пока вы работаете над частью своего проекта, всё находится в беспорядочном состоянии, а вам нужно переключить ветки, чтобы немного поработать над чем-то другим. Проблема в том, что вы не хотите делать коммит с наполовину доделанной работой только для того, чтобы позже можно было вернуться в это же состояние. Ответ на эту проблему — команда git stash.
$ git stash save "Change file"
- сохраняем файлы в копилку stash.
Теперь вы хотите поменять ветку, но не хотите делать коммит с тем, над чем вы ещё работаете; тогда вы прячете эти изменения. Чтобы создать новую "заначку", выполните git stash:
$ git stash
Saved working directory and index state \
"WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file
(To restore them type "git stash apply")
-
$ git stash list
- просмотр списка файлов в копилке. -
$ git stash apply
- применить слияние файлов проекта и копилки, без удаления файлов в самой копилке. -
$ git stash drop "name_stash"
- удалить файлы из копилки. -
$ git stash show <stash-name> -p
- откат применения спрятанных изменений. -
$ git stash clear
- очистить копилку. -
$ git stash pop
- мы применяем файлы из копилки в проект , с удалением из копилки.
Для работы с удаленными репозиториями нужен GIT хостинг. 2 самых популярных :
1. Github (https://github.com/)
2. Bitbucket (bitbucket.org)
Главное отличие между ними - github.com предоставляет открытый хостинг бесплатно, а для закрытых проектов платные тарифы. В отличии от github , bitbucket предоставляет бесплатно закрытый хостинг.
Как только создали новый проект следует созадать README.md, написать git-init, закомитить проект git commit, и отправить на удаленный гин хостинг.
В консоль прописываем так:
- ` echo "# test" >> README.md.`
- `$ git init`
- `$ git add README.md`
- `$ git commit -m "first commit"`
- `$ git remote add origin https://github.com/MrVladevoit/test.git`
- `$ git push -u origin master`
Если уже имеется проект на локальной машине :
- $ git remote add origin https://github.com/MrVladevoit/test.git
- $ git push -u origin master
-
$ git remote
- все удаленные репозитории. -
$ git fetch <remote>
- получаем все файлы, что есть на удаленном репозитории. -
$ git clone
- клонирование репозитория с удаленного сервера на локальный компьютер. -
$ git pull
- получает все файлы с удаленного репозитория и производит сразу слеяние (Merge). -
$ git push
- отправить файлы на удаленный гит репозиторий. -
$ git push origin <branch>
- заставляет сделать коммит слияния.
-
$ git archive master tar -x -C /somewhere/else
-
$ git archive --format zip --output /full/path master