Инструменты пользователя

Инструменты сайта


develop:git

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:git [2023/04/27 08:01]
admin
develop:git [2024/09/06 10:50] (текущий)
admin
Строка 4: Строка 4:
  
 ===== Общее ===== ===== Общее =====
 +<details>
 +<summary>:!: Сведения</summary>
 **Git** как таковой opensource-софт, вся работа выполняется **непосредственно в нем**, системы типа **github / gitlab** это общедоступные **хранилища**, в которых можно размещать репозитории для внешнего хранения, софт так или иначе работает прежде всего с **локальным репозиторием** и уже отдельным действием отправляет данные на внешку.\\ **Git** как таковой opensource-софт, вся работа выполняется **непосредственно в нем**, системы типа **github / gitlab** это общедоступные **хранилища**, в которых можно размещать репозитории для внешнего хранения, софт так или иначе работает прежде всего с **локальным репозиторием** и уже отдельным действием отправляет данные на внешку.\\
 **master** главная ветка по умолчанию, создается **первым коммитом**\\ **master** главная ветка по умолчанию, создается **первым коммитом**\\
  
-<code bash> +:!: Авторизация\\ 
-# Установка +Непонятная ситуация с авторизацией, вроде ввели новый способ по токенам, по крайней мере в винде только через него получилось, в линуксе по ssh ключу удалось.. (используется id_rsa.pub)\\
-apt git install+
  
 +Постоянная конфигурация хранится в файле "~/.bash_profile" (в винде по крайней мере)\\
 +Для хранения токенов можно использовать:
 +  * windows -  командой "**git config --global credential.helper manager-core**" 
 +  * linux - "**git config --global credential.helper store**"
 +Минус в том что хранится в открытом виде, есть варианты **store/cache**, второй хранит 15 минут и только в памяти\\
 +
 +# Установка\\
 +apt git install\\
 +</details>
 +
 +
 +<code bash>
 # Инициализация проекта # Инициализация проекта
 cd /'project' && git init cd /'project' && git init
  
-# Добавление файлов к проекту +# Добавить удаленный репозиторий 
-git add . (file1 file2 ...)+git remote add <name>ли origin для репы по умолчанию) https://github/uset/repo 
 +  # например 
 +git remote add origin git@github.com:ncily/gh_actions.git
  
-# Фиксация изменений (-m коммент, -a применить ко всем либо к указанным файлам)+ 
 +  # Отправка проекта 
 +  # Добавление файлов к проекту 
 +git add . (file1 file2 ...) 
 +  # Фиксация изменений (-m коммент, -a применить ко всем либо к указанным файлам)
 git commit -m "Text comment" -a (or changed-file1) git commit -m "Text comment" -a (or changed-file1)
 +  # Отправка на удаленный репозиторий
 +git push <name> [ветка]
  
-Добавить удаленный репозиторий +  Скачивание 
-git remote add <name> <site>.git+git pull [origin] 
 +git checkout [master]
  
-Отправка на удаленный репозиторий +  Проверка ключа  
-git push <name> [master]+ssh -T git@github.com 
 +ssh -vT git@github.com 
 +  
 +  # Авторизация по SSH 
 +После создания пары ключей SSH вам необходимо добавить открытый ключ на GitHub.com, чтобы включить доступ по SSH для вашей учетной записи 
 +В параметрах уч записи в ГХ, добавляем SSH-ключ, саписываем туда содержимое файла ".ssh/id_rsa.pub" нужно учетки 
 +После этого, проверяем авторизацию командой "ssh -T git@github.com"
 </code> </code>
- 
-:!: Авторизация\\ 
-Непонятная ситуация с авторизацией, вроде ввели новый способ по токенам, по крайней мере в винде только через него получилось, в линуксе по ssh ключу удалось.. (используется id_rsa.pub)\\ 
- 
-Постоянная конфигурация хранится в файле "~/.bash_profile" (в винде по крайней мере)\\ 
-Для хранения токенов можно использовать: 
-  * windows -  командой "**git config --global credential.helper manager-core**"  
-  * linux - "**git config --global credential.helper store**" 
-Минус в том что хранится в открытом виде, есть варианты **store/cache**, второй хранит 15 минут и только в памяти\\ 
  
  
Строка 44: Строка 63:
 git remote [-v] git remote [-v]
  
-git remote add <name> <url>+git remote add <name> (origin для репы по умолчанию) <url>
  
 git remote remove/rename <name> git remote remove/rename <name>
Строка 50: Строка 69:
 git remote show <name> git remote show <name>
  
 +  # Отправить изменения
 git push <name> [branch] git push <name> [branch]
  
- # pull делает еще и merge сразу+ # Скачать изменения 
 +git pull <name> (или без указания, origin по умолчанию)
 git fetch <name> git fetch <name>
 </code> </code>
 </details> </details>
- 
  
  
Строка 68: Строка 88:
 **Rebase** в целом тоже самое что и слияние, но работает иначе, слияние совмещает последние коммиты веток, а перебазирование вставляет последний коммит в точку ответвления и применяет последовательно всю историю изменений, получается, тем самым делая его обновленной копией последнего коммита в мастере (в которую сливается)\\ **Rebase** в целом тоже самое что и слияние, но работает иначе, слияние совмещает последние коммиты веток, а перебазирование вставляет последний коммит в точку ответвления и применяет последовательно всю историю изменений, получается, тем самым делая его обновленной копией последнего коммита в мастере (в которую сливается)\\
 [[https://git-scm.com/book/ru/v2/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%9F%D0%B5%D1%80%D0%B5%D0%B1%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5|Дока]]\\ [[https://git-scm.com/book/ru/v2/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%9F%D0%B5%D1%80%D0%B5%D0%B1%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5|Дока]]\\
- 
  
  
 <code bash> <code bash>
 git branch [-v] git branch [-v]
- 
  # Слитые [не слитые] ветки  # Слитые [не слитые] ветки
 git branch --merged [--no-merged] [name] git branch --merged [--no-merged] [name]
- + # Удалить (удалится только слитая ветка, -D для удаления не слитых)
- # Удалить (удалится только слитая ветка)+
 git branch -d <name> git branch -d <name>
- 
 git branch --all git branch --all
  
Строка 85: Строка 101:
 git checkout <существующая ветка> git checkout <существующая ветка>
 git checkout -b <новая ветка> git checkout -b <новая ветка>
- 
 # История коммитов # История коммитов
 git log <имя ветки> <--all> git log <имя ветки> <--all>
Строка 91: Строка 106:
 </code> </code>
 </details> </details>
- 
  
  
Строка 112: Строка 126:
 git tag -d <name> git tag -d <name>
 </code> </code>
-</details> 
  
  
Строка 124: Строка 137:
  
 При переходе между ветками, **заменяется все содержимое рабочего каталога**, файлы автоматически подменяются\\ При переходе между ветками, **заменяется все содержимое рабочего каталога**, файлы автоматически подменяются\\
 +</details>
  
  
Строка 140: Строка 154:
     directory = *     directory = *
 </code> </code>
 +</details>
  
  
 +<details>
 +<summary> :!: Общие примеры</summary>
 +<code bash>
 +# Теги (полный путь для тегов, который не пересекается с ветками- :refs/tags/tagname)
 +git push origin :tagname
 +git push --delete origin tagname
 +git tag --delete tagname // удалить локальный тег
 +
 + # создание тега
 +./execute_on_all_repos.sh git tag -a "1863.9" -m "1863.9"
 + # запушить вроде так долджно быть
 +./execute_on_all_repos.sh git push origin "1863.9"
 + # Удаление тегов
 +./execute_on_all_repos.sh git push --delete origin refs/heads/1830
 +
 + # Удалить удаленную ветку
 +git push origin --delete 1854_norm
 +./execute_on_all_repos.sh git push origin --delete 1854_norm
 + # Удалить локальную ветку
 +git branch --delete -D 1854_norm
 +./execute_on_all_repos.sh git branch --delete -D 1854_norm
 +
 +
 +# Генерирует уникальную строку, на основании последнего тега, с добавлением хеша последнего коммита 
 + # В данном случае для мозговой сборки, вида "1862.1-14-g9f97cdb7dc"
 +git describe
 + # Можно задать шаблон для отбора имеющихся тегов, здесь берет мгашный тег, на выходе: "mga.18.0.51129-18-g9f97cdb7dc"
 +git describe "--match=mga*" --abbrev=8
 + # Эта команда фильтрует по маске и возвращает перечень имеющихся тегов
 +git ls-remote --quiet --tags --refs --sort=-version:refname | grep -oP mga.*
 +
 +
 +git ls-remote --quiet --tags --refs --sort=-version:refname | grep -oP 'refs/tags/\K'
 +git ls-remote --quiet --tags --refs | grep -oP 'refs/tags/\K\d{4}\.\d+'
 +// автосгенерированный либо релизный тег
 +git describe --match=[0-9]* --abbrev=8 | tr -s '\r\n' ' ' | sed 's/ //g'
 +</code>
 </details> </details>
  
 +
 +<details>
 +<summary> :!: Интеграция GitHub и Jenkins</summary>
 +[[https://www.blazemeter.com/blog/how-to-integrate-your-github-repository-to-your-jenkins-project|Источник]]\\
 +
 +:!: SCM (Source Control Management)
 +
 +Один из вариантов в проекте ГХ создаем вебхук, с указанием адреса дженкинса, указываем по каким событиям отправлять триггер, в дженкинс.\\
 +Затем в джобе дженкинса, указываем адрес репозитория, в "Build Trigger", "GitHub hook trigger for GITScm polling" и вроде как все\\
 +
 +
 +В тоже время есть и другие варианты "Build Trigger", возможно в них можно обойтись без вебхука на стороне ГХ и указания адреса дженкинса\\
 +Так, чтобы работать из репы, нужно код пайплайна разместить там и выбрать "Pipeline script from SCM"
 +</details>
 +
 +
 +<details>
 +<summary> :!: Экспорт из GitLab в GitHub</summary>
 +Работает в т.ч. и как актуализация уже существующего экспорта в GH\\
 +[[https://stackoverflow.com/questions/22265837/transfer-git-repositories-from-gitlab-to-github-can-we-how-to-and-pitfalls-i|Source]]\\
 +[[https://github.com/piceaTech/node-gitlab-2-github|Source2]]\\
 +
 +<code bash>
 +  # from gitLab
 +git clone --mirror git@your-gitlab-site.com:username/repo.git
 +
 +cd repo
 +  # to gitHub
 +git push --no-verify --mirror git@github.com:username/repo.git
 +</code>
 +</details>
  
  
Строка 153: Строка 236:
 </code> </code>
 </details> </details>
 +
 +
 +
  
  
Строка 243: Строка 329:
 $ git merge --allow-unrelated-histories $ git merge --allow-unrelated-histories
 </code> </code>
 +</details>
 +
 +
 +===== Применение =====
 +<details>
 +<summary>:!: Кейсы</summary>
 +**Сборка с незасабмиченным топиком из геррита**\\
 +Переходим в начальную ветку, например мастер, на вкладке геррите ищем по ИД нужный коммит, важно, нужно начинать с последнего коммита в этом топике, в этот репозиторий, можно посмотреть по порядковому номеру, есть в url\\
 +Находим последний коммит, чекаутимсяв него, после этого, на вкладке гита, уже будут присутствовать все предыдущие коммиты этого топика, в этой репе\\
 +Если есть коммиты из другой репы, аналогично, находим последний, чекаутимся, проверяем что в гите есть все предыдущие\\
 +Создаем ветку, пушим ее\\
  
  
Строка 248: Строка 345:
  
  
 +<details>
 +<summary>:!: Пример слияния репозиториев</summary>
 +Точнее включение одного репозитория в другой, подпроектом\\
  
 +<code bash>
 +# Клонируем тот репозиторий, который будет мержиться
 +git clone https://github.com/first-repo
 +cd first-repo
 +git remote rm origin # На всякий случай отвязываем репозиторий 
 + 
 +# Подготавливаем репозиторий: перемещаем всё содержимое репозитория (за исключением папки .git) в отдельную папку, которая и будет подключаться в другой репозиторий
 +mkdir first_repo
 +git mv $(ls -A | grep -v first_repo | grep -v .git) first_repo/ 
 +git commit -m "prepare repo for merging in main_repo - move all to new subdir"
 + 
 +# Клонируем рядом целевой репозиторий
 +cd ..
 +git clone https://github.com/main_repo
 +cd main_repo/
 + 
 +# Подключаем к нему подготовленный первый репозиторий и вытаскиваем его master в отдельную ветку first-repo
 +git remote add first-repo ../first-repoe/
 +git fetch first-repo
 +git branch first-repo remotes/first-repo/master
 + 
 +# Мержим ветку в локальный master
 +git merge first-repo --allow-unrelated-histories
 +git remote rm first-repo
 + 
 +# Проверяем и пушим
 +git log 
 +git push
 +</code>
 +</details>
  
  
 +
 +<details>
 +<summary> :!: Cмена Remote</summary>
 +
 +<code bash>
 +git remote -v
 +# View existing remotes
 +# origin  https://github.com/user/repo.git (fetch)
 +# origin  https://github.com/user/repo.git (push)
 +
 +git remote set-url origin https://github.com/user/repo2.git
 +# Change the 'origin' remote's URL
 +
 +git remote -v
 +# Verify new remote URL
 +# origin  https://github.com/user/repo2.git (fetch)
 +# origin  https://github.com/user/repo2.git (push)
 +</code>
 +</details>
  
  
 =====  ===== =====  =====
develop/git.1682582502.txt.gz · Последнее изменение: 2023/04/27 08:01 — admin