Гайд на git

  • go back to main page
  • Оглавление:

    Зачем использовать git?

    Чтобы не в любой момент можно было откатиться к версии кода когда всё работало. Чтобы не потерять супер мега важный проект, если у вас: ноут утонет в пиве, полетит ссд, друг решит прикольнуться над вами и т.д.

    Как использовать git?

    Регистрация и установка git

    Для начала регнитесь на github. Почта, надёжный пароль, крутая аватарка все дела. Найти гайд как скачать git на вашу ОС можно в интернете. На linux зависит от дистрибутива, ищите что-то в духе "debian install git", "arch install git". На MacOS тоже можно поставить через пакетный менеджер. На винде храни вас бог с оффициального сайта exe файл.

    Советую пользоваться git через терминал. Так будет проще запомнить команды к зачёту. И конечно это +1000 к крутости. На linux и MacOS можете просто писать git <команда> в терминал и будет вам счастье. На винде открывайте приложение git bash, это мини версия bash в которой можно писать всякие linux команды.

    Как сделать ssh?

    Есть 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 соло

    Вы сделали так что ваш локальный репозиторий можно синхронизировать с сервером. Что дальше? Гит подскажет вам что происходит и что можно делать дальше командой:

    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 с кентами

    Вам нужно будет часто подтягивать репозиторий с сервера

    git pull

    Работа с ветками

    Коммитить в main харам. В больших проектах вы сломаете работу хорошего кода пока будете писать изменения. Поэтому для каждой новой фичи создаём отдельную ветку. Удобнее всего, когда один человек работает в одной ветке. Так у вас будет меньше merge конфликтов которые будут отнимать время. В больших компаниях у вас так не получится, но для проектов норм тема

    Посмотреть свою ветку:

    git branch

    Создать ветку:

    git branch <имя ветки>

    Обновить состояние и список всех веток. Подгружает всё из ремоута, как pull, но не делает merge:

    git fetch

    Переключиться на ветку:

    git switch <имя ветки>

    Теперь вы можете пробовать эксперементальные фичи не ломая рабочий код.

    Как делать надо

    Pull Request (или MR на GitLab) - это запрос: "Проверьте что то что я сделал работает и это можно делать основной версией".

    Твои друзья посмотрят, скажут "круто" или "ахахахаха хуйня переделывай", и потом нажмут кнопку Merge.

    Что делать если тебя обогнали

    Стандартная штука ты сидишь, пишешь код, а твой друг уже запушил изменения в main. Ты пытаешься запушить, а git ругается что ты пытаешься изменить то-что уже изменили

    Забрать чужие изменения к себе:

    git pull

    Открываешь файл, а там:

    <<<<<<< HEAD
    print("abama, pozhaluista ostanovi mashinu")
    =======
    print("Не начинай работать с git пока....")
    >>>>>>> other-branch
      

    Что делать:

    1. Удаляем вспомогательные индикаторы которые добавил Git
    2. Оставляем только нужный код (чекните чтобы работало, иногда надо будет поправит, чтобы все правильно слилось).
    3. Сохраняем файл.
    4. Добавляем и коммитим: git add . и git commit.

    Самое сложное только первые раза 4

    Как влить свою ветку в main

    git checkout main
    git pull
    git merge branch-name
    git push
      

    Полезные штуки

    Закинуть изменения в коробку без коммита. Позже их можно достать

    git stash
    git stash pop
      

    Если уже запушил баг:

    git revert <hash_коммита>

    Создаст новый коммит, который отменит сломаный

    Посмотреть историю коммитов:

    git log --oneline