четверг, 26 марта 2020 г.

Использование git

С hg я не использую консольные команды, обычные задачи покрываются графической оболочкой TortoiseHg на Fedora 31 и Windows 10. Описание значков интерфейса здесь.

На windows 10 для работы с git я использую Git for Windows, другие графические среды (например, SmartGit, SourceTree, TortoiseGit) перечислены здесь. Сейчас (13.01.2023) использую под виндой TortoiseGit, он по функциональности близок к TortoiseHg (на момент написания статьи (27.03.2020) был косячный). Под линукс планирую использовать простую консоль.

github:
1) How to push git repo from Windows 10 CMD https://www.youtube.com/watch?v=ZPDnCfMhbA8

Команды для bash:

1) Создаем новый репозитарий в текущей папке. Например, у меня в Windows Git Bash в текущей папке /c/Projects/Makefile/MyTestQtProject уже есть папка с qt-проектом:

cd /c/Projects/Makefile/MyTestQtProject
git init

В результате в папке /c/Projects/Makefile/MyTestQtProject создается подпапка .git с репозитарием.

2) Добавляем отдельные файлы из проекта под вирсионный контроль:

git add main.cpp

Удаляем неправильно поставленные файлы с версионного контроля (например, файлы проекта, которые у каждого разработчика могут быть свои):

git rm --cached myproject.pro

3) Смотрим статус по добавленным в репозитарий (changes to be commited) файлам, ненаходящимся под версионным контролем (untracked):

git status

4) Создаем файл исключений .gitignore (как .hgignore), дальше приводится содержимое для qt-проекта:

syntax: glob

*.user*
*~
ui_*
moc_*
.fuse*
.qmake*

*.o
*.pdb

Makefile*
MyTestQtProject

debug
release

5) Коммитим изменения:

git commit

После ввода откроется выбранный текстовый редактор (под виндой удобно поставить notepad++, под линукс по умолчанию ставится vim). После ввода надо сохранить изменения (самый простой способ записать изменения в vim - нажать клавишу "escape" и набрать "wq" (сохранить изменения и выйти)).

Можно сразу ввести коммит с меткой:

git commit -m "start"

6) При последующих коммитах, если изменения касаются только уже добавленных на версионный контроль файлов, коммитить можно следующим образом:

git commit -a -m "continue"

7) Для работы из строки надо представиться системе:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

8) Создаем на gitlab-е через web-интерфейс проект, получаем путь к проекту вида git@git.medteco.ru:username/gitrepo. Коммитим существующий локальный репозитарий:

git remote add origin <ssh-репозитарий gitlab>
git push -u origin master

9) Получаем изменения с удаленного сервера (origin):

9.1) Получаем изменения с удаленного сервера gitlab (origin):

git remote add origin <ssh-репозитарий gitlab>
git pull origin master

https://githowto.com/pulling_changes

9.2) Получаем изменения из соседней папки (origin):

git remote add origin /d/Projects/ti/git/tda3_ccs831
git pull origin master

Удаляем:
git remote remove origin

https://komodor.com/learn/how-to-fix-fatal-remote-origin-already-exists-error/

10) Клонируем существующий репозитарий на gitlab'е в текущую папку:

git clone <ssh-репозитарий gitlab>

git clone https://192.168.73.30/devs/devs/gen3

11) Восстанавливаем файлы из локального репозитария ("откатываем" изменения до последнего коммита):

git restore .

12) Переключаемся на нужный коммит:

git checkout <хэш коммита>

Для переключения на последний коммит в ветке master:

git checkout master

13) Создаем новую ветку develop для коммита cca1cd03bb4a5bf3077681beff9899bda770e19e:

git branch develop cca1cd03bb4a5bf3077681beff9899bda770e19e

Чтобы слить изменения в ветке с master:
git checkout master
git merge develop

https://stackoverflow.com/questions/8953206/how-do-i-move-my-commits-from-no-branch-to-an-actual-branch

14) Переключаемся на ветку develop:

git switch develop

14.1) Затянуть изменения из внешнего хранилища и смерджить с содержимым ветки:

git pull (origin master)
git branch --set-upstream-to=origin/master develop
git merge


15) Отобразить список доступных веток:

git branch --list

16) git log:

Сложный вывод с показом ветвлений:
git log --pretty=format:"%h - %an, %ar : %s"

Последние 2 коммита:
git log -2

16) Удаляем из ещё незакомиченного кэша (но уже выполнен git add) бинарные ненужные для версионного контроля файлы (вроде *.o, *.obj или целая папка в студии Debug), которые почему-то вовремя не оказались в .gitignore:
git rm -r --cached test_client/Release/*

17) git diff не работает по текстовым файлам UTF-16, которые по умолчанию формирует VS2017;

18) Подключаемся к новому удаленному репозитарию с созданным проектом, переключаемся на ветку master, заливаем в него файлы только ветки master, коммиты, бранчи, а потом все ветки активного проекта:
git remote add origin <https-git-репозитарий>
git branch -M master
git push -u origin master
git push --all

git push --set-upstream <remote-name> <localbranch>

Workaround:


Ссылки (hg):
1) Hg Init: Часть 2. Основы Mercurial https://habr.com/ru/post/108658/
2) https://habr.com/ru/post/274877/

Ссылки (git):
1) основные консольные команды https://habr.com/ru/post/336708/ (!)
2) hgignore https://git-scm.com/docs/gitignore
2) hg commit

Ссылки (обзор git):
1) https://habr.com/ru/company/playrix/blog/345732/
2) https://habr.com/ru/post/437000/
3) https://habr.com/ru/post/472600/
4) https://habr.com/ru/post/342116/
5) https://habr.com/ru/post/440816/
6) https://habr.com/ru/post/174467/
7) https://habr.com/ru/post/125799/

Useful:
1) Переход с Mercurial на GIT в Atlassian Bitbucket с сохранением файлов в кириллице

git branch:

Комментариев нет:

Отправить комментарий