【问题标题】:How can I run git commands via shell script?如何通过 shell 脚本运行 git 命令?
【发布时间】:2011-04-23 04:46:10
【问题描述】:

我的服务器上有我的主仓库和两个克隆。

一个克隆在我的本地进行编辑。另一个副本在我的服务器上的公用文件夹中,用于提取更改并实时查看它们。

我正在经历的当前例程是编辑本地 -> 登录到我的服务器到公用文件夹并执行 git pull 以查看更新的更改。

我想使用 git hooks “post-receive” shell 脚本来更改公共文件夹并执行 git pull origin master...我似乎无法弄清楚如何正确执行此操作。我试过这个:

cd /home/demo/public_html/example.com/public/ && `git status`

但我得到的回报是“不是存储库”

但是,如果我运行 cd /home/demo/public_html/example.com/public/ && ls

我会得到公用文件夹的内容(所以我要搬到正确的地方)在此先感谢!

更新:

应该提到我正在尝试这个有和没有蜱

【问题讨论】:

  • 你的 .git 文件夹在哪里?

标签: git shell command


【解决方案1】:

在执行 git pull 或 git status 进行测试之前,首先尝试取消设置 GIT_DIR 环境变量。

unset GIT_DIR

【讨论】:

  • 就是这样,现在只需要绕过遥控器:权限被拒绝(公钥)。
【解决方案2】:

我想你想要这个:

cd /home/demo/public_html/example.com/public/ && git status

反引号用于捕获shell变量中命令的输出,例如:

x=`ls`

ls的输出放入变量x

【讨论】:

  • 这或类似的方法对我来说是最好的方式。我发现从 shell 脚本运行时 git 的行为有所不同。 -C 选项不起作用,我必须像你所做的那样在 git 命令前面加上 cd 到相关目录。
【解决方案3】:

您实际上是否包括了git status 周围的反引号?也就是说,你写的是cd ... && `git status`还是cd ... && git status?如果您正在编写第一个,那么它所做的是评估git status 命令,然后尝试将其结果解释为要执行的另一个命令。删除反引号,您应该只得到git status 的结果,而不是错误,因为它试图将其结果解释为命令。

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2011-06-17
    • 2019-11-06
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多