Почему git alias с push не работает? - PullRequest
0 голосов
/ 27 апреля 2018

Пожалуйста, соблюдайте эти команды Git:

C:\DeploymentSmokeTests [master ↑1]> git lg -n 2
* bd2e150 |  (HEAD -> master) Support Sql Server 2012. Limit the number of tested namespaces. (19 minutes ago) [Mark Kharitonov]
* 2d57b65 |  (origin/master) Merged PR 538: Implement the Schedule Jobs deployment test (36 minutes ago) [Kharitonov, Mark]
C:\DeploymentSmokeTests [master ↑1]> git config alias.shelve
!git branch shelve_$1;git checkout shelve_$1;git push -u origin shelve_$1
C:\DeploymentSmokeTests [master ↑1]> git shelve pbi405783
Switched to branch 'shelve_pbi405783'
error: src refspec pbi405783 does not match any.
error: failed to push some refs to 'http://tdc1tfsapp01:8080/tfs/defaultcollection/DFDevOps/_git/DFDeploymentSmokeTests'
C:\Dayforce\DevOps\DFDeploymentSmokeTests [shelve_pbi405783]> git lg -n 2
* bd2e150 |  (HEAD -> shelve_pbi405783, master) Support Sql Server 2012. Limit the number of tested namespaces. (19 minutes ago) [Mark Kharitonov]
* 2d57b65 |  (origin/master) Merged PR 538: Implement the Schedule Jobs deployment test (37 minutes ago) [Kharitonov, Mark]
C:\DeploymentSmokeTests [shelve_pbi405783]>

Пояснение:

  • У меня есть один коммит для отправки на сервер
  • У меня есть псевдоним shelve , который создает ветку, проверяет ее и отправляет с отслеживанием
  • Однако, пытаясь использовать псевдоним, я получаю ошибку, которую я не понимаю. По какой-то причине он отказывается от толчка.

Обратите внимание, что выполнение push отдельно работает нормально:

C:\DeploymentSmokeTests [shelve_pbi405783]> git push -u origin shelve_pbi405783
Counting objects: 9, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 2.58 KiB | 2.58 MiB/s, done.
Total 9 (delta 8), reused 0 (delta 0)
remote: Analyzing objects... (9/9) (4 ms)
remote: Storing packfile... done (23 ms)
remote: Storing index... done (59 ms)
To http://tdc1tfsapp01:8080/tfs/defaultcollection/DFDevOps/_git/DFDeploymentSmokeTests
 * [new branch]      shelve_pbi405783 -> shelve_pbi405783
Branch 'shelve_pbi405783' set up to track remote branch 'shelve_pbi405783' from 'origin'.
C:\DeploymentSmokeTests [shelve_pbi405783 ≡]>

1 Ответ

0 голосов
/ 27 апреля 2018

Когда вы передаете аргумент псевдониму, Git помещает этот аргумент после раскрытия псевдонима.

Это верно, даже если вы используете $<em>number</em> в расширении. Таким образом, расширение текста:

!git branch shelve_$1;git checkout shelve_$1;git push -u origin shelve_$1

при вызове становится:

git branch shelve_pbi405783;
git checkout shelve_$pbi405783;
git push -u origin shelve_pbi405783 pbi405783

(Я разбил это на три отдельные строки для демонстрации и обсуждения - внутренне это одна большая строка).

Первая и вторая команды и делают то, что вы хотите.

Третья команда говорит, что нужно две ссылки , с установленной опцией -u, на удаленный origin. Первая ссылка - shelve_pbi405783, то, что вы хотите; вторая ссылка pbi405783.

Git успешно отправляет shelve_pbi405783 и устанавливает его восходящий поток на origin/shelve_pbi405783, но не может нажать pbi405783, так как он не существует. Таким образом, он печатает это сообщение об ошибке и останавливается после выполнения того, что вы хотите.

Вы можете просто проигнорировать ошибку, но было бы лучше ее избежать. Чтобы избежать этого, вы должны написать команду оболочки, которая принимает и удаляет дополнительный аргумент. Обычный метод - написать функцию оболочки :

'!f() { ...; } f'

Затем сама функция оболочки получает параметры, и если она содержит буквенные строки $<em>number</em>, они расширяют соответствующий параметр. (Так что теперь не имеет значения, расширяется ли Git $1.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...