Skip to main content

01. Первый репозиторий

Git - это консольная программа. Рядовой пользователь с такими уже давно не встречается, потому что консольные программы позволяют только построчно вводить текст и читать ответы компьютера на каждую из строк. Эти строки называются командами.

cmd

Первые операционные системы состояли только из командной строки, сильно позже операционные системы стали графическими. Подробнее о первых графических операционных системах можно прочитать здесь.

Git всё же сделан консольным, во-первых, чтобы было проще автоматизировать работу с ним через пользовательские скрипты. К тому же до сих пор программистам бывают нужны консольные команды. Например, очень удобно подключаться к удалённым компьютерам через SSH. С его помощью мы можем запустить на локальном компьютере командную строку удалённого. Кстати, компиляторы - тоже консольные программы.

Да, у git есть простенькая графическая программа, но она не особо удобная. Удобнее всего пользоваться встроенными инструментами в среде разработки. Если вы работаете без среды разработки, то вам подойдёт графическая обёртка GitHub. Скачать её можно здесь.

Пока что мы будем работать с консолью git.

Инструкции по его установке и настройке находятся здесь

Git задействует текстовый редактор, по умолчанию это будет vim. Он очень неудобный, поэтому мы поставим другой. Он называется Notepad++. Если он уже стоит у вас нет его на компьютере, выполните эту инструкцию.

Создание репозитория

Чтобы создать репозиторий, нужно перейти в папку, за которой будет следить git, и вызвать в ней контекстное меню.

о папке

Если вы работаете в школе, то создайте папку repo1 на диске H: и перейдите в неё. Если работаете дома, то создайте папку repo1, но на диске D: или на диске C:, если у вас он один.

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

Чтобы создать папку, кликните в проводнике правой кнопкой мыши. В появившемся меню выберите Создать -> Папку:

cmd

Дайте название вашей папке. При создании папки windows сразу предлагает дать название

cmd

Я назвал свою папку TestGit. Дайте новой папке своё название

cmd

Если вам нужно переименовать уже созданную папку, кликните правой кнопкой мыши по нему и в появившемся меню выберите переименовать

cmd

Перейдите в созданную папку и кликните правой кнопкой мыши по свободному пространству. В появившемся меню выберите Git Bash Here:

cmd

Появится консоль

cmd

Инициализируем репозиторий (все последующие команды вводятся в консоль Git)

git init
Полезная информация

Чтобы вставить готовые команды, нужно в консоли git нажать сочетание клавиш Shift+Insert. Эта комбинация во многих программах используется вместо Ctrl+V.

В ответ получим:

Initialized empty Git repository in D:/Programming/test/.git/
Обратите внимание

у меня рабочая папка "D:/Programming/test/". У вас она может отличаться. В какой папке открыли консоль - та и будет указана.

Теперь в вашей рабочей директории появится папка .git.

Возможно, поначалу вы ничего не увидите.

Это означает, что у вас стоит настройка проводника не показывать скрытые файлы. cmd

Если вы хотите убедиться в том, что папка .git на месте можете изменить эту настройку во вкладке меню "вид".

cmd

Не трогайте эту папку

Ничего не меняйте внутри папки .git вручную, это почти гарантированно сломает внутреннюю логику репозитория, и вы потеряете предыдущие версии. Правда, если вы хотите заново инициализировать репозиторий, то просто удалите папку git и заново запустите команду git init.

Создадим файл test1.txt.

Для этого внутри папки репозитория нужно кликнуть правой кнопкой мыши по свободному месту папки и выбрать в меню Создать->Текстовый документ

cmd

Далее нужно поменять название на test1.txt:

cmd

В итоге получим:

cmd

Мы добавили файл, но git пока что не знает, что его надо добавить в список индексации

git add test1.txt

Если всё окей, то гит ничего не напишет.

Попробуем добавить несуществующий файл:

git add test2.txt

Получим ошибку:

fatal: pathspec 'test2.txt' did not match any files

После того, как мы добавили файл test1.txt в список индексации, можно приступать к созданию нового коммита.

git commit -m 'Init'

Ответ Git:

[master (root-commit) 9391554] Init
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test1.txt

Выдача может немного отличаться, это не проблема, главное, что среди строк будут похожие на представленные.

cmd

Обратите внимание: после git commit вводится -m. Это называется аргумент командной строки. Сама команда - это git commit, но у неё есть параметр, его указывают при помощи знака "-" и потом символа, определяющие, какой именно параметр мы задаём. На самом деле, у команды git commit очень много параметров.

cmd

Но нас интересует именно параметр -m, он отвечает за название нового коммита. Этот параметр обязательный, и это сделано не просто так. Когда вы создаёте комми, ему нужно давать осмысленное название. Также у каждого коммита есть описание, которое тоже хорошо бы было заполнять, но это уже по желанию. Если коммитам не давать осмысленные названия, то спустя длительное время будет очень сложно найти именно тот коммит, в котором была ошибка. Поэтому после аргумента -m в одинарных кавычках указывают его название.

Вернёмся к ответу Git:

[master (root-commit) 9391554] Init
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test1.txt

Он говорит нам, что в ветке с названием master создан новый коммит, в котором изменён один файл. В следующей строке указано, как сохранены те или иные изменения.

Github

Как уже говорилось ранее, репозитории могут храниться не только на локальной машине, но и на удалённом сервере. Да, можно просто "поднять" файловый сервер и копировать туда свои репозитории. Но лучше использовать готовые инструменты. Самый известный сервис хранения git-репозиториев - это GitHub.

Несмотря, на все свои плюсы, GitHub - это коммерческая зарубежная платформа, поэтому советую вам "поднять" свой git-сервер. Самый известный git-сервер с открытым исходным кодом - это Gitea. Когда вы сами поднимате сервер для тех или иных целей, его называют self-host сервером, а сам сервис - self-host решением.

Есть ещё коммерческое self-host решение GitLab. У них есть бесплатная Community версия, но часто возникают проблемы с настройкой. Gitlab - довольно мощный инструмент, но в поддержании он сложен, плю открытый код у него только условно. Для доступа к нему, нужно принять участие в особой рпограмме. Gitea можно собрать прямо исходных кодов, но при этом он устанавливается, если взять сборку от разработчиков, за пару кликов.

Тем не менее, в данном курсе для простоты будем работать с GitHub. Потом при желании вы всегда сможете перейти на self-host git сервер.

ПРОЧИТАЙТЕ ВНИМАТЕЛЬНО

Вам нужно создать новый репозиторий на github. Основы работы с ним описаны ПО ЭТОЙ ССЫЛКЕ КЛИКНИТЕ НА НЕЁ.

Нужно прочитать инструкции только до блока Создание репозитория и вернуться назад.

После того, как вы создадите репозиторий, вам нужно отправить ваши локальные коммиты на сервер.

Пустой репозиторий гитхаб выглядит примерно так:

sign in

Многие текстовые элементы github можно копировать при помощи особых элементов. Один из них выделен на скрине. Если на него нажать, соответствующий ему блок автоматически скопируется в буфер обмена, это эквивалентно выделению и нажатию Ctrl+C. Вам нужно скопировать путь к репозиторию:

sign in

После этого связываем наш локальный репозиторий с удалённым. Обратите внимание: вам нужно вместо моего адреса https://github.com/test-buran/test.git последним словом вставить свой:

git remote add origin https://github.com/test-buran/test.git

Чтобы отправить изменения, используют команду git push <server-name> <branch-name>. Первый параметр <server-name> - это имя сервера, а второй <branch-name> - имя ветки. О ветках будет рассказано в следующих главах.

Пока что у нас она одна ветка, и называется она master. Серверу github мы только что дали название origin. Поэтому команда отправки изменений будет такой:

git push origin master

Чтобы отправить изменения на сервер, нужно на нём авторизоваться.

Самый простой способ - это вход в свою учётную запись через браузер. Перед запуском этого действия, убедитесь что вами уже выполнен вход в вашу учетную запись github в браузере. Если нет, то сначала войдите в него, а потом вернитесь к окну входа. Если оно пропало, просто вернитесь в консоль git и нажмите кнопку вверх. По этой клавише выводится предыдущая команда. В первый раз выводится последняя выполненная команда. В нашем случае - это

git push origin master

Должно появиться окно входа.

Если команда не сработала, то вам нужно добавить в неё --force:

git push --force origin master

Если вы уже авторизованы в браузере, тогда вам нужно нажать на синюю кнопку "Sign in with your browser".

sign in

Откроется новое окно такого вида. В нём гихаб запрашивает у вас разрешение на предоставление доступа стороннему сервису, т.е. нашему локальному гиту. Каждый пункт списка - это то или иное разрешение.

В нашем случае гиту нужны разрешения на заметки(gists), репозитории и рабочие области.

sign in

Жмём зелёную кнопку "Authorize GitCreditalManager". Гитхаб переведёт нас на страницу с сообщением, мол авторизация выполнена успешна, можно закрыть окно. Так и поступаем.

sign in

Если вы работаете из школы, то вместо окна, показанного на предыдущей картинке вы получите такое окно:

sign in

Это нормально, просто настройки безопасности не дают сгенерировать страницу ответа, просто закройте эту страницу и вернитесь к консоли.

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

sign in

Если теперь вернуться на страницу нашего репозитория, то мы увидим, что его отображение сильно изменилось.

sign in

Репозиторий на сервере*

Теоретический блок

Вам нужно просто прочитать этот блок и приступать к выполнению задания. Команды выполнять не требуется. Если вы неправильно указали адрес удалённого репозитория, здесь вы узнаете, как это исправить.

Если репозиторий находится на сервере, а не на вашем локальном компьютере, то он называется удалённым, не в смысле, что его удалили, а в смысле, что он находится на удалении.

Чтобы отобразить список удалённых репозиториев, выполните команду:

git remote -v

Пример выдачи

origin  https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)

Чтобы добавить удалённый репозиторий, используйте команду git remote add <имя-сервера> <адрес сервера>.

Например:

 git remote add pb https://github.com/paulboone/ticgit

Мы уже использовали эту команду:

git remote add origin https://github.com/test-buran/test.git

Получается, что сервер github будет называться origin, а его адрес - https://github.com/test-buran/test.git, у вас он должен был быть своим.

Чтобы получить информацию о сервере, используется команда git remote show <server-name>

git remote show origin

Получим вывод в духе:

* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)

Чтобы переименовать сервер, используйте команду git remote rename <old-server-name> <new-server-name>.

Например, эта команда поменяет название сервера с pb на origin2:

git remote rename pb origin2

Чтобы удалить репозиторий git remote remove <server-name>:

git remote remove origin

После выполнения этой команды можно заново указать адрес удалённого git репозитория:

git remote add origin https://github.com/test-buran/test.git

Задание

Вам необходимо создать свой репозиторий, в котором лежит всего один файл test1.txt.

Ссылку на github-репозиторий необходимо отправить в поле ввода задания на сайте mdl.

Ссылка на контест.