Skip to content
Java Online Projects edited this page Nov 15, 2023 · 109 revisions

Git

Правила работы с патчами на проекте

  • Как накатывать патчи есть в видео вступительного занятия Работа с проектом
  • Все изменения в ветке master проекта производятся только патчами из урока (Apply Patch), а cвой код (домашние задания) комитьте только в ветки HWxx. Все патчи урока обязательны и применяются по порядку. Если при применении патча предлагается мердж, cмотрите: patch не накатывается, предлагает merge - вы где то ошиблись с патчами.

ВНИМАНИЕ! проверьте при коммите, что галочка справа Optimize imports выключена, иначе ваши классы будут отличаться от тех, что в репозитории.

  • Делать Apply Patch лучше по одному, непосредственно перед видео на эту тему, а при просмотре видео сразу отслеживать все изменения кода проекта по изменению в патче (Version Control->Local Changes-> Ctrl+D на файле, Alt + Left/Right для просмотра следующего изменения):

image

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

image

  • commit настоятельно рекомендую делать после каждого патча (тогда изменения в проекте смотреть легче и искать ошибки в комитах гораздо проще), а push - после всех патчей/коммитов урока (откатываться проще и работы меньше).

  • После патча часто полезно запустить и посмотреть на работу приложения (если оно запускается).

  • Правило: Перед каждым изменением проверяйте что меняется: Ctrl+D по всем файлам ченджлиста. Если только пробелы - делайте revert.

Как вести проект в локальном репозитории

Вступительное занятие:

  • apply patch Prepare_to_HW0.patch
  • git commit
  • проверить, что все изменения корректно закомитилось (в Version Control:Local Changes пусто) -> push

Домашнее задание HW0:

  • создать ветку HW0: в IDEA внизу справа + New Branch ->HW0

new_branch

  • выполняете Домашнее Задание (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: branch

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

image

Как применить patch?

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

image

Как откатить patch?

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

resetcurrentbranch

Если изменения уже запушили, то нужно их перетереть новым push --force

В IDEA в protected branches убрать ветки, на которые требуется force push:

git_force git_force2


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

update

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

image image

Можно выбирать отдельные файлы и делать несколько Shelve

Сравнить файл после определенного патча на github с локальным

1. Идем в историю коммитов репозитория проекта:

image

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

image

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

image

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

image

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 на файле: idea_history или на истории изменений Version Control->Log

idea_revision и двойном щелчке на файле.

Сравнивать можно в github с текущей версией проекта либо с соответствующей ревизией:

github_revision


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

github_raw

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

compare_with_clipboard

Если ваш файл совпадает с тем, что в репозитории, и патч все равно не накатывается, напишите мне в личку имя файла, номер патча и проблемные строки, я поправлю патч. Картинок с вашими ошибками слать НЕ НАДО, учимся грамотно определять и описывать проблему.

Или можно радикально решить проблему, склонировав наш общий проект

Дополнительно: 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_ ваш функционал. Это можнт повторяться несколько раз.

Test_sidebar

Clone this wiki locally