如何自动化“提交和推送”过程?(git)

fiei3ece  于 2022-11-20  发布在  Git
关注(0)|答案(8)|浏览(164)

我有一个git repo,在每次对代码库做重大修改后,我会去终端执行一组命令.

git add .
git commit -m 'some message'
git push origin master

这些每天都是一样的,过程相当无聊。有没有人能建议一种方法,以某种方式自动化这个过程?
我运行的是Linux Mint 14操作系统。

xu3bshqb

xu3bshqb1#

您可以使用Bash脚本非常容易地自动完成此操作。

git add .

echo 'Enter the commit message:'
read commitMessage

git commit -m "$commitMessage"

echo 'Enter the name of the branch:'
read branch

git push origin $branch

read

将上述代码存储为.sh文件(例如gitpush.sh
由于您必须使此sh文件成为可执行文件,因此需要在终端中运行以下命令一次:

chmod +x gitpush.sh

现在运行这个.sh文件。
每次运行它时,它都会询问提交信息和分支的名称。如果分支不存在或者推送目的地没有定义,那么git会生成一个错误。为了读取这个错误,我添加了最后一条read语句。如果没有错误,那么git会生成pushed successfully type-of消息。

flvtvl50

flvtvl502#

每天提交一次你的工作并不是版本控制的一种有效的使用,更好的方法是进行小的、有规律的、原子的提交,这些提交反映了代码库(或者存储库中正在跟踪的任何东西)的开发步骤。
使用shell脚本可能有些矫枉过正--大多数人使用别名来自动化git命令,无论是shell别名还是git别名。
在我的例子中,我使用shell别名-其中有几个是:

alias gp='git push'
alias gc='git commit'
alias gca='git commit -a'
alias gcm='git commit -m'
alias gcam='git commit -am'

所以你要我做的就是:

gcam "My commit message";gp

这不是很多的打字,也不无聊,我每天都要做很多类似的git操作(我知道--因为我会检查我的shell历史记录)。
使用小别名而不是脚本的原因是我可以灵活地使用不同的提交方式,如果我使用脚本,我将失去这种灵活性。

sr4lhrrt

sr4lhrrt3#

这并不是一个很大的打字工作,但可以通过使用别名来简化这个过程。
编辑$HOME/.gitconfig以添加一些快捷方式,例如,要将git p用作git push origin master的别名,请用途:

[alias]
        p = push origin master

如果你使用的是像bash这样的descent shell,你可以使用history特性,你需要知道的一切都在bash的man页面中。
了解更多关于别名here的信息
顺便说一句,git add .可能不是最好的方法,因为它会将文件夹中的每个文件都添加到临时区域。最好使用git add -u只添加那些已经在索引中的文件。

hxzsmxv2

hxzsmxv24#

可以在$HOME/.gitconfig.git/config中同时使用别名和shell函数

[alias]
        newalias = "!f(){ git add . && git commit -m \"$1\"; git push origin master; };f"

并称之为

$ git newalias "message ..."
9lowa7mx

9lowa7mx5#

Windows的最佳解决方案:1)在系统上的任意位置创建一个文本文件,并根据需要更改字段后将以下代码插入其中

git add .

git commit -m "commitMessage"

git push url master

exit

2)保存并退出文件。
3)将文件名更改为push.sh
4)使用git powershell导航到系统上的文件目录,然后使用以下命令chmod +x push.sh使文件可运行。
5)单击Windows开始并搜索Task Scheduler,然后按创建新任务。
6)单击操作并浏览到您的push.sh文件,然后按“确定”。
7)导航到触发器并修改计划时间。
现在您有了一个脚本,它可以根据您的需要自动执行。

juud5qan

juud5qan6#

对于我的工作流来说,git“adds”和git“commits”是有目标的和原子的,所以把它们合并到一个批量命令中是没有用的。然而,每天,我都要推送到许多不同仓库中的许多不同分支,这通常遵循“git push origin {branchname}"的模式。这 * 可以 * 在shell脚本中自动完成:

parse_git_branch() {
  git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3
}
git push origin $(parse_git_branch)

然后,您可以添加一个bash别名(例如,“git-push”)来调用这个脚本,它将在您所在的任何仓库上有效地运行“git push origin {currently checked out分支}”。

qrjkbowd

qrjkbowd7#

我的bash脚本将选择您当前所在的分支,并拉取以避免来自同一分支的冲突,然后推送。如果您要在多个分支之间/跨多个分支工作,此脚本将非常有用。

git add .
read -p "Enter commit message: " commit_message
git commit -m "$commit_message"
BRANCH=$(git describe --contains --all HEAD)
git pull --rebase origin "$BRANCH"
git push origin "$BRANCH"

使用方法:

  • 将此脚本放入一个bash或shell文件中,并使用您选择的名称。
  • 运行脚本,例如:一月一日
  • 添加您的提交消息& done。推送代码。
qyuhtwio

qyuhtwio8#

下面是一个简单的bash脚本

#!/bin/bash
    git add .
    echo "Insert your commit >"
    read -r commit
    git commit -m commit
    echo "Pull or Push >"
    read -r answer
    if [[ $answer == "pull" ]];
    then
        git pull
        echo "Done with pulling, do you wanna push your files (y/n)?"
        read -r pushing
        if [[ $pushing == "y" ]];
        then
            git push
        else
            exit;
        fi
    elif [[ $answer == "push" ]];
    then
        git pull
    fi

将其保存为.sh扩展名,然后保存为+x以获得执行权限

相关问题