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

如何创建个人git函数,在每次启动Bash时都可用?,git,bash,function,github,Git,Bash,Function,Github,我正在开发一个网站,我使用git更新网站, 我有两个分支: git添加 git提交“某物” git推送 git签出“prod” git合并--没有ff开发 git推送 git签出“dev” 我需要一个lazygit函数 function lazygit(){ git add . git commit "$1" git push git checkout "prod" git merge --no-ff dev git push git

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

  • git添加
  • git提交“某物”
  • git推送
  • git签出“prod”
  • git合并--没有ff开发
  • git推送
  • git签出“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" )
现在我的问题是,我怎样才能将这个函数保存到文件或其他任何地方,这样我就可以在任何地方使用它了


Thank’s alot

您可以在
~/.bashrc
~/.Bash_配置文件
~/.Bash_登录
~/.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"

另一个选项是定义Git别名,而不是shell函数

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

别名。*

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--notorig_HEAD”。请注意,shell命令将从中执行 存储库的顶级目录,不一定是当前目录。GIT_前缀 设置为从原始当前目录运行
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
将使整个过程崩溃,除非您提交所需的参数。
另一种方法是使用
test$#-gt 0 | | exit 1改为此处。

请参阅“非常感谢”,这有很多帮助,是一个更好的选择。但现在,即使在提交之后,我已经输入了comment:as$1=comment,我仍然有这个,我只是想通过输入:wq?这是因为我用别名吗?还是因为我在windows上?@Jonellamio,不太清楚会发生什么,但我有两个想法。1) 将
shift
命令放在
git commit“$1”
语句之后,以读取
git commit“$1”&&shift
——该语句应“使用”git传递给它调用的shell以处理脚本的参数。2) 将
-x
选项添加到
set-eu
命令中:它将在shell中打开“执行跟踪”,以便打印它调用的每个命令,每个命令前面都有一个“+”字符。这将向您显示shell运行的确切命令。@Jonellamio注意,
git config
有点奇怪,因为它没有
--set
选项,所以要“替换”别名,您可能需要执行
git config--unset alias.whatever
后跟
git config--add alias.whatever'!设置…“
@jonellamio,哦,当我们进行设置时,我应该注意到,没有任何特殊选项,
git config
命令在运行它的存储库上运行。这意味着您的别名只有在您位于该存储库的工作树中时才能工作(而不是在其他任何地方)。如果希望它变为“全局”,请将
--global
命令行选项传递到
git config
:它将使该命令更新您的
~/.gitconfig
文件。还要注意的是,该文件只是一个INI样式的文件,您可以在初次运行
git config--global--add alias之后手动编辑它。无论如何…
您的第一个想法是绝对正确的,我检查了git存储库,没有找到任何注释,似乎
git commit“$1”
没有被使用,所以我删除了广告,并用git commit“$1”和&shift添加了新的别名
一切看起来都很完美。这很奇怪,因为当我使用这行函数时,我从来没有遇到过这个问题。。。无论如何,非常感谢!