通过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配置不支持检查或条件语句。但是您的底层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
Edit:my_edit_script.sh
必须在$ PATH中,当然:)
[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
.gitconfig
文件之外,如何维护生成.gitconfig
文件的脚本呢?这样,您不仅可以基于变量,而且还可以基于命令的输出以及任何其他内容来执行所需的任何操作...