You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全局post-commit钩子中无法在指定目录执行Git命令问题

问题解答

1. 是否是我的操作导致了该异常结果?

是的,你的操作细节存在疏漏。最可能的原因是git -C后指定的路径不正确(比如使用了错误的相对路径),导致Git未能成功切换到A的仓库目录,最终在当前的B仓库上下文执行了命令。

2. 若操作无误,该现象的原因是什么?

这并非post-commit钩子的限制。Git的post-commit钩子确实会在提交操作的仓库目录下运行,但git -C参数本身支持切换到任意合法的Git仓库目录执行命令。如果出现显示B远程信息的情况,只有两种可能:

  • 指定的A仓库路径不存在、拼写错误,或你没有访问权限;
  • 路径指向的目录并非A的Git仓库根目录(比如不小心指向了B自身)。

当Git无法切换到指定的目标目录时,不会终止执行,而是默认使用当前工作目录(即B的仓库)继续运行命令,因此显示了B的远程信息。

3. 如何实现预期行为?

你可以通过以下方式确保命令正确切换到A的仓库:

使用绝对路径

直接指定A仓库根目录的绝对路径,这样无论钩子在哪个目录运行,都能准确定位到A:

#!/bin/sh 
git -C /完整绝对路径/to/A remote show origin 

验证路径合法性(可选优化)

在脚本中添加路径验证逻辑,避免因路径错误导致意外行为:

#!/bin/sh
A_REPO="/完整绝对路径/to/A"
# 检查目标路径是否为Git仓库根目录
if [ -d "$A_REPO/.git" ]; then
    git -C "$A_REPO" remote show origin
else
    echo "错误:未找到A的Git仓库目录,请检查路径是否正确"
fi

若使用相对路径

如果必须使用相对路径,确保路径是从B的仓库目录出发,正确指向A的根目录。例如,若B是A目录下的submodules/B子目录,相对路径应为../..:

#!/bin/sh 
git -C ../.. remote show origin 

内容的提问来源于stack exchange,提问作者HenryHe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:20:21