Если вы еще не используете Git - сейчас самое время начать.
Знания Git уже является обязательными для всех, кто ищет работу разработчика или создает крупный проект. Это стандарт в мире программирования.
Version Control System, VCS – это приложение, которое умеет хранить историю версий файлов и позволяет вернуться (откатиться) к любой версии.
Тем самым вы никогда не потеряете свой проект и сможете работать с ним из любого места, где есть интернет.
Git – самое популярный инструмент для работы с VCS, его используют 90% разработчиков ПО.
Создатель – Линус Торвальдс (который придумал Linux), 2005 год.
Git изначально сразу создавался для IT сферы, поэтому многие возможности направлены на программистов: совместная работа над одним файлом, безопасность, ограничения, права и многое другое.
Если вы задаете себе такой вопрос - значит вы никогда не работали с Git. Потому что если вы хорошо научились с ним работать - вы всегда будете использовать его в своих проектах по-умолчанию, т.к. он помогает в разработке и ускоряет все процессы.
Возможности Git:
- реализует концепцию распределенной VCS
- можно использовать для любых файлов, папок
- имеет большие возможности для командной разработки
- поддерживает все популярные среды разработки (IDE)
Не нужно делать ручные бекапы проектов и сохранять архивы (как это делают многие). Для этого есть Git
Почти все, что нужно для хранения версий проекта - все доступно бесплатно из коробки Git - нужно просто пользоваться
Если вы работает в команде - то без Git точно не обойтись. Все крупные компании используют какую-либо VCS
Вы можете работать со своим проектом из любого места, где есть интернет, а не только дома, т.к. все хранится в облаке
Как и при изучении разных технологий - большинство новичков допускают грубую ошибку, которая стоит им времени - пытаются объять сразу все и прыгнуть из нуля в профессионалы.
Но так не бывает. Будет каша в голове.
Поэтому нужно идти последовательно - от простого к сложному.
Сама по себе Git не такая простая система, как многим хотелось бы.
Поэтому лучше не усложнять себе жизнь и всегда максимально упрощать.
Да, как и любую другую технологию. Просто на это может уйти очень много времени.
Основная проблема в обучении Git - непонятно на что нужно сделать упор, а что пока можно пропустить. Какие особенности нужно понимать, как получить практику.
У вас есть возможность стартовать с места в карьер - для этого пройдите новый курс.
Вы сможете встать в один ряд с профессионалами, которые всегда и везде используют систему контроля версий. Она помогает им синхронизировать действия всей команды. Таким образом вы сможете кодить проект из любого места земного шара.
Git и разработка кода - это уже 2 неразлучных понятия, и если вы до сих пор еще не умеете работать с VCS - сейчас самое время начать.
Вы изучите все главные команды Git. Но не наобум, как многие, а последовательно, чтобы не запутаться.
Затем на основе простого Java проекта IDEA будете закреплять весь пройденный материал - разработка функционала с версионностью Git.
Все уроки усложняют материал последовательно, а не бросают с головой в омут, как это часто бывает.
Вы начнете с базовых операций в консоли, затем изучите основные концепции, потом более сложные принципы и т.д.
Также обязательно рассмотрите операции Git на Java проекте в IDEA.
Каждый шаг будем делать без прыжков - чтобы было понятно любому новичку
Помимо просто практических команд у вас будет тренировка на основе проекта в IDEA
Сразу с головой не будем прыгать в сложные темы. Лучше изучать постепенно.
Информация подается для новичков, поэтому супер сложные вещи проходить не будем. Это лучше делать отдельно.
Большая часть, где вы будете работать только в консоли, привыкать к основным командам. Сразу переходить к IDEA нельзя, т.к. не будете знать всю "внутреннюю кухню"
Тренировка на основе простого проекта, где по шагам будете создавать функционал и сразу использовать все основные Git возможности
Синхронизация с удаленным репозиторием, чтобы вы могли работать над проектом из любого места. Также любой человек тоже сможет дорабатывать ваш проект.
В основе приложения лежит какая-либо структура данных и алгоритмы, которые оптимально пытаются сохранить все версии файлов.
Существует несколько типов VCS. Это важно понимать, чтобы выбрать правильное приложение.
Место, где VSC хранит всю информация о ваших файлах: версии, метаданные, ветки, логи и пр.
Git изначально сразу создавался для IT сферы, поэтому многие возможности направлены на программистов: совместная работа над одним файлом, безопасность, ограничения, права и многое другое.
Основная ошибка многих новичков – они сразу пытаются изучать Git и применять все в общем командном проекте. В результате часто “ломают” проект, не понимают свои действия.
Установка непростая, т.к. много опций нужно выбрать - эти настройки можно изменять и после установки
Репозиторий создается в определенном каталоге (папке) – после этого папка находится по управлением Git: вы можете изменять файлы, удалять, добавлять и сохранять версии.
Статус выдает всю текущую информацию репозитория, ошибки, предупреждения. Опираясь на эту информацию – можно решать различные конфликтные ситуации.
Желательно заранее указать все нужные настройки, чтобы дальше уже не отвлекаться на них. Можно также изменять все настройки, которые выставляли при установке Git.
Для того, чтобы указать гиту, для каких файлов вы хотите сохранять версии – нужно выполнить команду add
Git сам автоматически НЕ сохраняет изменения в ваших файлах, вы должны явно выполнить для этого команду commit (переводится как “фиксация”).
При создании фиксации (commit) – для нее автоматически генерируется специальный идентификатор (хеш значение). По этому идентификатору вы сможете обращаться к этому коммиту в разных командах
Вы можете “заменить” последний коммит новым, исправленным. При этом hash идентификатор коммита в истории изменится.
Каждый коммит должен принадлежать какой-либо ветке (либо он может быть утерян, т.к. никуда не привязан – в конце концов он будет удален “сборщиком мусора” как в Java)
При добавлении нового коммита указатель HEAD автоматически переместит указатель на него (т.е. будет сам двигаться вверх).
В отличие от других VCS например Subversion – Git хранит не отличия для каждого файла (дельта, Revision), а слепок, моментальный снимок сразу всех файлов – Snapshot.
Как правильно изучать команды Git, чтобы понимать их работу, параметры, возможные значения
“Три дерева” (“Three Trees”) – это три хранилища, между которыми перемещаются файлы во время работы в Git.
Важный момент, о котором нужно обязательно помнить – значение файла может отличаться в деревьях (WD, Index, HEAD). Это понимание играет роль при восстановлении файлов и других операциях.
Вы можете фиксировать изменения из WD (самые актуальные) или из INDEX.
Это важно понимать, потому что в коммит могут попасть ТОЛЬКО изменения из INDEX, а не текущие фактические значения файла в WD
Если вам не нужен буфер INDEX и вы просто хотите зафиксировать все файлы (либо некоторые) напрямую из WD – можно использовать параметр -a.
При работе c Git – существуют разные состояния файлов. Если вы выполняете команду git add для untracked файлов – то они становятся tracked и добавляются в INDEX.
Для удобства – можно работать не в консоли, а в готовом визуальном инструменте Git GUI (это приложение git–gui из каталога cmd установки Git)
git-gui запускает приложение gitk из той же папки cmd. gitk отвечает за визуальное отображение истории коммитов.
Проверим с помощью инструмента Git GUI наше утверждение из прошлых уроков, что значения файлов в деревьях INDEX и WD – могут отличаться.
Команда commit без параметров – коммитит все изменения из INDEX. Команда commit -a (либо с конкретным указанием файлов) – коммитит все изменения из WD
Команда git restore восстанавливает значение файла в рабочем каталоге из источника (source)
Более частый вариант применение restore – это восстановление значения файла из какого-либо коммита (по идентификатору) – а не из INDEX (как команда работает по-умолчанию).
Для полного понимания – команда restore восстанавливает path – это все папки, подпапки с файлами. Если папка пустая – она не будет восстановлена. Если же в папке был файл – то папка восстановится.
Также с помощью restore можно удалить файл из INDEX. Тем самым вы выполняете unstage
revert – одна из нескольких команд, которая используется для отката к определенной версии файлов/папок. Но ей больше подходит слово “отмена”. Команда отменяет последовательно нужное количество коммитов (без их удаления).
Если вам нужно откатиться не к предыдущей версии, а к более ранней – это также можно сделать с помощью revert, но немного по-другому вызывать.
Существует вариант, когда revert не создает новые коммиты (параметр -n) и тем самым вы не будете “забивать” историю, как это было в прошлом уроке, где на каждый revert создавался новый коммит.
checkout – популярная команда, которая позволяет откатить состояние файлов в нужную версию (текст, папки, файлы). Также она используется, чтобы переключаться между ветками (будем изучать далее).
Detached HEAD (отсоединенный указатель или “оторванная голова”) – означает, что сейчас указатель не привязан к какой-либо ветке (или иногда говорят “привязан к анонимной ветке”)
Вы можете посмотреть историю всех коммитов, даже которые были в состоянии detached head. При необходимости можно обращаться к этим коммитам.
Часто новички спрашивают – как удалить ненужные коммиты – для этого как раз и может применяться reset. Хотя вместо слова “удалить” правильно говорить “отсоединить от ветки"
Восстановление цепочки удаленных коммитов нужно производить последовательно, друг за другом.
Основное назначение git diff – это сравнение и отображение разницы между двумя объектами:
Если запускать git diff просто без параметров – то сравниваются состояние файлов WD и INDEX.
Для того, чтобы сравнить состояние WD и HEAD – можно указать специальные параметры
Если вы используете буфер INDEX и добавили туда только нужные файлы для коммита (т.е. не все измененные файлы, а только нужные) – вы можете посмотреть разницу между ними и HEAD
Вы можете сравнивать между собой любые версии (коммиты) – чтобы понять чем они отличаются
По-умолчанию git diff сравнивает состояние всех измененных файлов, и это может вернуть слишком много информации
До сих пор мы рассматривали команду git diff, которая показывала все различия во всех найденных файлах.
Удобней смотреть различия файлов с помощью любого визуального редактора, например git-gui – это тот случай, когда лучше работать в приложении, чем в консоли
Вы можете использовать команду diff для сравнения вообще любых файлов или папок (например, нашли один и тот же проект в разных папках и хотите понять, в чем разница)
Чтобы понимать какие строки изменились - можно считывать служебную информацию.
Существует большое количество “шаблонов” – как правильно организовать проект – какие ветви создавать (основная, для тестирования, для релизов и пр.) Все зависит от принципов компании, тимлида.
В новой ветке вы можете экспериментировать как угодно, не боясь повлиять на основную ветку. Если вы довели до рабочего состояния доп. ветку – можно выполнить слияние – все изменения попадают из доп. ветки в основную
Во время работы можно переключаться между ветками. В этом случае состояние файлов будет сбрасываться на версию последнего коммита ветки.
При переключении на другую ветку – состояние файлов сбрасывается до версии последнего коммита ветки, на которую переключились.
Слияние может происходить между любыми ветками (не только с master). Для слияния – сначала нужно переключиться в ту ветку, куда хотите “слить” все изменения из другой ветки
Если вы точно уверены, что вам не понадобятся коммиты из доп. ветки – вы можете ее удалить, чтобы не отвлекаться на эту ветку в дальнейшем
Вы можете из состояния Detached HEAD создавать новые коммиты и добавлять их в новую ветку
Чтобы не потерять незакоммиченные изменения – их можно припрятать (временно). А чуть позже вернуть обратно в файлы.
Эти практические уроки нужно изучать только после прохождения основ Git. За основу возьмем задачу Music (легкий уровень), которую мы решали в курсе по ООП и основам Java:
Все нужные файлы добавим в состояние Tracked (отслеживаемые) – чтобы Git следил и управлял ими. Автоматически выполняется команда git add для нужных файлов/папок
Можно разом прописать в одном файле .gitignore все папки/файлы, на которые Git вообще не будет обращать внимание
Если вы работаете с буфером INDEX и сначала отправляете туда все нужные изменения, а оттуда уже коммитите – то в IDEA нужно включить опцию (Staging area)
Если вы не включали опцию Staging area – то при сохранении версии IDEA будет выполнять команду git commit -a -m "сообщение"
Можете настроить для себя окно Log, чтобы показывать только то, что нужно вам.
Решение задачи ООП с применением основных Git операций
Вы сможете сравнить изменения между последним коммитом (HEAD и вашим текущим WD – т.е. что именно отправится в коммит.
Вы можете сравнить текущее состояние ваших файлов (WD) с любой из версий истории (HEAD) – а не только с последним коммитом.
Вы можете сравнивать файлы из любых версий между собой. Это удобно, если хотите понять, чем отличаются коммиты друг от друга.
Во время разработки проекта вы можете вернуться (откатиться) в любую версию с помощью команды reset
Частая ситуация – вы хотите удалить лишние коммиты из истории, но не хотите терять локальные изменения, потому что уже много чего добавили.
Чтобы выделить рабочую версию коммита среди всех остальных – можно добавить к ней tag (метку)
Для того, чтобы попробовать реализовать что-то новое, но не портить главную ветку – можно создавать новую ветку и в ней проводить все эксперименты.
Самый идеальный вариант слияния веток – это когда не редактировались одни и те же строки и в мастер ветке не было новых коммитов после ответвления.
Наиболее частый вариант – это слияние веток с появлением конфликтов. Нужно их решить и завершить слияние.
GitHub – облачный хостинг для создания удаленных распределенных репозиториев Git.
Вы будете использовать удаленный репозиторий, чтобы отправлять туда все свои изменения из локального репозитория.
Чтобы успешно синхронизировать удаленный и локальный репозитории – нужно добавить аккаунт GitHub и ссылку на репозиторий
Нужно выполнить команду push – чтобы отправить данные локального репозитория в удаленный (GitHub) – синхронизировать.
Можно копить коммиты и потом разово отправлять их в удаленный репозиторий (push), а можно каждый коммит сразу отправлять.
Вы можете работать с проектом из любых мест и компьютеров, где есть интернет. Для этого просто клонируете репозиторий из GitHub себе в папку. Главное, чтобы там были закоммичены все последние изменения.
Очень частая ситуация, когда с разных мест “прилетают” коммиты в удаленный репозиторий.
Всегда выполняйте pull перед push, чтобы подкачать все изменения с удаленного сервера
Перед сохранением версии в общий репозиторий - нужно решить все конфликты
Вы можете попробовать первые бесплатные уроки из курса, чтобы понимать как подается информация, какие требования и многое другое.
Для прохождения - потребуется регистрация (если ранее еще не проходили).
В кабинете также доступны и другие бесплатные курсы.
Примерно 3 недели - это время, чтобы получить главный фундамент и далее его развивать. Вы не сможете сразу научиться полностью на 100% применять Git, т.к. у него много особенностей. Но сможете спокойно использовать Git в своих проектах и начать командную разработку.
Материалы будут идти по нарастающей сложности. Сами темы - "от простого к сложному" - в конце уже будете применять многие профессиональные принципы. Но не слишком усложнять, т.к. просто будет непонятно.
Да, сможете изучать на любом компьютере, независимо от операционной системы. Можно даже смотреть видео на мобильных устройствах, но сам код придется создавать на компьютере/ноутбуке.
Все исходные коды есть, там где они должны быть. Можно будет открывать в IntelliJ IDEA. Но я рекомендую все равно набирать весь код и команды вручную.
Git может использоваться для любых типов проектов. Даже для обычных файлов.
Нет, для этого будет отдельный курс - полностью как работать с Git в команде.
Вы сможете изучать материалы в любое время и также задавать любые вопросы без ограничений.
Будет доступна группа в телеграмме и также комментарии под каждым уроком.
Вы не останетесь один на один с проблемой - будут отвечать как автор, так и другие участники.
После оплаты вам открывается курс в кабинете.
Доступ - без ограничений по времени. Сможете в любое время заходить и изучать обновленные уроки.
Сможете открывать готовые проекты и исходные коды, чтобы посмотреть рабочий вариант.
Но лучше самому с нуля набивать все коды и команды, чтобы лучше запомнить.
Если вы хотите изучить эти или любые другие материалы с личной поддержкой преподавателя - можете посмотреть раздел коучинг, где все подробно расписано.
В зависимости от вашего текущего уровня - вся программа будет построена под вас.
Вы намного быстрее пройдете весь путь до момента, когда сможете уже двигаться дальше.