27

我有一个 git 仓库。在我在代码库中进行的每次重大更改之后,我所做的就是去终端并执行一组命令。

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

这些每天都是一样的,这个过程很无聊。任何人都可以提出一种以某种方式自动化此过程的方法吗?

我正在运行 Linux Mint 14 操作系统。

4

6 回答 6

34

您可以使用 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消息类型。

于 2013-05-23T08:46:53.570 回答
12

每天将你的工作作为一个大块提交一次并不是对版本控制的有效使用。进行反映代码库开发步骤(或在存储库中跟踪的任何其他内容)的小型、常规、原子提交要好得多

使用 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 历史)。

使用小别名而不是脚本的原因是我可以灵活地使用不同的提交方式,如果我使用脚本,我将失去这种灵活性。

于 2013-05-24T09:08:03.460 回答
11

这不是很多打字工作,但可以通过使用别名来简化该过程。

编辑$HOME/.gitconfig以添加一些快捷方式,例如git p用作 的别名git push origin master,使用:

[alias]
        p = push origin master

如果您使用 bash 之类的下降 shell,则可以使用历史记录功能。您需要知道的一切都在 bash 的手册页中。

在此处阅读有关别名的更多信息

附带说明一下,git add .这可能不是最好的方法,因为它将文件夹中的每个文件都添加到暂存区域。最好git add -u只添加那些已经在索引中的文件。

于 2013-05-23T08:56:10.347 回答
11

您可以一起使用别名和 shell 函数,在$HOME/.gitconfig.git/config

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

并将其称为

$ git newalias "message ..."
于 2013-05-23T09:16:25.387 回答
9

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) 导航到触发器并修改调度时间。

现在您有了一个可以根据需要自动执行的脚本。

于 2019-12-17T02:43:28.490 回答
2

对于我的工作流程, 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 check out branch}”。

于 2016-03-10T17:51:56.723 回答