我有一个包含版本化git钩子的存储库。我在.git/hooks
文件夹中有指向我的版本化git挂钩的符号链接(相对)。 git钩子在python中实现,包含#!/usr/bin/env python
shebang行(应该工作https://docs.python.org/3/using/windows.html?#shebang-lines)。
作为我的版本化git钩子的一部分 - 我在预提交脚本中导入了同一级别的预提交文件和utils.py
文件。
当我在Mac上提交时,预提交成功运行。但是,当我在Windows机器上提交时,我的预提交脚本会在导入utils.py
的行上爆炸,我不明白为什么。出了什么问题,我错过了什么?
编辑:这就是我生成符号链接的方式。请注意,我使用了这个问题:https://stackoverflow.com/a/28382515/2155605使os.symlink
能够在unix和windows上运行。另请注意,当此脚本运行时,我位于.git/hooks
目录。
for hook in hooks_to_enable:
os.chmod("../../git-hooks/" + hook, os.stat("../../git-hooks/" + hook).st_mode | 0o111)
os.symlink(os.path.join("..", "..", "git-hooks", hook), hook)
编辑:我可能已经缩小了问题范围。当我在我的版本化挂钩中打印模块搜索路径(sys.path
)时,它会显示.hooks
目录中的搜索路径,因此无法导入版本化挂钩目录中的所有模块,因为它们不是在路上。如果我手动添加它,它的工作原理。但是,当我在Unix上做同样的事情时,搜索路径包含版本化挂钩的目录 - 而不是.git/hooks
目录 - 这就是它在Unix上工作的原因。