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

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


develop:git

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:git [2023/05/04 02:57]
admin
develop:git [2024/09/06 10:50] (текущий)
admin
Строка 29: Строка 29:
 # Добавить удаленный репозиторий # Добавить удаленный репозиторий
 git remote add <name> (или origin для репы по умолчанию) https://github/uset/repo git remote add <name> (или origin для репы по умолчанию) https://github/uset/repo
 +  # например
 +git remote add origin git@github.com:ncily/gh_actions.git
 +
  
   # Отправка проекта   # Отправка проекта
Строка 39: Строка 42:
  
   # Скачивание   # Скачивание
-git checkout [master] 
 git pull [origin] git pull [origin]
-    # возможно нужно будет указать upstream +git checkout [master] 
-    git branch --set-upstream-to=origin/main main+ 
 +  Проверка ключа  
 +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>
  
Строка 78: Строка 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
  
Строка 95: Строка 101:
 git checkout <существующая ветка> git checkout <существующая ветка>
 git checkout -b <новая ветка> git checkout -b <новая ветка>
- 
 # История коммитов # История коммитов
 git log <имя ветки> <--all> git log <имя ветки> <--all>
Строка 101: Строка 106:
 </code> </code>
 </details> </details>
- 
  
  
Строка 122: Строка 126:
 git tag -d <name> git tag -d <name>
 </code> </code>
-</details> 
  
  
Строка 134: Строка 137:
  
 При переходе между ветками, **заменяется все содержимое рабочего каталога**, файлы автоматически подменяются\\ При переходе между ветками, **заменяется все содержимое рабочего каталога**, файлы автоматически подменяются\\
 +</details>
  
  
Строка 150: Строка 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>
  
  
Строка 163: Строка 236:
 </code> </code>
 </details> </details>
 +
 +
 +
  
  
Строка 253: Строка 329:
 $ git merge --allow-unrelated-histories $ git merge --allow-unrelated-histories
 </code> </code>
 +</details>
 +
 +
 +===== Применение =====
 +<details>
 +<summary>:!: Кейсы</summary>
 +**Сборка с незасабмиченным топиком из геррита**\\
 +Переходим в начальную ветку, например мастер, на вкладке геррите ищем по ИД нужный коммит, важно, нужно начинать с последнего коммита в этом топике, в этот репозиторий, можно посмотреть по порядковому номеру, есть в url\\
 +Находим последний коммит, чекаутимсяв него, после этого, на вкладке гита, уже будут присутствовать все предыдущие коммиты этого топика, в этой репе\\
 +Если есть коммиты из другой репы, аналогично, находим последний, чекаутимся, проверяем что в гите есть все предыдущие\\
 +Создаем ветку, пушим ее\\
  
  
Строка 258: Строка 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.1683169069.txt.gz · Последнее изменение: 2023/05/04 02:57 — admin