【问题标题】:temporarily change the language of git临时更改 git 的语言
【发布时间】:2019-09-21 02:04:20
【问题描述】:

我用 Python 写了一个很长的脚本,它在几个地方用 Python 子进程调用 git 并匹配 git 返回的内容,例如:

nothing to commit, working tree clean
fast-forwardable
up to date

一位同事使用该脚本,但其行为与预期不符,因为他们的 git 使用的是本地德语语言环境,并带有如下消息:

nichts zu committen, Arbeitsverzeichnis unverändert

我当时并没有想到这一点。可以看到herehere 一些永久更改语言的想法。

当然,我不想更改运行我的脚本的 PC 上的设置,是否可以告诉 git 仅针对单个命令返回 en_US

实际上,当我编写脚本时,我将系统设置为 en_GB,想知道我的 git 使用的是 en_GB 还是 en_US,是否有任何区别。是否可以要求 git 告诉你它使用的是什么语言?这是次要问题,但如果可以告诉 git 临时使用 en_US 就足够了。

【问题讨论】:

  • 你试过this?
  • 问题在于它涉及对正在运行的机器上的 .bashrc 文件执行某些操作,这不是“临时”更改。希望将某种 bash 命令添加到 git 命令中,该命令会覆盖 git 否则从 .bashrc 中拉出的任何内容
  • 稳健的方法是使用管道或用于脚本的命令,例如不受用户配置影响的git status --porcelain,而不是解析用于人类消费的消息。

标签: bash git subprocess


【解决方案1】:

在脚本开头的某处设置LANG

#!/bin/sh

LANG=en_US
export LANG

该设置适用于当前 shell(即脚本)和从它生成的子进程,包括 git

【讨论】:

    【解决方案2】:

    您实际上可以为 Shell 中的任何命令添加任何变量设置的前缀,该设置仅适用于该命令,无论是 git 还是其他任何设置。只需键入它,然后用空格将其与您的命令分开:

    $ LANG=fr_FR sh -c 'echo $LANG'
    fr_FR
    $ echo $LANG
    en_us.UTF-8
    

    您可能希望使用C,但是,请确保为您运行的命令使用默认语言:

    $ LANG=C git
    

    但请记住,如果未编译所选语言,则可能无法使用该语言。不过,常规英语应该几乎总是存在,因为它通常是编写软件字符串的语言。

    【讨论】:

      【解决方案3】:

      git 命令前加上所需的语言参考,以便仅对该命令应用更改。

      例如

      默认 (en_US.UTF-8)

      $ git status
      fatal: Not a git repository (or any of the parent directories): .git
      

      德语,

      $ LANG=de_DE.UTF8 git status
      fatal: Kein Git-Repository (oder irgendein Elternverzeichnis): .git
      

      LANG 格式:

      <LANGUAGE>_<TERRITORY>.<CODESET>[@<MODIFIERS>]
      

      【讨论】:

        【解决方案4】:

        尝试一行:

        LANG=en_US git ...your command...
        

        或者对于这个 bash 会话:

        export LANG=en_US
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-17
          • 2019-08-10
          • 2016-05-20
          • 1970-01-01
          • 2012-05-24
          • 1970-01-01
          • 1970-01-01
          • 2015-06-19
          相关资源
          最近更新 更多