Git
Git
Основы работы с системами контроля версий в IntelliJ IDEA
Правила работы с патчами на проекте
- Как накатывать патчи есть в видео вступительного занятия Работа с проектом
- Все изменения в ветке
masterпроекта производятся только патчами из урока (Apply Patch), а cвой код (домашние задания) комитьте только в веткиHWxx. Все патчи урока обязательны и применяются по порядку. Если при применении патча предлагается мердж, cмотрите: patch не накатывается, предлагает merge - вы где то ошиблись с патчами.
ВНИМАНИЕ! проверьте при коммите, что галочка справа
Optimize importsвыключена, иначе ваши классы будут отличаться от тех, что в репозитории.
- Делать Apply Patch лучше по одному, непосредственно перед видео на эту тему, а при просмотре видео сразу отслеживать все изменения кода проекта по изменению в патче (
Version Control->Local Changes-> Ctrl+D на файле, Alt + Left/Right для просмотра следующего изменения):

- при первом Apply надо выбрать имя локального ченджлиста
Name: Changes. Все остальные патчи (если имя не менять) будут также в него попадать.

-
commitнастоятельно рекомендую делать после каждого патча (тогда изменения в проекте смотреть легче и искать ошибки в комитах гораздо проще), аpush- после всех патчей/коммитов урока (откатываться проще и работы меньше). -
После патча часто полезно запустить и посмотреть на работу приложения (если оно запускается).
-
Правило: Перед каждым изменением проверяйте что меняется: Ctrl+D по всем файлам ченджлиста. Если только пробелы - делайте revert.
Как вести проект в локальном репозитории
Вступительное занятие:
- apply patch
Prepare_to_HW0.patch git commit- проверить, что все изменения корректно закомитилось (в
Version Control:Local Changesпусто) -> push
Домашнее задание HW0:
- создать ветку
HW0: в IDEA внизу справа+ New Branch ->HW0

- выполняете Домашнее Задание (HW0)
- проверить каждое изменение в
Version Control:Local Changes-> commit - выполняете HW0 Optional
- проверить каждое изменение в
Version Control:Local Changes-> commit - проверить в
Version Control:Log, что все изменения корректно закомитились и вVersion Control:Local Changesпусто -> push
Урок 1:
- переключаемся на
master: в IDEA внизу справаLocal Branches -> master -> checkout - apply каждый патч урока
Lesson01. - проверить каждое изменение в
Version Control:Local Changes-> commit - проверить в
Version Control:Log, что все патчи корректно закомитились и вVersion Control:Local Changesпусто -> push
Домашнее задание HW1:
- создать ветку
HW1: в IDEA внизу справа+ New Branch ->HW1 - выполняете HW1
- проверить каждое изменение в
Version Control:Local Changes-> commit - выполняете HW1 Optional
- проверить каждое изменение в
Version Control:Local Changes-> commit - проверить, что все изменения корректно закомитились в
Version Control:Log, вVersion Control:Local Changesпусто -> push
Урок 2:
- переключаемся на
master: в IDEA внизу справаLocal Branches -> master -> checkout - apply каждый патч урока
Lesson02. - проверить каждое изменение в
Version Control:Local Changes-> commit - проверить в
Version Control:Log, что все патчи корректно закомитились и вVersion Control:Local Changesпусто -> push - ...
Так должна выглядеть ваш Version Control -> Log:

Как вернуть отсутствующую вкладку Local Changes внутри версии Control/Git`

Как применить patch?
- Скачайте патч в папку проекта (например сделайте в корне каталог
patch) - Кликните на патче правой кнопкой и сделайте Apply Patch

- Если проблема с патчем, смотрите Patch не накатывается (предлагает merge)
Как откатить patch?
Version control -> Log
Правой кнопкой на нужной ревизии -> Reset Current Branch to Here
Soft- оставить все изменения, Hard - все затереть (в том числе локальные изменения)

Если изменения уже запушили, то нужно их перетереть новым push --force
В IDEA в protected branches убрать ветки, на которые требуется force push:

Обновить проект из github: Ctrl+T

Сохранить-восстановить Local Changes

Можно выбирать отдельные файлы и делать несколько Shelve
Сравнить файл после определенного патча на github с локальным
1. Идем в историю коммитов репозитория проекта:

- Выбираем просмотр репозитория после нужного патча

- Выбираем проблемный файл в формате
Raw

- Копируем в буфер и сравниваем со своим в IDEA

Patch не накатывается (предлагает merge)
Вероятнее всего Ваша ветка master не соответствует моей.
Нужно просто сравнить проблемный файл без игнорирования пробелов (вверху сравнения режим Do not ignore).
Например открываете проблемный класс на github в режиме Raw (кнопка справа вверху над классом, например https://raw.githubusercontent.com/JavaWebinar/topjava02/master/src/main/java/ru/javawebinar/topjava/web/meal/UserMealRestController.java, копируете его (Ctrl+A, Ctrl+C) и сравниваете со своим в IDEA: View->Compare with Clipboard.
В более общем случае (когда github уже ушел вперед) посмотреть содержимое файла для определенной версии в IDEA можно
через Git->History на файле:
или на истории изменений Version Control->Log
и двойном щелчке на файле.
Сравнивать можно в github с текущей версией проекта либо с соответствующей ревизией:

Сравнить содержимое можно скопировав содержимое из github в буфер:

и сделать Compare with clipboard в IDEA:

Если ваш файл совпадает с тем, что в репозитории, и патч все равно не накатывается, напишите мне в личку имя файла, номер патча и проблемные строки, я поправлю патч. Картинок с вашими ошибками слать НЕ НАДО, учимся грамотно определять и описывать проблему.
Или можно радикально решить проблему, склонировав наш общий проект
Дополнительно: Resolving Git Merge Conflicts in IntelliJ IDEA
Чем просматривать локально файлы в формате markdown ?
- в IDEA, плагин Markdown Navigator
- в Chrome, плагин Markdown Preview (в опциях надо разрешить открывать файлы по ссылкам)
- можно вчекинить уроки себе с github репозиторий и смотреть через github
Если все поломалось:
- откатываете ревизии до "хорошего" патча Как откатить patch с выбором
Hard(все локальные изменения также пропадут). Затем накатываете патчи заново по порядку. - Сделайте fork, либо
cloneс нашего репозиторий c уже примененными патчами (см ниже).
Клонирование проекта
- Создайте локальную копию проекта:
git clone https://github.com/..../project - Перейдите в каталог проекта:
cd project - Настройте git в локальном проекте на свой проект в GitHub:
git remote -v-
git remote set-url origin url_на_твой_репозиторий.git- настройка pull -
git remote set-url --push origin url_на_твой_репозиторий.git- настройка push -
git push -u origin master- первый push в свой репозиторий
Манипуляции с коммитами до push:
Клик на ревизии в Local Changes и -> Interactively Rebase from Here...
-
action -> squash- Склеить - другие действия
Какие должны быть коммиты
Основное - коммит желательно относить к одному функционалу и после него код проекта был рабочий (конечно же бывают исключения). На большие комиты сложно делать ревью и их сложно тестировать. Если к комиту можно написать краткий красивый комментарий о том, что он делает (внимание: бизнес назначение функционала - именно ЧТО, а не КАК) - то обычно все ок. При разработке его можно трактовать как save point в игре - точка, с которой можно восстановиться, когда вас убили или все плохо:) Если они слишком частые-маленькие, при заливке в рабочий проект их можно объединять (см. выше).
Если проект большой, при разработке функционала (фичи) в проекте находятся места, которые хочется отрефакторить, коммит начинает разрасттаться и включать в себя самый разный функционал. В этом случае кладете код на полку (_Shelve Changes..._), делаете рефакторинг отдельным комитом (убеждаетесь, что после рефакторинга все ок, проект рабочий) и возвращаете из _Shelf_ ваш функционал. Это можнт повторяться несколько раз.