7

我正在尝试编写一个简单的 shell 脚本来简化 git 提交过程。

代替

git add . -A
git commit -m "message"
git push

我想要做commit.sh "my commit message"

这是我所拥有的:

#!/bin/bash
commit_message="$1"
git add . -A
git commit -m $commit_message
git push

这有两个问题:

  1. 当提交消息包含空格时,例如“我的提交消息”,我得到以下输出:

    error: pathspec 'commit' did not match any file(s) known to git.

    error: pathspec 'message' did not match any file(s) known to git.

    所以它使用的提交消息的唯一部分是“我的”,而其他部分“提交消息”被省略了。

  2. 我认为git add .引用了 shell 脚本的位置,而不是当前项目目录。我该如何做到这一点,以便git add .参考我目前在终端中的位置?

4

6 回答 6

20

您必须在脚本中引用变量。

#!/bin/bash -e
commit_message="$1"
git add . -A
git commit -m "$commit_message"
git push

我还设置了“-e”,这样如果有任何错误,脚本将退出而不处理后续命令。

至于您的第二个问题,.脚本中的 应该按照您的意图引用您当前的工作目录。但是,这-A导致它添加了所有已在 repo 中修改的文件。

于 2013-07-29T17:52:39.687 回答
12

您可以使用参数创建别名。就像是:

[alias]
  cap = "!git add . && git commit -m '$1' && git push origin"
于 2013-07-29T18:11:04.073 回答
5

with and Alias 我不能把变量放在句子的中间,但是你可以创建一个函数并将它放在你的 .bashrc 上,就像这样

commit(){
  git add --all . && git commit -m '$1' && git push origin master
}
于 2014-02-19T01:26:45.420 回答
1

去过那里,做到了:Git Flow

您也可以在 git 配置文件中创建别名。这比编写 shell 脚本要好得多,因为这些将是git命令本身的扩展。

另外,不要忘记:

$ git commit --all

这将提交您使用提交添加或编辑的所有文件。

于 2014-02-19T02:23:48.967 回答
0

不久前,我有类似的想法,并在谷歌搜索语法后得到了以下文件。

下面的脚本还添加了一条默认消息,以防您不关心提交消息并读取当前分支进行推送。

#!/bin/bash

# get the argument message
message="$1"

# If no commit message is passed, use current date time in the commit message
if [[ -z "${message// }" ]]
    then
        message=$(date '+%Y-%m-%d %H:%M:%S')
fi

# stage all changes
git add .
echo "====staged all git files"

# add commit
git commit -m "$message"
echo "====added the commit with message: '$message'"

# get current branch and push
current_branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
git push origin "$current_branch"
echo "====pushed changes to '$current_branch' branch"
于 2020-11-08T15:37:29.463 回答
0

我的解决方案,仅供参考

#!/bin/sh

comment=$1

git add ./*

git commit -m $comment

echo " commit finished,push to origin master  ? "

read commit

case $commit in 
y|Y|YES|yes)
git push
;;
n|NO|N|no)
 exit 0

esac

用法

./commit.sh    your comment message ,type yes if you want to push to master
于 2017-10-09T03:07:19.297 回答