Please enable JavaScript.
Coggle requires JavaScript to display documents.
GIT система контроля версий Набор консольных утилит, которые…
GIT
система контроля версий
Набор консольных утилит, которые отслеживают и фиксируют изменения в файлах.
Распределенная
система, не зависит от центрального сервера, на котором хранятся файлы. Работает полностью локально, сохраняя данные в папках на диске, которые называются репозиторием. Можно также хранить репозитории онлайн github, gitlab, bitbucket
Установка
Linux
- с помощью пакетного менеджера (sudo apt-get install git)
Windows
- git for windows
OS X
- homebrew, brew install git
Настройка
Есть довольно много опций.
Имя пользователя (
git config --global user.name "My name"
)
Адрес эл. почты (
git config --global user.email
myEmail@example.com
)
Теперь каждое наше действие будет отмечено именем и почтой.
Репозиторий
набор папок и файлов на диске
Хранит свои папки, файлы и историю прямо в папке проекта.
Команды
Локальный репозиторий
Определение состояния
git status
- показывает информацию о текущем состоянии репозитория (актуальность, изменения и т.д)
Подготовка файлов
Концепция области подготовленных файлов.
Можно представить как холст на который наносят изменения, которые нужны в коммите.
Сперва он пустой, но замет мы добавляем на него файлы (части файлов, или даже одиночные строчки) командой
add
, и наконец коммитим все в репозиторий (создаем слепок нужного нам состояния) командой
commit
$
git add
test.txt // add file
$
git add -A
// add all in directory
$ git status // проверка статуса после добавления файл готов к коммиту, но файлы могут быть модифицированы или удалены
$ git rm --cached ... // to unstage
Коммит
(фиксация изменений в локальный репозиторий, директория
.git
)
Представляет состояние репозитория в определенный момент времени. Похоже на снапшот, к которому можно вернуться и увидеть состояние объектов на определенный момент времени.
Должно быть хотя бы одно изменение в области подготовки.
$
git commit
-m "Initial commit" // с комментарием
Создание нового репозитория
Нужно зайти в папку проекта
выполнить команду
init
(создание скрытой директории
.git
, где будет храниться история репозитория и настройки)
Удаленные репозитории
Подключение к удаленному репозиторию
GitHub
BitBracket
GitLab
или любой другой сервис
Чтобы связать наш локальный репозиторий с удаленным нужно выполнить команду
$
git remote add origin
http://github.com/test/test-prj.git
Проект может иметь несколько удаленных репозиториев одновременно. Чтобы их различать, дадим им разные имена. Обычно главный репозиторий называется
origin
Отправка изменений на сервер
Обновление данных в удаленном репозитории
push
- принимает два параметра
имя удаленного репозитория (
origin
)
ветку, в которую нужно внести изменения (
master
- ветка по умолчанию для всех репозиториев)
$
git push origin master
Может потребоваться аутентификация
Клонирование репозитория
Вы может скачать полностью работоспособную копию проекта при помощи команды
clone
$ git clone
https://github.com/test/testprj.git
Новый локальный репозиторий создается автоматически с GitHub в качестве удаленного репозитория
Запускать нужно из директории где будет храниться локальный репозиторий
Запрос изменений с сервера (
pull
)
$
git pull origin master
Ветвление
Во время разработки новой ф-ти считается хорошей практикой работать с копией оригинального проекта, которую называют
веткой
.
Ветви имеют свою собственную историю и изолированны друг от друга, до тех пор пока вы не решите слить изменения вместе.
Причины ветвления:
уже рабочую, стабильную версию кода сохраняется
различные новые ф-ции могут разрабатываться параллельно разными разработчиками
разработчики могут работать с собственными ветками, без риска что кодовая база поменяется из-за чужих изменений
в случае сомнения различные реализации одной и той же идеи могут быть разработаны в разных ветках и затем сравниваться.
Создание новой ветки
Основная ветка в каждом репозитории называется
master
$
git brach
name // создаст новую ветку, точную копию
master
Переключение между ветками
$ git branch // список веток
Активная ветка помечена *
$
git checkout
branch-name // переключаемся на другую ветку
Слияние веток
(merge)
$
git merge
testbranch // Объединение веток, применение изменений из ветки к основной версии проекта
$
git branch -d
testbrach // удаляем ветку
Дополнительно
Отслеживание изменений сделанных в коммитах
У каждого коммита есть свой уникальный ID в виде строки цифр и букв.
$
git log
// список всех коммитов и их ID
commit 0eaecc6e8e1d4627ec56cd9afaf5cb3a791035b8 (HEAD -> master)
Author: kajam
kajam@reso.ru
Date: Tue May 28 17:22:12 2019 +0300
New feature complete.
$
git show
0eaecc // просмотр изменений в коммите
$
git diff
0eaecc..4c3578 // разница между коммитами
Возвращение файла к предыдущему состоянию
$
git checkout
0eaecc test.txt // вернуть файл к состоянию на момент определенного коммита.
Исправление коммита
(опечатались в комметариях или забыли добавить файл)
$
git commit
-amend // добавляет все из последнего коммита в область подготовленных файлов и пытается сделать новый коммит
Для более сложных изменений, например не в последнем коммите или изменения уже были отправлены на сервер, нужно использовать
revert
Самый последний коммит доступен по алиасу
HEAD
$
git revert
HEAD // создает коммит отменяющий изменения, совершенные в коммите с заданным id
$
git revert
b10cc123
При отмене старых изменений нужно быть готовым к тому что возникнут конфликты. Такое случается если файл был изменен еще одним более новым коммитом. И теперь гит не может найти строчки, состояние которых нужно откатить, так они больше не существуют.
Разрешение коммитов при слиянии
Иногда они разрешаются автоматически, но обычно с ними приходится разбираться в ручную - решать какой код остается, а какой нужно удалить.
<<<<<<< HEAD // Use a for loop to console.log contents.
for(var i=0; i<arr.length; i++) { console.log(arr[i]); } ======= // Use forEach to console.log contents. arr.forEach(function(item) { console.log(item); }); >>>>>>> Tim's commit.
Над разделителем ======= мы видим последний HEAD коммит, а под ним конфликтующий. Таким образом мы видим чем они отличаются и можем решить какая версия лучше. Или вовсе написать новую.
Когда все закончено нужно сохранить изменения и закоммитить
$
git add
-A
$
git commit
-m "Message"
Настройка
.gitignore
В большинстве проектов есть файлы или директории, в которые мы не хотим коммитить. Мы можем удостовериться что они случайно не попадут в git add -A при помощи
.gitignore
создайте вручную файл .gitignore и сохраните его в директорию проекта
перечислите названия файлов, папок, которые нужно игнорировать, каждый с новой строки
Файл, должен быть добавлен, закоммичен и отправлен на сервер
Примеры файлов которые нужно игнорировать
логи
артефакты систем сборки
папки node_modules в проектах node.js
папки созданные IDE, NetBeans, IDEA
разнообразные заметки разработчика
*.log
build/
node_modules/
.idea/
my_notes.txt
Символ слеша в конце означает директорию (рекурсивно игнорируем все ее содержимое)
как обычно означает шаблон