-
Notifications
You must be signed in to change notification settings - Fork 3k
- Как накатывать патчи есть в видео вступительного занятия Работа с проектом
- Все изменения в ветке
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
: в 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
- переключаемся на
master
: в IDEA внизу справаLocal Branches -> master -> checkout
- apply каждый патч урока
Lesson01
. - проверить каждое изменение в
Version Control:Local Changes
-> commit - проверить в
Version Control:Log
, что все патчи корректно закомитились и вVersion Control:Local Changes
пусто -> push
- создать ветку
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
- переключаемся на
master
: в IDEA внизу справаLocal Branches -> master -> checkout
- apply каждый патч урока
Lesson02
. - проверить каждое изменение в
Version Control:Local Changes
-> commit - проверить в
Version Control:Log
, что все патчи корректно закомитились и вVersion Control:Local Changes
пусто -> push - ...
Так должна выглядеть ваш Version Control -> Log:
- Скачайте патч в папку проекта (например сделайте в корне каталог
patch
) - Кликните на патче правой кнопкой и сделайте Apply Patch
- Если проблема с патчем, смотрите Patch не накатывается (предлагает merge)
Version control -> Log
Правой кнопкой на нужной ревизии -> Reset Current Branch to Here
Soft
- оставить все изменения, Hard
- все затереть (в том числе локальные изменения)
Если изменения уже запушили, то нужно их перетереть новым push --force
В IDEA в protected branches
убрать ветки, на которые требуется force push:
Можно выбирать отдельные файлы и делать несколько Shelve
1. Идем в историю коммитов репозитория проекта:- Выбираем просмотр репозитория после нужного патча
- Выбираем проблемный файл в формате
Raw
- Копируем в буфер и сравниваем со своим в IDEA
Вероятнее всего Ваша ветка 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
- в 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 в свой репозиторий
Клик на ревизии в Local Changes
и -> Interactively Rebase from Here...
-
action -> squash
- Склеить - другие действия
Если проект большой, при разработке функционала (фичи) в проекте находятся места, которые хочется отрефакторить, коммит начинает разрасттаться и включать в себя самый разный функционал. В этом случае кладете код на полку (_Shelve Changes..._), делаете рефакторинг отдельным комитом (убеждаетесь, что после рефакторинга все ок, проект рабочий) и возвращаете из _Shelf_ ваш функционал. Это можнт повторяться несколько раз.