【问题标题】:Setting an env variable from post-checkout hook in git从 git 中的结帐后挂钩设置环境变量
【发布时间】:2014-10-19 01:10:48
【问题描述】:

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

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

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

我考虑过的一些想法:

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

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

【问题讨论】:

    标签: git shell environment-variables


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢!我应该更详细地阐述这一点——获取分支名称并不难,我想更多地将 OUT_DIR 写入 .rc 文件或某种文件,因此保留脚本/ build 仍然与 git 解耦。
    • @Stan 我明白了。我只是想如果脚本无论如何都可以访问那些 git repos,那就更容易了。
    • @Stan 感谢您发布这个问题。我正在尝试做完全相同的事情并面临相同的子外壳问题。只是好奇,您能找到任何解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 2020-12-19
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多