git-config没有';我不尊重现任工作主任
这很奇怪:(git-config没有';我不尊重现任工作主任,git,shell,Git,Shell,这很奇怪:(sh)中的以下代码: SHARED_ROOT=“~/.githooks/SHARED/SHARED_hooks_103”#这是一个git回购! cd“$SHARED_ROOT”&&pwd&&git config--show origin--get remote.origin.url 印刷品 ...githooks/shared/shared\u hooks\u 103 文件:/private/tmp/test103 clone/.git/config/tmp/test103 显示
sh
)中的以下代码:
SHARED_ROOT=“~/.githooks/SHARED/SHARED_hooks_103”#这是一个git回购!
cd“$SHARED_ROOT”&&pwd&&git config--show origin--get remote.origin.url
印刷品
...githooks/shared/shared\u hooks\u 103
文件:/private/tmp/test103 clone/.git/config/tmp/test103
显示git使用了错误的配置文件
显式告诉git config使用哪个文件:
git config-f“$SHARED\u REPO/.git/config”--显示源代码
工作正常
我对上面的shell语法在什么情况下不能工作感到困惑,或者它是一个奇怪的git bug?无论出于什么原因,在
git
hooks期间,git有时会泄漏一些内部git.*
环境变量。这些可能会对钩子期间发生的其他git
操作产生负面影响
在(我维护的git hooks框架)中,我使用以下代码来避免这些环境变量(同时仍然保留一些重要的环境变量)
:
少数几个白名单上的env变量允许git
执行一些操作:
:允许GIT\u EXEC\u PATH
查找其可执行帮助程序GIT
/GIT\u-SSH
:允许GIT\u-SSH\u命令
使用用户的设置来执行特殊的GIT
克隆指令SSH
- (可能还有更多,但还没有人报告需要其他bug!)
def no_git_env(_env=None):
# Too many bugs dealing with environment variables and GIT:
# https://github.com/pre-commit/pre-commit/issues/300
# In git 2.6.3 (maybe others), git exports GIT_WORK_TREE while running
# pre-commit hooks
# In git 1.9.1 (maybe others), git exports GIT_DIR and GIT_INDEX_FILE
# while running pre-commit hooks in submodules.
# GIT_DIR: Causes git clone to clone wrong thing
# GIT_INDEX_FILE: Causes 'error invalid object ...' during commit
_env = _env if _env is not None else os.environ
return {
k: v for k, v in _env.items()
if not k.startswith('GIT_') or
k in {'GIT_EXEC_PATH', 'GIT_SSH', 'GIT_SSH_COMMAND'}
}