通过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
Run Code Online (Sandbox Code Playgroud)
我以某种方式根据主机名设置$ IS_REMOTE?
Joh*_*hee 32
您可以根据 Git 2.13 及更高版本中的 Git 目录或分支有条件地包含另一个 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
Run Code Online (Sandbox Code Playgroud)
然后,在使用位于或其任何子目录中的~/.gitconfig.work存储库时添加或覆盖您想要的配置值:~/work
[user]
email = john@work.com
Run Code Online (Sandbox Code Playgroud)
~/work您可以通过更改到 下的 Git 目录并运行以下命令来观察差异:
git config user.email
Run Code Online (Sandbox Code Playgroud)
在不在 .git 目录下的 Git 目录中尝试相同的命令~/work。
Nev*_*nel 12
不,Git配置不支持检查或条件语句.但你的底层shell可能会这样做,所以你可以使用类似的东西:
[core]
editor = "if [[ $IS_REMOTE -eq 1 ]]; then ED='vim'; else ED='subl -n -w'; fi; $ED"
Run Code Online (Sandbox Code Playgroud)
如果你需要做一些比这更复杂的事情,你可以把shell代码扔进脚本,当然,就像
[core]
editor = "my_edi_script.sh"
Run Code Online (Sandbox Code Playgroud)
用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
Run Code Online (Sandbox Code Playgroud)
编辑:my_edit_script.sh必须在$ PATH,当然:)
[include]git-config在v1.7.9中学到的部分可以帮助你完成大部分工作.
虽然它不允许您编写运行时条件,但它确实为您提供了一个框架,用于将您重构~/.gitconfig为几个部分:共享部分和特定于env的部分.之后,您可以将类似于~/.gitconfig.local特定于env的配置文件进行符号链接,并包含~/.gitconfig.localfrom ~/.gitconfig.
符号链接部分可以编写脚本并作为dotfiles的init脚本的一部分自动完成.
从命令行,可以通过以下方式添加包含路径:
git config --global include.path '~/.gitconfig.local'
Run Code Online (Sandbox Code Playgroud)
我特意使用上面的引号来防止shell扩展~到绝对路径.
这将为您的以下部分添加~/.gitconfig:
[include]
path = ~/.gitconfig.local
Run Code Online (Sandbox Code Playgroud)
这是git-scm书中的一个片段,显示了一般格式:
[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
Run Code Online (Sandbox Code Playgroud)
Mar*_*ols -1
由于不可能测试环境变量并以编程方式更改 .gitconfig,并且由于编写脚本创建两个 .gitconfig 文件感觉比我真正想要做的工作更多,所以我将创建两个 .gitconfig文件。在那些我可以将 Sublime Text 2 设置为编辑器并可以控制合并工具和 diff 工具的机器上,我将使用“主要”gitconfig 作为符号链接的目标。在那些没有 ST2 选项的机器上,我将使用“辅助”gitconfig 文件。