Оглавление:
Чтобы не в любой момент можно было откатиться к версии кода когда всё работало. Чтобы не потерять супер мега важный проект, если у вас: ноут утонет в пиве, полетит ссд, друг решит прикольнуться над вами и т.д.
Для начала регнитесь на github.
Почта, надёжный пароль, крутая аватарка все дела.
Найти гайд как скачать git на вашу ОС можно в интернете.
На linux зависит от дистрибутива, ищите что-то в духе "debian install git",
"arch install git". На MacOS тоже можно поставить через пакетный менеджер.
На винде храни вас бог с оффициального сайта exe файл.
Советую пользоваться git через терминал. Так будет проще запомнить команды к зачёту. И конечно это +1000 к крутости. На linux и MacOS можете просто писать git <команда> в терминал и будет вам счастье. На винде открывайте приложение git bash, это мини версия bash в которой можно писать всякие linux команды.
Есть 2 варианта как подключаться к серверу: через https или ssh. Подключаться через https обычно это убогое порно. Его хорошо использовать только когда вам нужно скачать репозиторий, в который вы не собираетесь коммитить. В https требуется ключ аутентификации или реже пароль от аккаунта. Мне не нравится иметь дело с выскакивающими графическими окнами (как делает gitlab). Разговаривать о том почему ssh круче можно долго. Если вы разберетесь как работает ssh вам будет просто потом грамотно подключаться к серверам. Поэтому сразу учитесь пользоваться ssh. Хороший гайд есть у github. С этого момента будем считать что вы разобрались с ssh. Теперь выбирайте ссылки которые начинаются ssh://.
git help
git help <команда>
man git
У вас есть два варианта. Локально на вашем компе и потом синхронизировать c сервером. Или через сайт и подтянуть к себе на комп.
git init
Этой командой вы создаете репозиторий в текущей директории. Git создаст директорию .git в которой будет хранить свои файлы. У вас уже есть возможности контроля версий, но пока что всё это хранится только локально.
git status
Имба команда. Даёт много полезной инфы. Я спамлю её постоянно.
lavender@thinkcan ~/repos/tau-lavender-website> git status
On branch main
No commits yet
Untracked files:
(use "git add ..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)
Например тут мне git говорит, что я не добавил файл, что я нахожусь в ветке main. Так-же git очень много подсказывает, что делать. Чтобы мне добавить не отслеживаемый файл надо сделать git add.
Для того чтобы залить изменения на сервер создайте репозиторий на сайте (не маленькие в интерфейсе разберётесь)
Если вы попробуете запушить (сделать git push) сейчас, у вас ничего не получится: git не знает куда отправлять изменения. Нужно указать ему url.
lavender@thinkcan ~/repos/tau-lavender-website> git push
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using
git remote add <name> <url>
and then push using the remote name
git push <name>
To push to multiple remotes at once, configure a remote group using
git config remotes.<groupname> "<remote1> <remote2>"
and then push using the group name
git push
Для репозитория с этим сайтом url: ssh://git@git.tau-lavender.ru:2222/tau-lavender/tau-lavender-website.git Его можно найти на странице репозитория.
git remote add origin <url>
git push --set-upstream origin main
Вместо <url> надо вставить ссылку. Этими командами мы указали git репозиторий и что отныне мы хотим делать push в него.
Вам нужно так-же создать репозиторий на сайте, найти url и сделать:
git clone <url>
- И всё? - Да всё - А что ты тогда втирал до этого? - Это на случай если вы нафигачите много всего заранее, а потом решите что вам нужен repo на github
Вы сделали так что ваш локальный репозиторий можно синхронизировать с сервером. Что дальше? Гит подскажет вам что происходит и что можно делать дальше командой:
git status
Чтобы гит начал отслеживать новый файл нужно его добавить.
git add README.txt
Ещё есть вариант добавить все новые файлы, но надо использовать аккуратно чтобы не добавить мусор всякий. ВЫ МОЖЕТЕ СЛИТЬ ВАЖНЫЕ ДАННЫЕ или просто закоммитить несколько Gb логов.
git add .
Можно использовать файл .gitignore. Он позволяет сказать гиту "не трекай файлы в такой-то папке или с такими-то расширениями" Тут можно взять шаблон
Вы добавили файлы, время сохранить их состояние - сделать commit
git commit -m "feat: change some code"
-m это флаг для сообщения коммита. Как подписывать коммиты, чтобы потом не искать момент изменения среди "уээээээ", "12343", "final commit", "ababbfdsdfbdsfb"? Cтатейка прочитайте пожалуйста, полезная штука. Если коротко:
Теперь нужно синхронизировать с сервером
git push
Вам нужно будет часто подтягивать репозиторий с сервера
git pull
Коммитить в main харам. В больших проектах вы сломаете работу хорошего кода пока будете писать изменения. Поэтому для каждой новой фичи создаём отдельную ветку. Удобнее всего, когда один человек работает в одной ветке. Так у вас будет меньше merge конфликтов которые будут отнимать время. В больших компаниях у вас так не получится, но для проектов норм тема
Посмотреть свою ветку:
git branch
Создать ветку:
git branch <имя ветки>
Обновить состояние и список всех веток. Подгружает всё из ремоута, как pull, но не делает merge:
git fetch
Переключиться на ветку:
git switch <имя ветки>
Теперь вы можете пробовать эксперементальные фичи не ломая рабочий код.
Как делать надо
new-feature.git push.Pull Request (или MR на GitLab) - это запрос: "Проверьте что то что я сделал работает и это можно делать основной версией".
Твои друзья посмотрят, скажут "круто" или "ахахахаха хуйня переделывай", и потом нажмут кнопку Merge.
Стандартная штука ты сидишь, пишешь код, а твой друг уже запушил изменения в main. Ты пытаешься запушить, а git ругается что ты пытаешься изменить то-что уже изменили
Забрать чужие изменения к себе:
git pull
Открываешь файл, а там:
<<<<<<< HEAD
print("abama, pozhaluista ostanovi mashinu")
=======
print("Не начинай работать с git пока....")
>>>>>>> other-branch
Что делать:
git add . и git commit.Самое сложное только первые раза 4
git checkout main
git pull
git merge branch-name
git push
Закинуть изменения в коробку без коммита. Позже их можно достать
git stash
git stash pop
Если уже запушил баг:
git revert <hash_коммита>
Создаст новый коммит, который отменит сломаный
Посмотреть историю коммитов:
git log --oneline