2013-02-07 37 views
15

通過Github我在幾臺不同的計算機和服務器上使用同一組「點文件」。在我直接控制的Mac和Linux機器上,我安裝了Sublime Text 2並將其設置爲我選擇的git merge and commit編輯器。但是,在遠程(即不在我的直接控制下)服務器上,我會選擇使用vim。可以有條件地設置gitconfig選項嗎?

我寧願不爲這些遠程服務器創建並維護第二個.gitconfig。有沒有辦法做這樣的事情:基於主機名

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

在那裏我已經莫名其妙定置$ IS_REMOTE?

+0

爲什麼不直接使用的一個腳本文件作爲「編輯器」值,在其中檢查? (因爲不,git config不是有條件的) –

+0

有條件的包括gitconfig在Git 2.13中開始可能。請參閱[我的答案](http://stackoverflow.com/a/43621480/6309) – VonC

回答

0

,因爲它是不可能的測試環境變量和程序改變的.gitconfig,由於腳本兩個的.gitconfig文件的創建感覺比我想要展示的更多工作,我只是要創建兩個.gitconfig文件。在這些機器上,我可以設置文字崇高2作爲我的編輯器,並有超過合併工具,比較工具的控制,我將使用「主」 gitconfig作爲我的符號鏈接的目標。在那些沒有ST2作爲選項的機器上,我將使用「secondary」gitconfig文件。

+0

您可以在第三個文件中拆分出常用配置,並將其包含在其他文件中:http://stackoverflow.com/questions/4030540/can-i-load-one-gitconfig-file-from-another –

3

我不認爲你可以做到這一點,但不是維護你的.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 

所以,如果你調用腳本不帶參數,或與「本地」的參數,它會產生一些配置,以你的.gitconfig文件,而如果你通過「遠程」參數,它會產生一些別人。

+0

儘管我很喜歡使用腳本來生成.gitconfig文件的想法,但我經常需要進行更新到兩個.gitconfig變體,我認爲這是我願意提出的更多工作。 –

9

不,Git配置不支持檢查或條件語句。但是,你的潛在殼可能呢,所以你可以使用這樣的:如果你需要做的事情比這更復雜

[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,當然:)

+0

除編輯器設置外,合併工具和差異工具設置也將針對遠程機器進行更改。我認爲解決方案最終是有兩個.gitconfig文件。 –

+0

嘗試了兩種方法,但它們不適用於credential.helper設置。我得到如下錯誤:「git:'credential-my_credential_script.sh'不是git命令。」 – metakermit

4

[include]部分由混帳配置在v1.7.9學到讓你最那裏的方式。

雖然它不會讓你寫運行條件語句,它確實給你重構你的~/.gitconfig成幾個部分框架:共享部分和env-特異性部分。在此之後,你可以符號鏈接類似~/.gitconfig.local到相關的特定的env-config文件,幷包括來自~/.gitconfig~/.gitconfig.local

符號鏈接部分可以作爲dotfiles的init腳本的一部分自動編寫和完成。

在命令行,即包括路徑可以被添加通過:

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 
1

不完全的回答你的問題,但有趣的相關usecases : 因爲git 1.8.5您可以使用urlmatch語法

看到 http://git-scm.com/docs/git-config 的關於遙控器是可以有條件地定義如下 唯一一個細節

配置項 [http "https://localhost" ] sslVerify = false

^將切換SSL驗證本地主機「遙控器」僅

相關問題