gitconfig选项可以有条件设置吗?

问题描述 投票:18回答:6

通过Github,我在几台不同的计算机和服务器上使用相同的“点文件”集。在Mac和Linux的直接控制下,我安装了Sublime Text 2并将其设置为我选择的git merge and commit editor。但是,在远程(即不受我直接控制)服务器上,我会选择使用vim。

我宁愿不为那些远程服务器创建并维护第二个.gitconfig。有没有办法做这样的事情:

[core]
    if [[ $IS_REMOTE -eq 1 ]]; then
        editor = "vim"
    else
        editor = "subl -n -w"
    fi

我根据主机名以某种方式设置$ IS_REMOTE的位置?

git git-config
6个回答
12
投票

否,Git配置不支持检查或条件语句。但是您的底层shell可能会这样做,因此您可以使用类似以下内容:

[core]
    editor = "if [[ $IS_REMOTE -eq 1 ]]; then ED='vim'; else ED='subl -n -w'; fi; $ED"

如果您需要做比这更复杂的事情,则可以将外壳程序代码放入脚本中,当然,例如

[core]
    editor = "my_edi_script.sh"

[my_edit_script.sh包含类似内容:

#!/bin/bash
if [[ $IS_REMOTE -eq 1 ]]; then
    ED="vim"
else
    ED="subl -n -w"
fi

$ED some argument or other

Editmy_edit_script.sh必须在$ PATH中,当然:)


9
投票

[include]中的git-config学习的v1.7.9部分将带您到那里。

虽然它不允许您编写运行时条件,但它[[确实

为您提供了一个框架,用于将~/.gitconfig重构为几个部分:shared部分和env-specific部分。之后,您可以将~/.gitconfig.local之类的符号链接到相关的特定于env的配置文件,并从~/.gitconfig.local中包含~/.gitconfig符号链接部分可以作为脚本编写并作为dotfiles初始化脚本的一部分自动完成。

可从命令行通过以下方式添加包含路径:

git config --global include.path '~/.gitconfig.local'

我专门使用上述引号来防止外壳将~扩展到绝对路径。

这将以下部分添加到您的~/.gitconfig

[include] path = ~/.gitconfig.local

这是git-scm book中的片段,显示了常规格式:

[include] path = /path/to/foo.inc ; include by absolute path path = foo ; expand "foo" relative to the current file path = ~/foo ; expand "foo" in your $HOME directory


2
投票
我认为您无法执行此操作,但是除了维护.gitconfig文件之外,如何维护生成.gitconfig文件的脚本呢?这样,您不仅可以基于变量,而且还可以基于命令的输出以及任何其他内容来执行所需的任何操作...

1
投票
不完全是您问题的答案,但对于相关用例很有趣:由于git 1.8.5,您可以使用urlmatch语法

0
投票
您可以根据您的Git目录或Git 2.13及更高版本中的分支有条件地包含另一个Git配置文件。

-1
投票
由于无法测试环境变量并以编程方式更改.gitconfig,并且由于编写脚本而创建两个.gitconfig文件感觉比我真正想做的工作还要多,所以我将创建两个.gitconfig文件。在可以将Sublime Text 2设置为编辑器并可以控制合并工具和diff工具的机器上,我将使用“主要” gitconfig作为符号链接的目标。在没有ST2作为选项的那些机器上,我将使用“辅助” gitconfig文件。
© www.soinside.com 2019 - 2024. All rights reserved.