git - 从 git 中的 checkout 后 Hook 设置环境变量

标签 git shell environment-variables

我有一个工作环境,我经常在其中构建二进制文件,然后使用该二进制文件启动长时间运行的进程。当这些正在运行时,我想切换到另一个 git 分支并在那里做一些工作,并可能构建一些不会覆盖当前正在运行的二进制文件的新二进制文件。

现在,构建和运行脚本使用 $OUT_DIR 环境变量来确定二进制文件的输出目录。理想情况下,我希望 $OUT_DIR 是特定于分支的,以避免上述构建相互覆盖的问题。
起初,这对于 checkout 后 Hook 来说似乎是一项简单的工作——将 OUT_DIR 设置为 OUT_DIR_BASE + "/"+ 当前分支...除了 checkout 后钩子(Hook)在子 shell 中运行,因此它无法设置父环境变量。

有什么聪明的方法可以解决这个问题吗?

我考虑过的一些想法:

  • 我可以将“export OUT_DIR...”命令输出到一个文件,并制作 用户来源它——这很烦人,人们会忘记这样做。
  • 我可以将新的 OUT_DIR 写入一个 .rc 文件并构建/运行脚本 从那里拿起它,但这需要改变构建 环境,用户体验会变得更糟(即你不能执行“cd $OUT_DIR”进入输出目录...
  • 我可以为“git checkout”写一个包装器来打开一个 适当设置了 OUT_DIR 的新 shell...但那是“泄漏” 随着时间的推移,我会运行大量 shell。

这些似乎都不是很好的感觉,因为感觉应该是一个简单的解决方案。

最佳答案

I could print the branch name into a file and have build/run scripts pick it up from there

这仍然是探索的方式,即使它涉及修改构建脚本。

但是getting the current branch name for a repo isn't hard :

git -C /path/to/repo rev-parse --abbrev-ref HEAD

因此您无需编写当前分支的名称:构建脚本可以直接从存储库中获取它。

关于git - 从 git 中的 checkout 后 Hook 设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26446244/

相关文章:

git - 我如何设置我的 .git/config 以便能够从多个远程存储库推送/pull ?

linux - 为什么在这种情况下输出重定向不起作用?

csv - 添加作为带空格的逗号分隔值的环境变量时出现 Heroku 错误

cmake - 如何修改传递给自定义 CMake 目标的环境变量?

git - 可以使用远程 URL 而不是名称来检查分支吗?

Gitkraken:初始化 Git Flow 失败

ruby-on-rails - GitLab 7-0 稳定无法推送或克隆

java - 有没有办法让 Ant 创建 shell 或批处理运行时脚本?

linux - 检查脚本命令中的错误

apache-spark - 在 Windows 中为 pyspark 设置的环境变量