从git中的post-checkout hook设置一个env变量

时间:2014-10-19 01:10:48

标签: git shell environment-variables

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

现在,构建和运行脚本使用$OUT_DIR env变量来确定二进制文件的输出目录。理想情况下,我希望$OUT_DIR是特定于分支的,以避免上面提到的构建覆盖问题。
起初,这对于post-checkout钩子来说似乎是一个简单的工作 - 将OUT_DIR设置为OUT_DIR_BASE + "/" + current branch ...除了post-checkout钩子在子shell中运行所以它不能设置父env变量。

有没有聪明的方法来解决这个问题?

我考虑过的一些想法:

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

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

1 个答案:

答案 0 :(得分:2)

  

我可以将分支名称打印到一个文件中,然后让构建/运行脚本从那里取出

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

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

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

所以你不需要写出当前分支的名称:构建脚本可以直接从repo中获取它。