Можно ли установить параметры gitconfig условно? - программирование
Подтвердить что ты не робот

Можно ли установить параметры gitconfig условно?

Через Github я использую один и тот же набор "точечных файлов" на нескольких компьютерах и серверах. На ящиках Mac и Linux под моим непосредственным контролем у меня есть Sublime Text 2, который установлен и настроен как мой редактор . Однако на удаленном (то есть не под моим контролем) серверах я бы выбрал использовать vim.

Я бы предпочел не создавать и поддерживать второй .gitconfig для этих удаленных серверов. Есть ли способ сделать что-то вроде этого:

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

где я как-то установил $IS_REMOTE на основе имени хоста?

4b9b3361

Ответ 1

Так как невозможно проверить переменную окружения и программно изменить файл .gitconfig, а так как создание сценариев создания двух файлов .gitconfig выглядит как больше работы, чем я действительно хочу выразить, я просто собираюсь создать два файла .gitconfig. На тех машинах, где я могу настроить Sublime Text 2 в качестве моего редактора и управлять инструментом слияния и инструментом diff, я буду использовать "основной" gitconfig в качестве цели моей символической ссылки. На тех машинах, где у меня нет ST2 в качестве опции, я буду использовать "вторичный" файл gitconfig.

Ответ 2

Нет, Git config не поддерживает проверки или условные операторы. Но ваша основная оболочка, вероятно, делает, поэтому вы можете использовать что-то вроде:

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


Если вам нужно сделать что-то более сложное, вы можете просто выбросить код оболочки в script, конечно, как

[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, конечно:)

Ответ 3

Раздел [include], полученный с помощью git -config в v1.7.9, доставит вам большую часть пути.

Пока он не позволяет писать условные обозначения времени выполнения, он дает вам основу для рефакторинга ~/.gitconfig в несколько частей: разделяемый раздел и разделы, зависящие от env. После этого вы можете связать что-то вроде ~/.gitconfig.local с соответствующим конфигурационным файлом env и включить ~/.gitconfig.local из ~/.gitconfig.

Симлинг-часть может быть написана сценарием и сделана автоматически как часть инициализации dotfiles script.

В командной строке, включающий путь, можно добавить через:

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

Ответ 4

Я не думаю, что вы можете это сделать, но вместо сохранения вашего файла .gitconfig, как насчет поддержки script, который генерирует ваш файл .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

Итак, если вы вызываете script без параметров или с параметром "local", он будет генерировать некоторую конфигурацию в вашем файле .gitconfig, а если вы передадите ему параметр 'remote', он будет генерировать некоторые другие.

Ответ 5

не совсем ответ на ваш вопрос, но интересный для связанных с ним вопросов: поскольку git 1.8.5 вам разрешено использовать синтаксис urlmatch

см http://git-scm.com/docs/git-config для деталей

записи конфигурации, касающиеся пультов, являются единственными, которые могут быть определены условно как [http "https://localhost" ] sslVerify = false

^ будет переключать проверку ssl только для локальных "пультов"