我有一个工作环境,我经常在其中构建二进制文件,然后使用该二进制文件启动长时间运行的进程。当这些正在运行时,我想切换到另一个 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/