@ -101,10 +101,25 @@ git init
```
К приглашению командной строки добавилось `(master)` : имя текущий ветви Git.
Ветвь `master` используется по умолчанию.
Git с настройками по умолчанию печатает длинное сообщение-подсказку,
строки которого начинаются с `hint:` .
Суть сообщения в том, что долгое время ветка по умолчанию называлась `master` ,
но по известным причинам разработчики Git планируют изменить это,
поэтому сразу предлагается поменять имя ветки и дается команда для этого.
**Самостоятельно.**
Поменяйте имя ветки на `main` при помощи предложенной команды.
**Примечание.**
Многие проекты продолжают успешно использовать `master` ,
чтобы не менять сложившиеся процессы.
Мы предлагаем использовать `main` , во-первых, чтобы попробовать лишнюю команду,
во-вторых, потому что такой станет ветка по умолчанию в будущем.
Git хранит свои данные в каталоге `.git` в той папке, где сделано `git init` .
Ее можно увидеть командой `ls -A` .
Каталог является скрытым, поэтому в «Проводнике» его по умолчанию не видно.
Заходить в `.git` и что-либо делать там не нужно.
Если удалить этот каталог, репозитарий будет безвозвратно утерян.
@ -179,7 +194,9 @@ git status
**В отчете** нужно пояснить, что означает каждая строка вывода этой команды.
Добавим файл `main.cpp` в отслеживаемые (в индекс):
Добавим файл `main.cpp` в индекс, то есть в набор изменений, который войдет
в очередной коммит. Так как этот файл ранее не отслеживался Git,
то говорят, что файл «заносят под Git» или «начинают отслеживать».
``` sh
git add main.cpp
@ -344,7 +361,12 @@ git commit -a -m "..."
### Работа с журналом репозитария
Журнал репозитария показывает команда `git log` . У нее много опций, например:
Журнал репозитария показывает команда `git log` .
Если лог изменений длинный, `git log` показывает текст с прокруткой.
Чтобы выйти из этого режима, нажмите `q` .
У команды `git log` много опций, например:
* `git log --stat` показывает файлы, измененные в коммитах.
* `git log --oneline --decorate` показывает коммиты компактно (`--oneline`),
@ -357,9 +379,6 @@ git commit -a -m "..."
команды показывают хэш сокращенно — краткий вариант тоже будет восприниматься
командами Git, которые принимают хэш.
Если лог изменений длинный, `git log` показывает текст с прокруткой.
Чтобы выйти из этого режима, нажмите `q` .
Попробуйте каждую из приведенных команд. ** В отчете** подробно опишите,
что показывается `git log --stat` для последнего коммита.
@ -382,7 +401,7 @@ git commit -a -m "..."
Просмотрим последний коммит тремя эквивалентными способами:
1. `git show HEAD` (текущий)
2. `git show ma ster ` (по имени ветви)
2. `git show ma in ` (по имени ветви)
3. `git show d2e8af` (по хэшу нужного коммита)
Для просмотра предыдущего коммита можно либо записать его хэш,
@ -484,7 +503,7 @@ git checkout HEAD -- main.cpp
### Регистрация на сервере
Зарегистрируйтесь на [Git УИТ](http://uit.mpei.ru/git)
под именем вида `Kozl y ukDA` (своя фамилия и инициалы, как почта МЭИ).
под именем вида `Kozl i ukDA` (своя фамилия и инициалы, как почта МЭИ).
Пароль придумайте самостоятельно.
@ -563,8 +582,8 @@ cat ~/.ssh/id_rsa.pub
**Самостоятельно.**
Скопировать открытый ключ (текст) и добавить в список открытых ключей
своей учетной записи. Это делается в настройках (меню пользователя
в правом верхнем углу, пункт *Settings* ), раздел *SSH and GPG keys,*
кнопка *New SSH key.*
в правом верхнем углу, пункт *Settings* ), раздел *SSH/ GPG keys,*
панель *Manage SSH keys,* кнопка *Add key.*
Если работа выполняется в компьютерном классе, закрытый ключ будет утерян
после выхода из учетной записи (или выключении компьютера). Проще всего
@ -578,9 +597,12 @@ cat ~/.ssh/id_rsa.pub
### Отправка проекта на сервер
Создайте репозитарий под названием `cs-lab02` .
Для этого нужно нажать на `+` слева вверху и выбрать `New Repository` .
Не нужно добавлять в репозитарий файл `README.md` или лицензию,
если предлагаются такие галочки.
Для этого нужно нажать на знак «плюс» справа вверху и выбрать *New Repository.*
* В поле *Repository Name* нужно ввести `cs-lab02` .
* Галочку *Make repository private* нужно снять,
чтобы репозитарий был виден всем пользователям.
* Остальные настройки нужно оставить по умолчанию.
После создания пустого репозитария будет показана страница с инструкциями,
как настроить связь с удаленным хранилищем:
@ -659,11 +681,11 @@ git fetch
git log --oneline --decorate --all --graph
```
Как можно видеть, ветка `ma ster ` отстает на один коммит от ветки
`origin/ma ster` (версии ветки `master ` из удаленного репозитария под названием
Как можно видеть, ветка `ma in ` отстает на один коммит от ветки
`origin/ma in` (версии ветки `main ` из удаленного репозитария под названием
`origin` , то есть на сервере).
Продвиньте ветку `ma ster ` к скачанной версии:
Продвиньте ветку `ma in ` к скачанной версии:
``` sh
git pull --ff-only
@ -709,11 +731,13 @@ cout << "A + B = " << a + b << '\n'
«От лица Боба» загрузите коммиты из удаленного хранилища и отобразите
историю всех веток — результат нужно представить ** в отчете.**
Можно видеть, что ветка `master` раздвоилась. Бобу нужно переместить свой
коммит поверх коммита Алисы, то есть поверх `origin/master` :
Можно видеть, что ветка `main` локального репозитария
разошлась с веткой `origin/main` , то есть с веткой `main` на сервере.
Бобу нужно переместить свой коммит поверх коммита Алисы,
то есть поверх `origin/main` :
``` sh
git rebase origin/master
git rebase origin/main
```
Однако эта команда завершается с ошибкой, сообщающей о конфликте в `main.cpp`.
@ -766,17 +790,17 @@ git checkout double
Замените тип переменных `a` и `b` на `double` и сделайте коммит.
Переключитесь на ветку `ma ster `:
Переключитесь на ветку `ma in `:
``` sh
git checkout master
git checkout main
```
**Самостоятельно.**
Синхронизируйте ветку `ma ster ` «на машине Алисы» с сервером.
Синхронизируйте ветку `ma in ` «на машине Алисы» с сервером.
Просмотрите историю всех веток и занесите результат ** в отчет.**
Слейте ветку `double` в `master `:
Слейте ветку `double` в `main `:
``` sh
git merge double