从脚本执行git提交

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从脚本执行git提交相关的知识,希望对你有一定的参考价值。

我想将一些文件从脚本提交到我拥有的git服务器,这需要自动完成。

我的脚本(位于~/bin)做了类似的事情

rsync -arE --delete --files-from=~/files.list / ~/repo
git --git-dir ~/repo/.git add ~/repo/*
git --git-dir ~/repo/.git commit -m "automatic commit #123"
git --git-dir ~/repo/.git push

我希望它将文件~/files.list中列出的文件复制到~/repo(rsync处理这个),然后将这些文件添加到存储库,提交和推送。

但是,它无法正确地将文件添加到git提交,特别是它总是抓取工作目录中的文件(在本例中为~/bin),所以我需要一种方法来:

  1. 更改git命令的运行目录
  2. 告诉git从工作目录以外的目录中添加文件
答案

这听起来像你想要的是Git的-C选项,它在运行之前更改当前目录。您可以编写如下内容:

rsync -arE --delete --files-from=~/files.list / ~/repo
git -C ~/repo/ add .
git -C ~/repo/ commit -m "automatic commit #123"
git -C ~/repo/ push

当然,您也可以将其作为cd和子shell编写,但上面的内容可能会更容易一些:

rsync -arE --delete --files-from=~/files.list / ~/repo
(cd ~/repo/ &&
 git add .
 git commit -m "automatic commit #123"
 git push)

我在这里假设你的rsync命令已经在做你想要的了。

另一答案

无需复制,只需告诉git你的工作文件在哪里。

git -C ~/repo --work-tree="$PWD" add .
git -C ~/repo commit -m etc
git -C ~/repo push

把你的files.list列表放在.gitignore格式中,忽略除了你想让git追捕的文件之外的所有内容,并将它包含在repo的.git/info/exclude中:

# To include only this, and/this, and/that but ignore everything else:
# ignore everything
*
# except
!this
!and/this
!and/that
!etc
# do search inside directories, don't let ignores stop later searches inside
!*/

注意,命令行上的路径是相对于工作树的,如果你还没有在里面,所以如果你在一个仓库并想要从其他地方添加内容,你可以git --work-tree=/path/to/elsewhere add .,它会添加所有。

以上是关于从脚本执行git提交的主要内容,如果未能解决你的问题,请参考以下文章

你如何以不同的用户提交代码?

如何使用 shell 脚本从 git repo 打印最新的提交 ID

根据提交信息特拉维斯跳过脚本

使用 PHP 脚本作为提交后挂钩、触发 bash 脚本、执行 git-pull?

通过 FTP 将文件添加到 git 存储库时,在脚本中使用 inotifywait 自动执行 git 提交

jenkins学习5-jenkins拉取git仓库代码,执行python自动化脚本