python - 如何找到运行 git 挂钩的存储库
问题描述
我有两个存储库 A 和 B。
我在存储库 A 中设置了以下 git 配置:
git config core.hooksPath <path to repository B>
现在,当我在存储库 A 中执行 git 命令时,存储库 B 中的 git 挂钩会运行。
从存储库 B 内部,如何获取存储库 A 的路径?这是因为许多其他存储库可以设置此 git 配置,因此存储库 B 需要知道它为哪个存储库运行其钩子。
注意:我的钩子是用 python 编写的。
解决方案
Git 设置环境变量 ,GIT_DIR
以包含从当前工作目录到 Git 存储库的(通常是相对的!)路径。作为相对路径,此路径仅在您更改目录之前有效,因此您可能希望将其转换为绝对路径,具体取决于您将在代码中执行的操作。
Git使用该环境变量来定位 Git 存储库目录。如果GIT_WORK_TREE
设置,则定位工作树,否则它是当前目录或存储库是裸露的。GIT_INDEX_FILE
也可以设置其他神奇的 Git 项目,例如。最好不要在不确保其中每一个都是绝对路径的情况下更改目录:
for name in ('GIT_INDEX_FILE', 'GIT_OBJECT_DIRECTORY', 'GIT_DIR', 'GIT_WORK_TREE'):
val = os.environ.get(name, None)
if val is not None and not os.path.isabs(val):
os.environ[name] = os.path.abspath(val)
for pathspec in ('GIT_ALTERNATE_OBJECT_DIRECTORIES', 'GIT_CEILING_DIRECTORIES'):
...
;
(根据文档,我将后两者的代码留作练习,特别是因为一个在 Windows 上是-delimited 的)。 编辑:被GIT_CEILING_DIRECTORIES
记录为已经是绝对的,所以GIT_ALTERNATE_OBJECT_DIRECTORIES
可能只需要调整。请参阅手册页对如何在此处处理每个字段的描述。
推荐阅读
- javascript - styled-component .attrs - React 无法识别道具
- python - Python - 从输出中删除行包含列表中的一个或多个子字符串
- reactjs - 从 const 变量导入时扩展运算符不起作用
- javascript - 如何根据数据表中的另一个单元格值隐藏单元格值
- android - 如何在surfaceview上显示帧缓冲区绘图?
- azure - 使用破折号(-)作为参数中键名的一部分(Azure 管道)
- python - 无法通过beautifulsoup从python中的输入字段中提取值
- javascript - 如何从数组的每个元素中删除第一个字符 - Javascript
- python - 将 JSON 读入 pandas DataFrame 并添加/合并它们
- python - Tensorflow:全卷积网络得到噪声输出