использование GIT

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 07:45

У нас есть уже давно тема (уже 10 лет как есть :lol: ) про GIT ... вообще: контроль версий, GIT.
Там есть:
- про инструменты GIT ...
- ссылки на ресурсы и книги с информацией про GIT ...
- обсуждение публичных облачных ресурсов GIT и их URL ...

Здесь же будет только про практики использования GIT.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 08:04

Начну (и порекомендую) с такой вот любопытной статейки: Как я перестал бояться и полюбил git.
Домашние проекты уже все сажаются на гит. Пулы и ребейзы делаются на автомате, как проверка почты. Любой новый проект начинается с создания репозитория и .gitignore. Незаметно гит превращается из рабочей необходимости в первую. Если спросите, без чего я не представляю свою работу, то первое, что отвечу - это гит. Без модных IDE, Core i7 и смузи я обойдусь. Без гита - нет.

Я по-прежнему большую часть операций делаю в консоли. Вызывая удивление большинства нормальных коллег и понимание некоторых особо бородатых. Но это уже другая история.
Я успел за годы работы (кому как повезло :lol: ) поработать с централизованными системами контроля версий: и RCS (Revision Control System), и CVS (Concurrent Versions System), и SVN (Apache Subversion) ... давно и в разных конторах.
Но, к стыду своему, очень долго задержался (отстал) в использовании GIT :-( :-o (GIT нужно было начинать активно использовать годов с 2012-2014).
GIT - это совсем другое, и вот теперь будем навёрстывать ... в этой теме.

P.S. Попался, кстати, такой вот "исторический" обзор, кого заинтересует: История систем управления версиями.

P.P.S. Очень много и часто спрашивают ... по жизни и здесь в форуме (целый раздел есть Обучение, работа и занятость - лень конкретные примеры там искать, их множество): "Какой язык программирования, инструментарий изучать? С чего начать?".
Так вот ответ на такие вопросы на сегодня однозначный: "Начните с GIT, его изучайте. А освоив GIT досконально переходите к чему-то следующему". :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 08:18

Olej писал(а):
13 янв 2021, 07:45
Здесь же будет только про практики использования GIT.
Итак ...
Я вижу (и участвую, в той или иной мере) такие способы использования GIT:
- локальный GIT на своих собственных задачах ... способ совсем не очевидный, но очень полезный;
- развёртывание своего собственного GIT сетевого сервера для группового доступа к проекту;
- использование GIT публичных облачных ресурсов общего использования (GitHub, Bitbucket и подобные) - персонально или для групповых проектов;
- использование корпоративных ресурсов, соглашений и инструментария (jira, gerrit, и др.) в больших коллективных проектах, в качестве участников таких проектов ... часто это совмещается с технологиями коде-ревью;

Это достаточно разные техники использования...
Есть что-то ещё?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 08:38

Вариант №1:
Olej писал(а):
13 янв 2021, 08:18
локальный 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
Вот это для дальнейшего развития затолкаем под GIT...
Вложения
make_file_group.old.tgz
(154.04 КБ) 68 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 08:41

Olej писал(а):
13 янв 2021, 08:38
Вот это для дальнейшего развития затолкаем под 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
Создаём файл .gitignore описания файлов мсключаемых из-под контроля:

Код: Выделить всё

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
И создаём 1-ю ветку:

Код: Выделить всё

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

Непрочитанное сообщение Olej » 13 янв 2021, 09:03

Olej писал(а):
13 янв 2021, 08:41
И создаём 1-ю ветку:
Дальше я хочу добавить, в корень проекта, 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
Но commit буду уже в новой ветке:

Код: Выделить всё

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

    генерация файлов из списка со случайной длиной
Насколько далеко разъехалась текущая ветка от исходной master: одна строчка - один commit

Код: Выделить всё

olej@nvidia:~/2021_WORK/OWN_TEST.codes/make_file_group$ git cherry master
+ 35f9c8cb0329b5b5288a57a2fc58a676a36a2705
Вот, собственно, и всё!
Теперь мне не нужно хранить какие-то промежуточные копии, опасаясь потери полезных вариантов ... операциями подобными показанным выше я решаю все эти проблемы на будущее: создаю любые ответвления и всегда возвращусь к любому из них.
Вложения
make_file_group.tgz
(175.03 КБ) 68 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 09:11

Olej писал(а):
13 янв 2021, 09:03
Теперь мне не нужно хранить какие-то промежуточные копии, опасаясь потери полезных вариантов ... операциями подобными показанным выше я решаю все эти проблемы на будущее: создаю любые ответвления и всегда возвращусь к любому из них.
Даже компактность проекта, при всех изменениях, не пострадала - сравним размеры архивов "голого" проекта (где нужно ещё всегда хранить десяток промежуточных копий файлов ... а потом в них запутаться :lol: ) и того же архива под контролем 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 писал(а):
13 янв 2021, 09:03
Вот, собственно, и всё!
И такую точно трансформацию, дословно той же последовательностью команд, вы можете сделать любой свой, локальный и персональный ("для личного пользования"), проект...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 09:30

Olej писал(а):
13 янв 2021, 09:03
Вот, собственно, и всё!
Нет, конечно же не всё!
Для того чтобы повторить то же самое даже с прикреплённым архивом - вам нужно один раз, первый, установить свои собственные параметры 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
Благодаря этому вы всегда, и через 10 лет, сможете узнать кто, когда и какие изменения внёс в подконтрольные файлы:

Код: Выделить всё

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

Непрочитанное сообщение Olej » 13 янв 2021, 09:47

Olej писал(а):
13 янв 2021, 09:11
дословно той же последовательностью команд,
А тут - краткое перечисление самых используемых команд (минимальный): Мой набор команд при работе с git.
Некоторые из них - не самые известные ... например stash.
А зная наименование-написание команды можно всегда получить детальную справку по команде так:

Код: Выделить всё

$ git help <команда>
P.S. Ну и от того же автора, мне оказывается полезной в качестве подсказки его статья про branch, ветки: Git для начинающих. Урок 7. Работа с ветками

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

использование GIT

Непрочитанное сообщение Olej » 13 янв 2021, 13:54

Вариант №3:
Olej писал(а):
13 янв 2021, 08:18
- использование GIT публичных облачных ресурсов общего использования (GitHub, Bitbucket и подобные)
Это самый известный и употребимый вариант...

Начну (репетировать) с GitLab ... не потому что он лучше других, а просто потому что там у меня проще и быстрее получается... :-)

Прежде всего нужно один раз (если этого ещё нет) зарегистрироваться, создать логин, на URL https://gitlab.ru/users/sign_in.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей