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

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

Модератор: Olej

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

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

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

Olej писал(а):
13 янв 2021, 13:54
Прежде всего нужно один раз (если этого ещё нет) зарегистрироваться, создать логин, на URL https://gitlab.ru/users/sign_in.
Теперь при необходимости создания нового проекта идём на страницу https://gitlab.ru/projects/new и заполняем все необходимые реквизиты нового проекта (собственно, самое обязательное здесь - дать уникальное имя проекту)...
Снимок экрана от 2021-01-13 12-34-22.png
Снимок экрана от 2021-01-13 12-34-22.png (134.5 КБ) 1829 просмотров
После чего жмакаем "Создать проект" и получаем страницу с инструкцией на несколько вариантов как наполнить проект содержанием (файлами):
Снимок экрана от 2021-01-13 12-43-12.png
Снимок экрана от 2021-01-13 12-43-12.png (111.77 КБ) 1829 просмотров

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

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

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

Olej писал(а):
13 янв 2021, 14:14
получаем страницу с инструкцией на несколько вариантов как наполнить проект содержанием
Я пойду способом наполнения от существующего каталога какой-то решавшейся задачи ... скажем задачи из темы С++ в относительно новых стандартах:
... заменить алгоритм for_each() STL (т.е. C++11/14/17, конечно ... ...) на операторный цикл.
У нас есть относительно отработанная задача в отдельном каталоге (или мы её туда продублируем, в отдельный каталог):

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab$ pwd
/home/olej/2021_WORK/git.clouds/gitlab

olej@nvidia:~/2021_WORK/git.clouds/gitlab$ tree func2for
func2for
├── func2for
├── func2for.cc
├── func2for.hist
├── func2forS
├── func2forS.cc
└── Makefile

0 directories, 6 files
Захожу внутрь этого каталога...

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ cd func2for
... и поехали ...

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git init
Инициализирован пустой репозиторий Git в /home/olej/2021_WORK/git.clouds/gitlab/func2for/.git/

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git remote add origin git@gitlab.ru:Olej/func2for.git

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git add .

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git commit -m "Initial commit - алгоритм -> цикл функтора"
[master (корневой коммит) 71e3a24] Initial commit - алгоритм -> цикл функтора
 6 files changed, 208 insertions(+)
 create mode 100644 Makefile
 create mode 100755 func2for
 create mode 100644 func2for.cc
 create mode 100644 func2for.hist
 create mode 100755 func2forS
 create mode 100644 func2forS.cc

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git push -u origin master
The authenticity of host 'gitlab.ru (95.163.185.42)' can't be established.
ECDSA key fingerprint is SHA256:Kzn98+Vnqt2NqBAWOsifRKFgkbfMO/0MFSYs2B+jEDA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added 'gitlab.ru,95.163.185.42' (ECDSA) to the list of known hosts.
Перечисление объектов: 8, готово.
Подсчет объектов: 100% (8/8), готово.
При сжатии изменений используется до 4 потоков
Сжатие объектов: 100% (8/8), готово.
Запись объектов: 100% (8/8), 8.89 KiB | 505.00 KiB/s, готово.
Всего 8 (изменения 2), повторно использовано 0 (изменения 0)
To gitlab.ru:Olej/func2for.git
 * [new branch]      master -> master
Ветка «master» отслеживает внешнюю ветку «master» из «origin».
Это всё очень сильно похоже на создание локального репозитория под контролем GIT (да иначе и быть не может), только теперь он неразрывно связан со своим облачным собратом, к которому можно предоставить доступ любому желающему из сети...

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

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

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

Olej писал(а):
13 янв 2021, 14:29
Это всё очень сильно похоже на создание локального репозитория под контролем GIT (да иначе и быть не может), только теперь он неразрывно связан со своим облачным собратом, к которому можно предоставить доступ любому желающему из сети...
Вот уже после этих действий страница (репозиторий) проекта - https://gitlab.ru/Olej/func2for - примет вид:
Снимок экрана от 2021-01-13 13-46-36.png
Снимок экрана от 2021-01-13 13-46-36.png (140.41 КБ) 1828 просмотров

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

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

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

Olej писал(а):
13 янв 2021, 14:29
... и поехали ...
Но я здесь специально тупо следовал инструкции на странице, при выполнении команды (добавить все файлы под контроль GIT):

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git add .
Мне не нужны исполнимые файлы (2 шт.), для чего я заведу .gitignore:

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ echo func2for > .gitignore

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ echo func2forS >> .gitignore

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ cat .gitignore
func2for
func2forS

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git status
На ветке master
Ваша ветка обновлена в соответствии с «origin/master».

Неотслеживаемые файлы:
  (используйте «git add <файл>…», чтобы добавить в то, что будет включено в коммит)
    .gitignore

ничего не добавлено в коммит, но есть неотслеживаемые файлы (используйте «git add», чтобы отслеживать их)


olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git add .gitignore
Я хотел бы это отнести уже в новую ветку (branch):

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git checkout -b ver.2
Переключено на новую ветку «ver.2»

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git commit
[ver.2 ebaa1ea] преобразование алгоритма for_each() в цикл for() вызовов функтора
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git branch
  master
* ver.2
И отсылаем в облако (GitLab):

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git push origin ver.2
Перечисление объектов: 4, готово.
Подсчет объектов: 100% (4/4), готово.
При сжатии изменений используется до 4 потоков
Сжатие объектов: 100% (2/2), готово.
Запись объектов: 100% (3/3), 374 bytes | 374.00 KiB/s, готово.
Всего 3 (изменения 1), повторно использовано 0 (изменения 0)
remote:
remote: To create a merge request for ver.2, visit:
remote:   https://gitlab.ru/Olej/func2for/-/merge_requests/new?merge_request%5Bsource_branch%5D=ver.2
remote:
To gitlab.ru:Olej/func2for.git
 * [new branch]      ver.2 -> ver.2

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

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

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

Olej писал(а):
13 янв 2021, 15:02
Я хотел бы это отнести уже в новую ветку (branch):
Можно слить эти ветки (с новыми изменениями):

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git branch
  master
* ver.2

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git checkout master
Переключено на ветку «master»
Ваша ветка обновлена в соответствии с «origin/master».

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git branch
* master
  ver.2

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git merge ver.2
Обновление 71e3a24..ebaa1ea
Fast-forward
 .gitignore | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore
Перекомпилировать исполнимые файлы проекта и убедиться что они теперь не попадают под контроль:

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ make
g++ -Wall -std=c++11 -O3 func2for.cc -o func2for
g++ -Wall -std=c++11 -O3 func2forS.cc -o func2forS

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git status -s
И залить на GitLab:

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/func2for$ git push origin master
Всего 0 (изменения 0), повторно использовано 0 (изменения 0)
To gitlab.ru:Olej/func2for.git
   71e3a24..ebaa1ea  master -> master

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

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

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

Olej писал(а):
13 янв 2021, 15:38
И залить на GitLab:
И теперь ... в любой стране, на любом компьютере ... я для этого использую просто произвольный пустой каталог... :

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/XXX$ ls -l
итого 0
Клонируем текущее состояние репозитория:

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/XXX$ git clone https://gitlab.ru/Olej/func2for.git
Клонирование в «func2for»…
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 3), reused 0 (delta 0), pack-reused 0
Распаковка объектов: 100% (11/11), 9.18 KiB | 1.84 MiB/s, готово.

olej@nvidia:~/2021_WORK/git.clouds/gitlab/XXX$ ls -l
итого 4
drwxrwxr-x 3 olej olej 4096 янв 13 14:05 func2for
И убеждаемся что это он и есть:

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/XXX$ cd func2for/

olej@nvidia:~/2021_WORK/git.clouds/gitlab/XXX/func2for$ git status 
На ветке master
Ваша ветка обновлена в соответствии с «origin/master».

нечего коммитить, нет изменений в рабочем каталоге

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

olej@nvidia:~/2021_WORK/git.clouds/gitlab/XXX/func2for$ git log
commit ebaa1ea270e400152942612b1f06974d2ac442d7 (HEAD -> master, origin/ver.2, origin/master, origin/HEAD)
Author: oleg.tsiliuric <oleg.tsiliuric@zodiacsystems.com>
Date:   Wed Jan 13 13:40:17 2021 +0200

    преобразование алгоритма for_each() в цикл for() вызовов функтора

commit 71e3a2416f72dd73ce35dc50f713cb37b3f39e0b
Author: oleg.tsiliuric <oleg.tsiliuric@zodiacsystems.com>
Date:   Wed Jan 13 12:49:05 2021 +0200

    Initial commit - алгоритм -> цикл функтора

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

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

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

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

Прежде всего нужно один раз (если этого ещё нет) зарегистрироваться, создать логин, на URL https://gitlab.ru/users/sign_in.
То же самое на Bitbucket: регистрируемся на https://bitbucket.org ...\
P.S. По моему опыту (может это и не так ... но по воплям в Интернет похоже на то) не регистрируйтесь по аккаунтам Google, Microsoft и т.д. ... что они там предложат! ... если у вас там какие-то пароли с "символами" (даже подчёркивание, похоже) - то вы не сможете войти в сетевой репозиторий для pull.
Регистрируйтесь "по людски" ;-) : с условным именем, паролем, email на который придёт подтверждение и т.д. ... и будет вам счастье! :-D

После чего можем создавать репозитории в своём рабочем пространстве, на странице URL примерно такого вида:https://bitbucket.org/repo/create?works ... -tsiliuric
Снимок экрана от 2021-01-13 18-35-04.png
Снимок экрана от 2021-01-13 18-35-04.png (71.84 КБ) 1827 просмотров
Там их со временем будет много...
А открытая страница конкретного свеже созданного репозитория (аналогично предыдущему GitLab) имеет вид:
Снимок экрана от 2021-01-13 18-36-47.png
Снимок экрана от 2021-01-13 18-36-47.png (130.66 КБ) 1827 просмотров
Как легко видеть, это достаточно пустой репозиторий, содержащий README.md (описание репозитория) и нужный нам (по предыдущему опыту) .gitignore + здесь же ниже - HELP по использованию...
... все остальные файлы нам предстоит добавлять самостоятельно.
Все файлы здесь же прямо на WEB-странице можно редактировать.

Собственно, по технике работы с Bitbucket есть полнейшее руководство от разработчика, да ещё и переведенное на русский язык: Bitbucket для повышения качества кода. Четыре шага, чтобы начать работу

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

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

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

Olej писал(а):
13 янв 2021, 19:42
... все остальные файлы нам предстоит добавлять самостоятельно.
Начинаем мы с того, что клонируем созданный пустой (почти) репозиторий в выбранный локальный каталог, где с ним будет работа:

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket$ pwd
/home/olej/2021_WORK/git.clouds/bitbucket

olej@nvidia:~/2021_WORK/git.clouds/bitbucket$ git clone https://oleg-tsiliuric@bitbucket.org/oleg-tsiliuric/func2for.git
Клонирование в «func2for»…
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Распаковка объектов: 100% (4/4), 1.73 KiB | 147.00 KiB/s, готово.
И получаем:

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket$ tree func2for 
func2for
└── README.md

0 directories, 1 file
На самом деле там есть, конечно, .gitignore и каталог .git ... но их не так легко увидеть (из-за лидирующей . в имени):

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket$ ls -a func2for/
.  ..  .git  .gitignore  README.md

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket$ cd func2for/

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git branch
* master

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

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

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

Olej писал(а):
13 янв 2021, 20:16
На самом деле там есть, конечно, .gitignore и каталог .git ... но их не так легко увидеть (из-за лидирующей . в имени):
Копирую туда требуемые мне файлы проекта:

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ ls -a
.  ..  func2for.cc  func2for.hist  func2forS.cc  .git  .gitignore  Makefile  README.md
Дополняю (а можно и очистить) файл .gitignore именами своих собираемых бинарников, чтобы вывести их из-под контроля (ни к чему это ;-) ):

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ head -n3 .gitignore
func2for
func2forS
Готовим индексируемые файлы:

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git status -s
 M .gitignore
?? Makefile
?? func2for.cc
?? func2for.hist
?? func2forS.cc

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git add .

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git status -s
M  .gitignore
A  Makefile
A  func2for.cc
A  func2for.hist
A  func2forS.cc
Делаю компиляцию и убеждаюсь что сгенерированные бинарники не под контролем:

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ make
g++ -Wall -std=c++11 -O3 func2for.cc -o func2for
g++ -Wall -std=c++11 -O3 func2forS.cc -o func2forS

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ ls -a
.  ..  func2for  func2for.cc  func2for.hist  func2forS  func2forS.cc  .git  .gitignore  Makefile  README.md

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git status -s
M  .gitignore
A  Makefile
A  func2for.cc
A  func2for.hist
A  func2forS.cc
Всё!
Фиксируем изменения.

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git commit -m 'преобразование алгоритма for_each() в цикл for() вызовов функтора'
[master ba8a2a0] преобразование алгоритма for_each() в цикл for() вызовов функтора
 5 files changed, 211 insertions(+)
 create mode 100644 Makefile
 create mode 100644 func2for.cc
 create mode 100644 func2for.hist
 create mode 100644 func2forS.cc

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

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

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

Olej писал(а):
13 янв 2021, 21:40
Фиксируем изменения.
Можно отправлять очередной комит на сервер:

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

olej@nvidia:~/2021_WORK/git.clouds/bitbucket/func2for$ git push origin master
Password for 'https://oleg_tsiliuric@bitbucket.org':
Перечисление объектов: 9, готово.
Подсчет объектов: 100% (9/9), готово.
При сжатии изменений используется до 4 потоков
Сжатие объектов: 100% (7/7), готово.
Запись объектов: 100% (7/7), 1.93 KiB | 1.93 MiB/s, готово.
Всего 7 (изменения 2), повторно использовано 0 (изменения 0)
To https://bitbucket.org/oleg_tsiliuric/func2for.git
   6fac405..ba8a2a0  master -> master
P.S. Вот это то место (это важно!) где у вас запросят пароль вашего аккаунта ... и если вы плохо зарегистрировались, рассчитывая на аккаунт Google или Microsoft, то это место вы можете не пройти + вам придётся подняться на 2-3 сообщения выше, и всё, начиная с регистрации аккаунта, проделать с начала!

После всех этих манипуляций, с консольными командами, ваша WEB-страница проекта примет вид:
Снимок экрана от 2021-01-13 20-26-51.png
Снимок экрана от 2021-01-13 20-26-51.png (139.88 КБ) 1824 просмотра
P.S. Обратите внимание, что а). в настройках аккаунта вы можете поменять язык на русский и б). там же в настройках очень полезно добавить SSH-key для доступа к репозиторию по SSH.

Ответить

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

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

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