代码之家  ›  专栏  ›  技术社区  ›  mark

为什么git alias with push不起作用?

git
  •  2
  • mark  · 技术社区  · 7 年前

    请遵守以下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]>
    

    说明:

    • 我有一个提交推送到服务器
    • 我有个别名叫 搁置 它创建一个分支,检出它并通过跟踪推送
    • 但是,尝试使用别名时,我出现了一个错误,我不理解。出于某种原因,它拒绝推动。

    注意,运行 单独工作良好:

    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 回复  |  直到 7 年前
        1
  •  3
  •   torek    7 年前

    当您向别名传递参数时,Git会将该参数放在别名扩展之后。

    即使您使用 $ number 在扩展中。因此,展开文本:

    !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
    

    (为了展示和讨论,我将其分为三行,从内部来看,这都是一行)。

    第一个和第二个命令是and,执行您想要的操作。

    第三个命令是推 参考,带有 -u 选项集,远程 origin .第一个参考是 shelve_pbi405783 ,这就是你想要的;第二个参考是 pbi405783

    Git成功推送 shelve\u pbi405783 并将其上游设置为 origin/shelve_pbi405783 ,但无法推送 pbi405783 因为它不存在。因此,它会打印错误消息,并在执行所需操作后停止。

    您可以简单地忽略错误,但最好避免它。为了避免这种情况,您必须编写一个shell命令来接受和处理额外的参数。通常的方法是编写 shell函数 :

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

    然后,shell函数本身接收参数,如果它包含literal $ 数字 字符串,这些字符串展开相应的参数。(因此,现在是否 吉特 扩展 $1 .)