如何创建个人git函数,每次启动Bash时都可以使用?

时间:2017-11-08 06:07:06

标签: git bash function github

我正在开发一个网站,我使用git来更新网站, 我有两个分支,所以它是:

  • git add。
  • git commit“something”
  • git push
  • git checkout“prod”
  • git merge --no-ff dev
  • git push
  • git checkout“dev”

我需要一个看起来像

的lazygit函数
function lazygit(){
    git add .
    git commit "$1"
    git push
    git checkout "prod"
    git merge --no-ff dev
    git push
    git checkout "dev"
}

并且会像

一样使用
lazygit( "CSS UPDATE" )

现在我的问题是,如何将此功能保存到文件或任何地方以便我可以在任何地方使用它?

非常感谢

2 个答案:

答案 0 :(得分:2)

您可以在~/.bashrc~/.bash_profile~/.bash_login~/.profile文件(以及其他选项)中保留Bash功能,别名和设置。它依赖于系统,但大多数系统都有~/.bashrc,因此人们通常会参考这些系统。

我还建议用&&链接这些命令,这样如果一个命令失败,函数就会停止,而你的当前函数会继续运行,忽略任何失败:

function lazygit(){
  git add . &&
    git commit "$1" &&
    git push &&
    git checkout prod &&
    git merge --no-ff dev &&
    git push &&
    git checkout dev
}

另请注意,Bash在调用函数时不使用(),参数与其他shell命令一样是空格分隔的。所以你要跑:

$ lazygit "CSS UPDATE"

答案 1 :(得分:1)

另一种选择是定义Git别名而不是shell函数。

别名是配置的一部分,所以让我们看一下gitconfig(7)手册页(在本地运行git help config):

  

alias.*

     

git(1)命令包装器的命令别名 - 例如在定义"alias.last = cat-file commit HEAD"之后,调用" git last"相当于" git cat-file commit HEAD"。为了避免混淆和   脚本使用的麻烦,忽略隐藏现有Git命令的别名。参数被分开   空格,支持通常的shell引用和转义。引号对或反斜杠可用于   引用它们。

     

如果别名扩展以感叹号作为前缀,则将其视为shell命令。对于   例如,定义" alias.new =!gitk --all - not ORIG_HEAD",调用" git new"相当于   运行shell命令" gitk --all - not ORIG_HEAD"。请注意,shell命令将从中执行   存储库的顶级目录,可能不一定是当前目录。 GIT_PREFIX   设置为从原始当前目录运行git rev-parse --show-prefix返回。请参阅git-rev-parse(1)

所以你可以做到

$ git config --add alias.whatever '!set -eu; git add . &&
    git commit "$1" &&
    git push &&
    git checkout prod &&
    git merge --no-ff dev &&
    git push &&
    git checkout dev'

然后只是

$ git whatever "commit message"

除非您提交所需参数,否则set -eu;会导致整个事件崩溃。 另一种方法是在{.1}}之间添加类似的东西。