有没有办法为git选项创建快捷方式或别名

时间:2017-02-02 19:40:32

标签: git git-alias

我发现自己在git loggit diffgit show中经常使用# l is an alias for log with pretty format git l --name-status 选项。我知道git别名,但它们只适用于命令或命令和/或选项的组合。我想要为此选项创建git别名。

--ns

所以我可以这样做,--name-statusgit l --ns 的捷径:

    import React,{Component} from "react"
    import {View,TouchableOpacity,Text} from "react-native"

    class Test extends Component{
      state ={
           count = 0
      }
    changeCount(){
       this.setState({count:this.state.count++})
    }

    render(){
       return(
             <View>
                <TouchableOpacity onPress={this.changeCount.bind(this)}/>
                <Text>{this.state.count}</Text>
            <View/>)
    }
 }

更新:有关不同注意事项,请参阅my own answer

3 个答案:

答案 0 :(得分:1)

除非修改源代码以识别其他标志,否则最好的选择是使用别名来重写标志:

[alias]
    l = "!l() { : git log ; git log $(echo \"$@\" | sed \"s/--ns/--name-status/\") ; } && l"

或者你可以在bash中定义一些别名g来为你做这个(你可以配置auto-complete来处理这个但我不记得怎么做了我的头脑) :

function g {
    git $(echo "$@" | sed "s/--ns/--name-status/")
}

答案 1 :(得分:1)

我希望 hack 对某人有帮助,所以在此发布。它基于the answer这个问题。

我本可以创建自己的git命令void SlaveMain() { // // Initialize the message // memcpy(g_ucTxBuff,SLAVE_MSG,sizeof(SLAVE_MSG)); // // Set Tx buffer index // ucTxBuffNdx = 0; ucRxBuffNdx = 0; // // Reset SPI // MAP_SPIReset(GSPI_BASE); //Message("\n\r SPI reset"); // Configure SPI interface // MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI), SPI_IF_BIT_RATE,SPI_MODE_SLAVE,SPI_SUB_MODE_3, (SPI_HW_CTRL_CS | SPI_4PIN_MODE | SPI_TURBO_ON | SPI_CS_ACTIVELOW | SPI_WL_8)); Message("\n\rSPI configured"); // // Register Interrupt Handler // MAP_SPIIntRegister(GSPI_BASE,SlaveIntHandler); // // Enable Interrupts // MAP_SPIIntEnable(GSPI_BASE,SPI_INT_RX_FULL|SPI_INT_TX_EMPTY); // // Enable SPI for communication // MAP_SPIEnable(GSPI_BASE); //Message("\n\rSPI enabled"); /*MAP_SPIReset(GSPI_BASE); MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI), SPI_IF_BIT_RATE,SPI_MODE_SLAVE,SPI_SUB_MODE_0, (SPI_HW_CTRL_CS | SPI_4PIN_MODE | SPI_TURBO_OFF | SPI_CS_ACTIVELOW | SPI_WL_8)); MAP_SPIEnable(GSPI_BASE); //}*/ } ,但我更喜欢在备份~/bin/git-<custom command>时更改现有的git别名。 git命令具有在提及.gitconfig时在当前目录中执行的优势(不需要下面提到的<path>)。

我将替换选项逻辑拉出到帮助器fn cd ${GIT_PREFIX:-.}中。然后它用于别名optionsl),logd),diffdt)等。我故意保留fn在difftool而不是shell脚本中所以一切都在一个地方。很容易为fn添加新的选项。

gitconfig需要尊重cd ${GIT_PREFIX:-.}作为shell命令执行的git别名(see this)。这对<path>非常重要。

  

请注意,shell命令将从顶级目录执行   存储库,可能不一定是当前目录。

我已经为git loglogdiff添加了别名。不可能有git别名或自定义git命令来覆盖内置的git命令,并且不想为difftool创建一个,所以我遗漏了show

<强>之前:

git show

<强>后:

[alias]
    l       = !"cd ${GIT_PREFIX:-.} && git lg2"
    d       = diff
    dt      = difftool
    lg2     = # alias for log

现在我可以做到:

[alias]
    l       = "!f() { cd ${GIT_PREFIX:-.} && git lg2 $(git options "$@"); }; f"
    d       = "!f() { cd ${GIT_PREFIX:-.} && git diff $(git options "$@"); }; f"
    dt      = "!f() { cd ${GIT_PREFIX:-.} && git difftool $(git options "$@"); }; f"
    lg2     = # alias for log
    #workaround: helper fn to alias options
    options = "!f() { \
                echo "$@" \
                    | sed 's/\\s/\\n/g' \
                    | sed 's/^--ns$/--name-status/' \
                    | sed 's/^--no$/--name-only/' \
                    | xargs; \
            }; f"

答案 2 :(得分:0)

我不认为别名命令行参数是可能的。