git别名:多个命令,可变参数
我经常发现自己打字这个:
git push remote1 branch1 branch2 tag1 tag2 tag3..
git push remote2 branch1 branch2 tag1 tag2 tag3..
我更喜欢一个别名,我可以输入它来代替:
git pushall branch1 branch2 tag1 tag2 tag3 ..
注意:我知道我可以用多个URL创建一个新的远程“全部”。 我们不要在这里讨论这个问题,而是专注于别名!
我可以硬编码远程名称,因为我有一些具有相同多个远程名称(通常是“drupal”和“github”)的项目。
迄今取得进展
我已经想出了一个非可变的版本:
[alias]
pushall = "!git push github $1; git push drupal $1; #"
这里有两个技巧
.ini
文件中具有特殊含义 #
忽略该行的其余部分。 但是这一次只推送一个分支(或标签)。 所以我必须输入这个:
git pushall branch1
git pushall branch2
git pushall tag1
git pushall tag2
git pushall tag3
...
我更喜欢一个别名,我可以输入这个:
git pushall branch1 branch2 tag1 tag2 tag3 ..
为什么不是一个新的遥控器“全部”与多个推网址?
如上所述,让我们专注于别名,以便读者找到他们正在寻找的东西。
无论如何,这就是为什么我不创建一个远程“全部”:
讨论这个问题的正确的地方就在这里,从多个远程位置上拉/推
也可以看看
以下是相关的,但它们不涉及可变参数:
以下内容可能会有所帮助,但它涉及纯shell脚本,并非专门用于git别名:
这真的可以通过您链接到的其他问题来解答,但为了清晰起见:
[alias]
pushall = "!git push github "$@"; git push drupal "$@"; :"
或者从命令行设置:
git config --global alias.pushall '!git push github "$@"; git push drupal "$@"; :'
通过扩展您的初始尝试:
[alias]
pushall = "!git push github $@; git push drupal"
这样, git pushall branch1 branch2 branch3
扩展为:
git push github branch1 branch2 branch3; git push drupal branch1 branch2 branch3
# | | | |
# +-------+-------+ +-------+-------+
# these arguments were | |
# expanded from $@ --------+ |
# |
# these are the arguments of the original command -+
$@
扩展到所有命令行参数。
在行尾没有必要#
; 碎片git pushall
被替换为别名的值,其余的参数
如果你有一个更大的远程仓库列表,你可以这样写:
[alias]
pushall = "!for repo in github drupal bitbucket; do git push $repo $@; done #"
# | |
# +-------+-------+
# put all your repos here |
# separated by spaces ------------+
这次#
号是必需的。 它将原来的论据变成评论; 否则该命令有语法错误,并且不运行。
如果你想推送到存储库的所有遥控器,那么你可以写一个更聪明的别名:
pushall = "! for repo in $(git remote); do git push $repo $@; done #"
它运行git remote
来查找所有的遥控器,并在继续之前使用命令替换来替换$(...)
与git remote
命令的输出。
您可以使用以下命令将其定义为全局别名:
$ git config alias.pusha '! for repo in $(git remote); do git push $repo $@; done #'
如果您有一些不想推送到所有遥控器的回收站,则可以将其定义为本地别名,并在存储库中使用thi命令自定义每个回购站中的遥控器列表:
$ git config --local alias.pusha '! for repo in github drupal; do git push $repo $@; done #'
将任意脚本打包为git别名的习惯用法是将其放入shell函数中:
pushall = "! f() { git push github "$@"; git push drupal "$@"; }; f"
我想指出$@
的正确使用是将它放在双引号内: "$@"
。