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

Coo*_*ief 4 git bash function github

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

  • git 添加。
  • git commit “某事”
  • git 结帐“产品”
  • git merge --no-ff dev
  • git 结帐“开发”

我需要一个看起来像的lazygit函数

function lazygit(){
    git add .
    git commit "$1"
    git push
    git checkout "prod"
    git merge --no-ff dev
    git push
    git checkout "dev"
}
Run Code Online (Sandbox Code Playgroud)

并且会像

lazygit( "CSS UPDATE" )
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如何将此函数保存到文件或其他任何内容中,以便我可以在任何地方使用它?

非常感谢

kos*_*tix 6

另一种选择是定义 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'
Run Code Online (Sandbox Code Playgroud)

然后只是

$ git whatever "commit message"
Run Code Online (Sandbox Code Playgroud)

set -eu;除非您提交所需的参数会使整个事情崩溃。另一种方法是将类似的东西粘test $# -gt 0 || exit 1;在那里。


dim*_*414 5

您可以将 Bash 函数、别名和设置保留在~/.bashrc~/.bash_profile~/.bash_login~/.profile文件(以及其他选项)中。它依赖于系统,但大多数系统都有一个“ ~/.bashrcand”,因此人们通常会提到“and”。

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

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

另请注意,Bash 在调用函数时不使用()参数,就像其他 shell 命令一样以空格分隔。所以你会运行:

$ lazygit "CSS UPDATE"
Run Code Online (Sandbox Code Playgroud)