Предыдущий ролик Следующий ролик  

Видео урок: Второй пример: исправление ошибок

Принципы контроля версий

Мы закончили на том, что создали хранилище и внесли в него несколько изменений. Когда вы делали это в час ночи, вам все нравилось. На следующий день вы открываете myprog.c и понимаете, что Func1 - это не совсем то, что вы хотели. Поэтому вы ее удаляете, и, уже по привычке, вносите изменения снова. Затем в творческом порыве вы добавляете Func3, и, конечно, фиксируете и ее. Немного подумав, вы решаете перенести некоторую функциональность из из Func3 в Func2.

Вы открываете myprog.c и снова начинаете ее редактировать. В середине этого процесса, уже сохранив myprog.c на диск и уничтожив предыдущую версию, вы понимаете, что это не будет работать. Когда вы еще не использовали контроль версий, вы начинали нервно вспоминать, где ваша резервная копия. В папке "самая лучшая финальная с исправлениями" или "самая лучшая отправить клиенту"? А затем вы выясняли, как восстановить работу. Но теперь, когда у вас есть контроль версий, вы просто возвращаете myprog.c к последней версии из хранилища и снова готовы двигаться вперед, в режиме супергероя. Теперь давайте посмотрим на это в командной строке.

Итак, мы возвращаемся в командную строку. Как и прежде, мы - внутри папки fsvc1, в которой находится исходный код нашей myprog.c. Давайте откроем myprog.c и удалим Func1. Теперь запустим команду git diff и посмотрим, как отличаются наш рабочий набор и содержимое хранилища. Сейчас у нас есть только один файл, но могут быть и более сложные ситуации.

Скорее всего, вы захотите указать либо файл, с которым вы работаете, или подмножество в папке. В противном случае вы можете получить страницы, страницы и страницы истории. Итак, мы видим, что перед кодом Func1 стоит минус, и он выделен красным, что значит, что код был удален. Давайте внесем это изменение, а затем, так как вы уже начинаете доверять контролю версий, и сейчас нет необходимости просматривать журнал, мы просто пойдем дальше и добавим Func3.

Итак, мы возвращаемся, редактируем файл, сохраняем его и вносим изменения. Хорошо, теперь мы можем запустить git log --oneline --all и увидеть все наши изменения. Начнем читать снизу: мы добавили Func1, добавили Func2, удалили Func1, добавили Func3.

Мы видим полный список коммитов. Так как теперь у нас есть все номера. Мы можем запустить команду git diff, чтобы сравнить наше третье изменение, Add Func2, и самое последнее, Add Func3. Вводим git diff и затем номера, 7555e83 и 4b8ed72, и, как видите, он показывает, что между этими двумя версиями мы удалили Func1 и добавили Func3.

А теперь давайте еще раз отредактируем myprog.c и удалим Func3, а затем сохраним файл. Как видите, в myprog.c больше нет Func3. Потом мы понимаем, что не хотели ее удалять. Чтобы выяснить точно, какую версию мы хотим восстановить (хотя в данном случае мы знаем, что самую последнюю), в Git можно ввести git diff HEAD, и он покажет нам разницу между хранилищем и рабочим набором - т.е., что в рабочем наборе удалена Func3.

Итак, мы хотим восстановить наш рабочий набор до последнего состояния, которое находится в хранилище. Так что теперь мы вводим git checkout myprog.c, а затем, если мы откроем файл, то увидим восстановленную Func3. Теперь мы сможем проверить состояние системы контроля версий, введя git diff HEAD, и вы увидите, что текущий рабочий набор и хранилище никак не отличаются.

Мы запустили git diff, чтобы увидеть, что у нас нет никаких различий между рабочим набором и хранилищем. Еще один способ проверить, обновлено ли хранилище до состояния вашего рабочего набора - это команда git status. Она тоже покажет, что фиксировать нечего. На данный момент давайте поработаем со всей этой папкой, включая скрытую папку git. Помните, что у нас есть скрытая папка git, а внутри ее - целая куча дополнительных папок и файлов, которые отслеживают информацию о версиях. Это - информация хранилища.

Сейчас я заархивирую всю эту папку и положу архив в каталог Exercise Files. Если вы распакуете его в любую папку, какую захотите, и перейдете к ней в git, вы можете ввести git log --oneline -all и увидеть все, что мы до сих пор сделали в этом курсе, шаг за шагом. Вы можете экспериментировать с этим конкретным хранилищем, как угодно, - добавлять файлы, делать фиксации и отмены в среде, где у вас есть хранилище с несколькими известными вам рабочими состояниями, которое достаточно компактно и понятно, а не в чьем-нибудь чужом хранилище с 25 или 150 файлами и 200 коммитами.

В следующем уроке мы рассмотрим короткую историю контроля версий и специфическую терминологию, применимую ко всем системам контроля версий, которые мы будем использовать в этом курсе.