Публикация недавно созданной ветки Git в удаленном репозитории может быть проще, чем вы ожидаете.
Вступление
В различных моделях рабочих процессов Git очень часто возникает ситуация, когда создается новая ветка и отправляется (публикуется) в удаленный репозиторий. Большинство людей создает много новых отраслей. Просто для инициализации запроса на слияние (слияния), для показа кода удаленным коллегам или просто для резервного копирования локальных изменений за ночь
К сожалению, в Git это не так просто, как могло бы быть:
1
2
3
4
5
6
7
8
|
~ /C/my-fancy-project (master|✓) $ git checkout -b featureX Switched to a new branch 'featureX' ~ /C/my-fancy-project (featureX|✓) $ git push fatal: The current branch featureX has no upstream branch. To push the current branch and set the remote as upstream, use git push -- set -upstream origin featureX |
Хм, просто скопируйте и вставьте данную строку, и вы настроены:
1
2
3
4
5
|
~ /C/my-fancy-project (featureX|✓) $ git push -- set -upstream origin featureX Total 0 (delta 0), reused 0 (delta 0) To /tmp/my-fancy-project-remote/ * [new branch] featureX -> featureX Branch 'featureX' set up to track remote branch 'featureX' from 'origin' . |
Конечно, вы можете запомнить его через некоторое время (однако, как я заметил, что многие люди этого не делают) или даже использовать более короткий синтаксис:
1
2
3
4
5
|
~ /C/my-fancy-project (featureX|✓) $ git push -u origin featureX Total 0 (delta 0), reused 0 (delta 0) To /tmp/my-fancy-project-remote/ * [new branch] featureX -> featureX Branch 'featureX' set up to track remote branch 'featureX' from 'origin' . |
Тем не менее, для меня было много символов, особенно многократно повторяемых, особенно в типичном рабочем процессе с одним удаленным репозиторием (обычно называемым origin
).
Решение
Идеальным решением для меня была бы всего одна команда. Что-то вроде git publish
.
1
2
3
4
5
6
7
8
|
~ /C/my-fancy-project (master|✓) $ git checkout -b featureY Switched to a new branch 'featureY' ~ /C/my-fancy-project (featureY|✓) $ git publish Total 0 (delta 0), reused 0 (delta 0) To /tmp/my-fancy-project-remote/ * [new branch] featureY -> featureY Branch 'featureY' set up to track remote branch 'featureY' from 'origin' . |
Разве это не было бы хорошо?
Как вы, наверное, знаете из моих предыдущих постов, я большой энтузиаст всеобъемлющей автоматизации (например, CI / CD) или, по крайней мере, полуавтоматики (то есть «упрощения»), когда предыдущая невозможна (или жизнеспособна). Поэтому в то время я начал искать возможные улучшения. Git написан разработчиками для разработчиков и предлагает различные способы настройки. Самый простой — написать псевдоним. В этом случае так же просто, как добавить в ~/.gitconfig
:
1
2
3
|
[ alias ] # Pushes given tag to remote 'origin' repo (or the remote passed as the second parameter) publishtag = "!sh -c 'git push ${2:-origin} $1' -" |
В результате в дополнение к базовому случаю (установка восходящей ветви на источник (если необходимо) и продвижение веток от текущей ветви к источнику):
1
|
$ git publish |
также возможно сделать публикацию в каком-либо другом удаленном хранилище:
1
|
$ git publish myOtherRemote |
Убираться
В качестве аналога git publish
легко реализовать git unpublish
:
1
2
3
|
[ alias ] # Removes given tag from remote 'origin' repo (or the remote passed as the second parameter) unpublishtag = "!sh -c 'git push ${2:-origin} :refs/tags/$1' -" |
чтобы удалить текущую ветку из удаленного репозитория ( origin
или передаваемый как второй параметр):
1
2
3
|
~ /C/my-fancy-project (featureNoLongerNeeded|✓) $ git unpublish To /tmp/my-fancy-project-remote/ - [deleted] featureNoLongerNeeded |
вместо:
1
2
3
|
~ /C/my-fancy-project (featureNoLongerNeeded|✓) $ git push origin --delete featureNoLongerNeeded To /tmp/my-fancy-project-remote/ - [deleted] featureNoLongerNeeded |
или же
1
2
3
|
~ /C/my-fancy-project (featureNoLongerNeeded|✓) $ git push origin :featureNoLongerNeeded To /tmp/my-fancy-project-remote/ - [deleted] featureNoLongerNeeded |
Опять же короче и легче запомнить.
Резюме
Я использую git publish
(и git unpublish
) уже много лет, и мне это очень нравится. Пользуясь возможностью написания этой серии блогов Git Tricks, я решил поделиться ею с другими (влюбился в командную строку :-)). Помните, однако, что теперь это часть GitKurka (или его восходящий проект без цензуры) — набор полезных и продуктивных настроек и псевдонимов для Git.
Кстати, я больше не занимаюсь обучением Git, но люди, желающие еще больше развить свои навыки в Git, могут рассмотреть курс обучения на месте от Bottega (PL / EN), онлайн-курс Maciej Aniserowicz ( devstyle.pl ) (PL) или всеобъемлющая книга про Git (EN).
Главная фотография, основанная на работе Ивы Балк , опубликованной в Pixabay , Pixabay License.
См. Оригинальную статью здесь: Удобное добавление новой ветки Git в удаленный репозиторий — Git Tricks # 3 Мнения, высказанные участниками Java Code Geeks, являются их собственными. |