01. Первый репозиторий
Git - это консольная программа. Рядовой пользователь с такими уже давно не встречается, потому что консольные программы позволяют только построчно вводить текст и читать ответы компьютера на каждую из строк. Эти строки называются командами.
Первые операционные системы состояли только из командной строки, сильно позже операционные системы стали графическими. Подробнее о первых графических операционных системах можно прочитать здесь.
Git всё же сделан консольным, во-первых, чтобы было проще автоматизировать работу с ним через пользовательские скрипты. К тому же до сих пор программистам бывают нужны консольные команды. Например, очень удобно подключаться к удалённым компьютерам через SSH. С его помощью мы можем запустить на локальном компьютере командную строку удалённого. Кстати, компиляторы - тоже консольные программы.
Да, у git есть простенькая графическая программа, но она не особо удобная. Удобнее всего пользоваться встроенными инструментами в среде разработки. Если вы работаете без среды разработки, то вам подойдёт графическая обёртка GitHub. Скачать её можно здесь.
Пока что мы будем работать с консолью git.
Инструкции по его установке и настройке находятся здесь
Git задействует текстовый редактор, по умолчанию это будет vim. Он очень неудобный, поэтому мы поставим другой. Он называется Notepad++. Если он уже стоит у вас нет его на компьютере, выполните эту инструкцию.
Создание репозитория
Чтобы создать репозиторий, нужно перейти в папку, за которой будет следить git, и вызвать в ней контекстное меню.
Если вы работаете в школе, то создайте папку repo1
на диске H:
и перейдите
в неё. Если работаете дома, то создайте папку repo1
, но на диске D:
или
на диске C:
, если у вас он один.
В общем виде папки можно создавать в любом доступном месте, но могут возникнуть проблемы с доступом. Поэтому название папки написано явно.
Чтобы создать папку, кликните в проводнике правой кнопкой мыши.
В появившемся меню выберите Создать
-> Папку
:
Дайте название вашей папке. При создании папки windows
сразу предлагает дать название
Я назвал свою папку TestGit
. Дайте новой папке своё название
Если вам нужно переименовать уже созданную папку, кликните правой кнопкой мыши по нему и в
появившемся меню выберите переименовать
Перейдите в созданную папку и кликните правой кнопкой мыши по свободному пространству. В появившемся меню
выберите Git Bash Here
:
Появится консоль
Инициализируем репозиторий (все последующие команды вводятся в консоль Git)
git init
Чтобы вставить готовые команды, нужно в консоли git нажать сочетание клавиш Shift+Insert
.
Эта комбинация во многих программах используется вместо Ctrl+V
.
В ответ получим:
Initialized empty Git repository in D:/Programming/test/.git/
у меня рабочая папка "D:/Programming/test/". У вас она может отличаться. В какой папке открыли консоль - та и будет указана.
Теперь в вашей рабочей директории появится папка .git
.
Возможно, поначалу вы ничего не увидите.
Это означает, что у вас стоит настройка проводника не показывать скрытые файлы.
Если вы хотите убедиться в том, что папка .git
на месте можете изменить эту настройку во вкладке меню "вид".
Ничего не меняйте внутри папки .git
вручную, это почти гарантированно сломает внутреннюю логику репозитория, и вы потеряете
предыдущие версии. Правда, если вы хотите заново инициализировать репозиторий, то просто удалите
папку git
и заново запустите команду git init
.
Создадим файл test1.txt
.
Для этого внутри папки репозитория нужно кликнуть правой кнопкой мыши по свободному месту
папки и выбрать в меню Создать
->Текстовый документ
Далее нужно поменять название на test1.txt
:
В итоге получим:
Мы добавили файл, но 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
Выдача может немного отличаться, это не проблема, главное, что среди строк будут похожие на представленные.
Обратите внимание: после git commit вводится -m
. Это называется аргумент командной строки. Сама команда - это git commit,
но у неё есть параметр, его указывают при помощи знака "-" и потом символа, определяющие, какой именно параметр
мы задаём. На самом деле, у команды git commit
очень много параметров.
Но нас интересует именно параметр -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
. Основы работы с ним
описаны ПО ЭТОЙ ССЫЛКЕ КЛИКНИТЕ НА НЕЁ.
Нужно прочитать инструкции
только до блока
Создание репозитория
и вернуться назад.
После того, как вы создадите репозиторий, вам нужно отправить ваши локальные коммиты на сервер.
Пустой репозиторий гитхаб выглядит примерно так:
Многие текстовые элементы github можно копировать при помощи особых элементов. Один из них выделен на скрине.
Если на него нажать, соответствующий ему блок автоматически скопируется в буфер обмена, это
эквивалентно выделению и нажатию Ctrl+C
. Вам нужно скопировать путь к репозиторию:
После этого связываем наш локальный репозиторий с удалённым. Обратите внимание: вам нужно вместо
моего адреса 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".
Откроется новое окно такого вида. В нём гихаб запрашивает у вас разрешение на предоставление доступа стороннему сервису, т.е. нашему локальному гиту. Каждый пункт списка - это то или иное разрешение.
В нашем случае гиту нужны разрешения на заметки(gists), репозитории и рабочие области.
Жмём зелёную кнопку "Authorize GitCreditalManager". Гитхаб переведёт нас на страницу с сообщением, мол авторизация выполнена успешна, можно закрыть окно. Так и поступаем.
Если вы работаете из школы, то вместо окна, показанного на предыдущей картинке вы получите такое окно:
Это нормально, просто настройки безопасности не дают сгенерировать страницу ответа, просто закройте эту страницу и вернитесь к консоли.
Вывод консоли гит будет примерно таким:
Если теперь вернуться на страницу нашего репозитория, то мы увидим, что его отображение сильно изменилось.
Репозиторий на сервере*
Вам нужно просто прочитать этот блок и приступать к выполнению задания. Команды выполнять не требуется. Если вы неправильно указали адрес удалённого репозитория, здесь вы узнаете, как это исправить.
Если репозиторий находится на сервере, а не на вашем локальном компьютере, то он называется удалённым, не в смысле, что его удалили, а в смысле, что он находится на удалении.
Чтобы отобразить список удалённых репозиториев, выполните команду:
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.