【发布时间】:2018-03-13 06:52:29
【问题描述】:
我们有一个特定的要求,我们必须推送所有到达以提交到某个分支的文件。
我们计划通过 git hooks 特别是 commit-msg hook 来实现这一点。
这样做时,我们将分支克隆到临时位置(/tmp/),然后在 git commit-msg 挂钩中,尝试将到达的文件提交到某个分支。
但是现在我们看到 /tmp/ 中的所有文件都已删除。
粗略的 commit-msg 脚本如下:-
#!/bin/bash
#
#!/usr/bin/env bash
#git config credential.helper store
REPOSRC="https://<USER>:<PASS>@<REPO_URL>"
LOCALREPO="<LOCAL_REPO_DIR>"
echo "Pulling code to temporarry location";
cd /tmp && git clone "${REPOSRC}" || (cd "${LOCALREPO}"; git pull;)
#here when I navigate to /tmp/<LOCALREPO> all files are listed as DELETED
git diff --cached --name-status | while read st file; do
echo "file == $file and status == $st";
if [ "$st" == "A" ]; then
cd "${LOCALREPO}" && git add "$file" && git commit "$file" -m "$COMMIT_MSG" && git push origin "$branch"
else
cd "${LOCALREPO}" && git commit "$file" -m "$COMMIT_MSG" && git push origin "$branch"
fi
done
这可能是什么根本原因?
编辑:
GIT_INDEX_FILE 显示提交开始的索引文件的路径,而不是 /tmp/ 路径。有没有办法改变这个变量? 索引文件也会打印类似 next-index-32419.lock 的内容。 问候
【问题讨论】:
-
Hooks 在特殊环境中运行,通常设置了各种 Git 环境变量。因此,编写可以在其他地方运行完全通用的 Git 命令的钩子是很棘手的。确保您知道
$GIT_DIR和$GIT_INDEX_FILE的设置(如果有的话)以及如果它们设置了您应该怎么做。阅读 Git 如何使用索引。 -
好的@torek,让我看看你的建议。问候
-
似乎是问题所在。 GIT_INDEX_FILE 显示启动提交的索引文件的路径,而不是 /tmp/
路径。有没有办法改变这个变量? -
是的,您可以更改或取消设置环境变量,您需要这样做才能处理其他存储库中的提交。但是您需要保持变量不变以处理原始存储库中的未决提交(要提交的文件不一定是工作树中的文件)。
-
尝试
git --work-tree=$(pwd) pull,然后设置GIT_WORK_TREE=$(pwd)
标签: git commit githooks pre-commit-hook pre-commit