Git提交的Shell脚本助手

kqlmhetl  于 2022-12-10  发布在  Git
关注(0)|答案(6)|浏览(186)

我正在尝试写一个简单的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.当提交消息中包含空格时,比如“my commit message”,我会得到以下输出:
error: pathspec 'commit' did not match any file(s) known to git.
error: pathspec 'message' did not match any file(s) known to git.
所以它使用的提交消息的唯一部分是“my”,而“commit message”的其他部分被忽略了。
1.我认为git add .引用了shell脚本的位置,而不是当前的项目目录。我如何使git add .引用我当前在终端中的位置?

2cmtqfgy

2cmtqfgy1#

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

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

我还设置了“-e”,以便在出现任何错误时,脚本将退出而不处理后续命令。
至于第二个问题,脚本中的.应该指向当前的工作目录,这是您想要的,但是-A会导致它添加repo中修改过的所有文件。

kiz8lqtg

kiz8lqtg2#

您可以使用参数创建别名。例如:

[alias]
  cap = "!git add . && git commit -m '$1' && git push origin"
uyto3xhc

uyto3xhc3#

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

commitpush(){
  git add --all . && git commit -m '$1' && git push origin '$2'
}

并像commitpush一样使用“提交描述”分支名称

qyyhg6bp

qyyhg6bp4#

去过那里,做过:Git Flow
你也可以在git配置文件中使用create aliases,这比编写shell脚本要好得多,因为这些脚本是git命令本身的扩展。
还有,别忘了:

$ git commit --all

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

62lalag4

62lalag45#

我的解决方案,仅供参考

#!/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
vtwuwzda

vtwuwzda6#

不久前,我有类似的想法,并与下面的文件后,做了一些谷歌搜索语法。
下面的脚本还添加了一个默认消息,以防你不关心提交消息,并读取当前分支推送。

#!/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"

相关问题