использование GIT
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
использование GIT
У нас есть уже давно тема (уже 10 лет как есть ) про GIT ... вообще: контроль версий, GIT.
Там есть:
- про инструменты GIT ...
- ссылки на ресурсы и книги с информацией про GIT ...
- обсуждение публичных облачных ресурсов GIT и их URL ...
Здесь же будет только про практики использования GIT.
Там есть:
- про инструменты GIT ...
- ссылки на ресурсы и книги с информацией про GIT ...
- обсуждение публичных облачных ресурсов GIT и их URL ...
Здесь же будет только про практики использования GIT.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
Начну (и порекомендую) с такой вот любопытной статейки: Как я перестал бояться и полюбил git.
Но, к стыду своему, очень долго задержался (отстал) в использовании GIT (GIT нужно было начинать активно использовать годов с 2012-2014).
GIT - это совсем другое, и вот теперь будем навёрстывать ... в этой теме.
P.S. Попался, кстати, такой вот "исторический" обзор, кого заинтересует: История систем управления версиями.
P.P.S. Очень много и часто спрашивают ... по жизни и здесь в форуме (целый раздел есть Обучение, работа и занятость - лень конкретные примеры там искать, их множество): "Какой язык программирования, инструментарий изучать? С чего начать?".
Так вот ответ на такие вопросы на сегодня однозначный: "Начните с GIT, его изучайте. А освоив GIT досконально переходите к чему-то следующему".
Я успел за годы работы (кому как повезло ) поработать с централизованными системами контроля версий: и RCS (Revision Control System), и CVS (Concurrent Versions System), и SVN (Apache Subversion) ... давно и в разных конторах.Домашние проекты уже все сажаются на гит. Пулы и ребейзы делаются на автомате, как проверка почты. Любой новый проект начинается с создания репозитория и .gitignore. Незаметно гит превращается из рабочей необходимости в первую. Если спросите, без чего я не представляю свою работу, то первое, что отвечу - это гит. Без модных IDE, Core i7 и смузи я обойдусь. Без гита - нет.
Я по-прежнему большую часть операций делаю в консоли. Вызывая удивление большинства нормальных коллег и понимание некоторых особо бородатых. Но это уже другая история.
Но, к стыду своему, очень долго задержался (отстал) в использовании GIT (GIT нужно было начинать активно использовать годов с 2012-2014).
GIT - это совсем другое, и вот теперь будем навёрстывать ... в этой теме.
P.S. Попался, кстати, такой вот "исторический" обзор, кого заинтересует: История систем управления версиями.
P.P.S. Очень много и часто спрашивают ... по жизни и здесь в форуме (целый раздел есть Обучение, работа и занятость - лень конкретные примеры там искать, их множество): "Какой язык программирования, инструментарий изучать? С чего начать?".
Так вот ответ на такие вопросы на сегодня однозначный: "Начните с GIT, его изучайте. А освоив GIT досконально переходите к чему-то следующему".
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
Итак ...
Я вижу (и участвую, в той или иной мере) такие способы использования GIT:
- локальный GIT на своих собственных задачах ... способ совсем не очевидный, но очень полезный;
- развёртывание своего собственного GIT сетевого сервера для группового доступа к проекту;
- использование GIT публичных облачных ресурсов общего использования (GitHub, Bitbucket и подобные) - персонально или для групповых проектов;
- использование корпоративных ресурсов, соглашений и инструментария (jira, gerrit, и др.) в больших коллективных проектах, в качестве участников таких проектов ... часто это совмещается с технологиями коде-ревью;
Это достаточно разные техники использования...
Есть что-то ещё?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
Вариант №1:
Собственно, смысл задачи, в данном случае, не имеет значения...
Структура каталогов там такая (реализации в 2-х стандартах языка C++):
Вот это для дальнейшего развития затолкаем под GIT...
Беру любую свою тестовую или учебную задачу ... например отсюда: С++ в относительно новых стандартах:
... нагенерить в (текущем) каталоге много файлов разного (случайного) размера с именами из списка, построчно заданного в файле данных ...
Собственно, смысл задачи, в данном случае, не имеет значения...
Структура каталогов там такая (реализации в 2-х стандартах языка C++):
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group.old$ tree
.
├── C++11
│ ├── file_group.hist
│ ├── file_group_p
│ ├── file_group_p.cc
│ ├── file_group_r
│ ├── file_group_r.cc
│ ├── list.dat
│ └── Makefile
└── C++17
├── file_group.hist
├── file_group_p
├── file_group_p.cc
├── file_group_r
├── file_group_r.cc
├── list.dat
└── Makefile
2 directories, 14 files
- Вложения
-
- make_file_group.old.tgz
- (154.04 КБ) 72 скачивания
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
Поехали...
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ pwd
/home/olej/2021_WORK/OWN_TEST.codes/make_file_group
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git init
Инициализирован пустой репозиторий Git в /home/olej/2021_WORK/OWN_TEST.codes/make_file_group/.git/
Берём под контроль интересующие файлы:
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git add */*.hist
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git add */*.cc */*.dat */Makefile
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git status -s
A C++11/Makefile
A C++11/file_group.hist
A C++11/file_group_p.cc
A C++11/file_group_r.cc
A C++11/list.dat
A C++17/Makefile
A C++17/file_group.hist
A C++17/file_group_p.cc
A C++17/file_group_r.cc
A C++17/list.dat
?? C++11/file_group_p
?? C++11/file_group_r
?? C++17/file_group_p
?? C++17/file_group_r
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ touch .gitignore
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ echo .gitignore > .gitignore
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ cat .gitignore
.gitignore
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ echo '*/file_group_p' >> .gitignore
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ cat .gitignore
.gitignore
*/file_group_p
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ echo '*/file_group_r' >> .gitignore
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ cat .gitignore
.gitignore
*/file_group_p
*/file_group_r
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git status -s
A C++11/Makefile
A C++11/file_group.hist
A C++11/file_group_p.cc
A C++11/file_group_r.cc
A C++11/list.dat
A C++17/Makefile
A C++17/file_group.hist
A C++17/file_group_p.cc
A C++17/file_group_r.cc
A C++17/list.dat
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git commit -m 'генерация файлов из списка со случайной длиной'
[master (корневой коммит) 24f0065] генерация файлов из списка со случайной длиной
10 files changed, 1086 insertions(+)
create mode 100644 C++11/Makefile
create mode 100644 C++11/file_group.hist
create mode 100644 C++11/file_group_p.cc
create mode 100644 C++11/file_group_r.cc
create mode 100644 C++11/list.dat
create mode 100644 C++17/Makefile
create mode 100644 C++17/file_group.hist
create mode 100644 C++17/file_group_p.cc
create mode 100644 C++17/file_group_r.cc
create mode 100644 C++17/list.dat
Проверили что получилось:
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git status -s
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git log
commit 24f0065d2f38aa480038371aa4e0110ff2de9125 (HEAD -> master)
Author: oleg.tsiliuric <oleg.tsiliuric@zodiacsystems.com>
Date: Tue Jan 12 20:14:25 2021 +0200
генерация файлов из списка со случайной длиной
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git branch
* master
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
Дальше я хочу добавить, в корень проекта, Makefile для рекурсивной сборки всего, что находится в дочерних каталогах C++11 и C++17 - такого примерног содержания:
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ pwd
/home/olej/2021_WORK/OWN_TEST.codes/make_file_group
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ cat Makefile
SUBDIRS = $(shell find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n")
all clean :
@list='$(SUBDIRS)'; for subdir in $$list; do \
echo "=============== making $@ in $$subdir ================="; \
(cd $$subdir && make $@) \
done
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git status -s
?? Makefile
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git add Makefile
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git status -s
A Makefile
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git checkout -b v2
Переключено на новую ветку «v2»
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git commit
[v2 35f9c8c] генерация файлов из списка со случайной длиной
1 file changed, 7 insertions(+)
create mode 100644 Makefile
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git branch
master
* v2
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git log
commit 35f9c8cb0329b5b5288a57a2fc58a676a36a2705 (HEAD -> v2)
Author: oleg.tsiliuric <oleg.tsiliuric@zodiacsystems.com>
Date: Wed Jan 13 07:52:50 2021 +0200
генерация файлов из списка со случайной длиной
commit 24f0065d2f38aa480038371aa4e0110ff2de9125 (master)
Author: oleg.tsiliuric <oleg.tsiliuric@zodiacsystems.com>
Date: Tue Jan 12 20:14:25 2021 +0200
генерация файлов из списка со случайной длиной
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git cherry master
+ 35f9c8cb0329b5b5288a57a2fc58a676a36a2705
Теперь мне не нужно хранить какие-то промежуточные копии, опасаясь потери полезных вариантов ... операциями подобными показанным выше я решаю все эти проблемы на будущее: создаю любые ответвления и всегда возвращусь к любому из них.
- Вложения
-
- make_file_group.tgz
- (175.03 КБ) 73 скачивания
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
использование GIT
Даже компактность проекта, при всех изменениях, не пострадала - сравним размеры архивов "голого" проекта (где нужно ещё всегда хранить десяток промежуточных копий файлов ... а потом в них запутаться ) и того же архива под контролем GIT:
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes$ ls -l make_file_group*.tgz
-rw-rw-r-- 1 olej olej 157737 янв 13 07:37 make_file_group.old.tgz
-rw-rw-r-- 1 olej olej 179231 янв 13 08:05 make_file_group.tgz
И такую точно трансформацию, дословно той же последовательностью команд, вы можете сделать любой свой, локальный и персональный ("для личного пользования"), проект...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
Нет, конечно же не всё!
Для того чтобы повторить то же самое даже с прикреплённым архивом - вам нужно один раз, первый, установить свои собственные параметры GIT ... по крайней мере: имя и E-mail комиттера (т.е. вас), без этого ближайший commit не произойдёт!
Про начальные установки - здесь: 1.6 Введение - Первоначальная настройка Git
А посмотреть что там сейчас установлено, можно так:
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git config --list | grep user
user.name=oleg.tsiliuric
user.email=oleg.tsiliuric@zodiacsystems.com
Код: Выделить всё
olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git blame Makefile
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 1) SUBDIRS = $(shell find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n")
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 2)
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 3) all clean :
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 4) @list='$(SUBDIRS)'; for subdir in $$list; do \
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 5) echo "=============== making $@ in $$subdir ================="; \
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 6) (cd $$subdir && make $@) \
35f9c8cb (oleg.tsiliuric 2021-01-13 07:52:50 +0200 7) done
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: использование GIT
А тут - краткое перечисление самых используемых команд (минимальный): Мой набор команд при работе с git.
Некоторые из них - не самые известные ... например stash.
А зная наименование-написание команды можно всегда получить детальную справку по команде так:
Код: Выделить всё
$ git help <команда>
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
использование GIT
Вариант №3:
Начну (репетировать) с GitLab ... не потому что он лучше других, а просто потому что там у меня проще и быстрее получается...
Прежде всего нужно один раз (если этого ещё нет) зарегистрироваться, создать логин, на URL https://gitlab.ru/users/sign_in.
Это самый известный и употребимый вариант...
Начну (репетировать) с GitLab ... не потому что он лучше других, а просто потому что там у меня проще и быстрее получается...
Прежде всего нужно один раз (если этого ещё нет) зарегистрироваться, создать логин, на URL https://gitlab.ru/users/sign_in.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя