通过Github我在几台不同的计算机和服务器上使用相同的“点文件”集。在我直接控制的Mac和Linux机器上,我安装了Sublime Text 2并设置为我的git merge和commit编辑器。但是,在远程(即不在我的直接控制下)服务器上,我会选择使用vim。
我宁愿不为这些远程服务器创建和维护第二个.gitconfig
。有没有办法做这样的事情:
[core]
if [[ $IS_REMOTE -eq 1 ]]; then
editor = "vim"
else
editor = "subl -n -w"
fi
我以某种方式根据主机名设置了$ IS_REMOTE?
答案 0 :(得分:10)
不,Git配置不支持检查或条件语句。但是你的底层shell可能会这样做,所以你可以使用类似的东西:
[core]
editor = "if [[ $IS_REMOTE -eq 1 ]]; then ED='vim'; else ED='subl -n -w'; fi; $ED"
如果你需要做一些比这更复杂的事情,你可以把shell代码扔进脚本,当然,比如
[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
修改:my_edit_script.sh
必须在$ PATH中,当然:)
答案 1 :(得分:7)
git-config在v1.7.9中学到的[include]
部分可以帮助你完成大部分工作。
虽然它不允许您编写运行时条件,但它 为您提供了一个框架,用于将~/.gitconfig
重构为几个部分: shared 部分和 env特定的部分。之后,您可以将~/.gitconfig.local
之类的内容符号链接到相关的特定于env的配置文件,并在~/.gitconfig.local
中添加~/.gitconfig
。
符号链接部分可以编写脚本并作为点文件的一部分自动完成。 init脚本。
从命令行,可以通过以下方式添加包含路径:
git config --global include.path '~/.gitconfig.local'
我特意使用上面的引号来防止shell将~
扩展为绝对路径。
这会将以下部分添加到您的~/.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 :(得分:2)
我认为你不能这样做,但不是维护你的.gitconfig
文件,而是维护一个生成.gitconfig
文件的脚本怎么样?这样你就可以做任何你想做的事情,不仅基于变量,还基于命令的输出和任何......
像:
#!/bin/sh
if [ "$#" -eq 0 ]
then
IS_REMOTE=
else
case "$1" in
remote)
IS_REMOTE=1
;;
local)
IS_REMOTE=
;;
*)
echo "value $1 not supported" >&2
;;
esac
fi
# config for both remote and local
git config --global color.ui true
git config --global alias.top '!pwd -L'
# config for remote
if [ "$IS_REMOTE" ]
then
git config --global core.editor vim
...
else
git config --global core.editor 'subl -n -w'
...
fi
因此,如果您调用没有参数的脚本或使用'local'参数,它将为您的.gitconfig
文件生成一些配置,而如果您将'remote'参数传递给它,它将生成其他一些人。
答案 3 :(得分:1)
不完全是您的问题的答案,但相关用例很有趣: 因为git 1.8.5你可以使用urlmatch语法
见 http://git-scm.com/docs/git-config 详情
关于遥控器的配置条目是唯一可以有条件地定义的条目
[http "https://localhost" ]
sslVerify = false
^将切换本地主机的ssl验证"遥控器"仅
答案 4 :(得分:0)
您可以根据自己的Git目录或Git 2.13及更高版本中的分支有条件地包含另一个Git配置文件。
照常将默认配置放入文件~/.gitconfig
中。最后,有条件地包含另一个配置文件:
[user]
email = john@personal.com
name = John McGehee
# All work Git repositories are in a subdirectory of ~/work.
# All other Git repositories are outside ~/work.
[includeIf "gitdir:~/work/"]
path = .gitconfig.work
然后,在~/.gitconfig.work
中添加或覆盖使用位于~/work
或其任何子目录中的存储库时所需的配置值:
[user]
email = john@work.com
您可以通过更改为~/work
下的Git目录并运行以下命令来观察差异:
git config user.email
在不在~/work
下的Git目录中尝试相同的命令。
答案 5 :(得分:-1)
由于无法测试环境变量并以编程方式更改.gitconfig,并且由于脚本创建两个.gitconfig文件感觉就像我想要提出的工作更多,我只是要创建两个.gitconfig文件。在那些我可以将Sublime Text 2设置为编辑器并控制合并工具和diff工具的机器上,我将使用“primary”gitconfig作为我的符号链接的目标。在那些我没有选择ST2的机器上,我将使用“辅助”gitconfig文件。