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"
  我想指出$@的正确使用是将它放在双引号内: "$@" 。 
