Конфигурация мерзавца может быть установлена через несколько репозиториев?

Все файлы в том же каталоге? Затем можно использовать простой цикл плюс конструкции обработки строк оболочки.

for flac_dir in *Pantera*'[flac]'/; do
  flac_dir=${flac_dir%/}
  mp3_dir="${x%\[flac\]}[mp3]"
  mkdir "$mp3_dir"
done

Если Вы хотите действовать рекурсивно в подкаталогах также под zsh, или под ударом ≥4, можно использовать for flac_dir in **/*Pantera*'[flac]'/. С ударом необходимо работать shopt -s globstar сначала.

18
11.07.2012, 11:03
5 ответов

Я не нашел способа настроить мерзавца на этом четвертом уровне. Единственный путь, кажется, использование переопределений значения конфигурации на команду git -c key=value.

Мое текущее hacky решение состоит в том, чтобы определить функцию оболочки, которая служит оберткой для мерзавца. При вызове это передает аргументы на системную команду мерзавца, но не прежде, чем проверить существующий рабочий каталог и добавить дополнительный аргумент команде если применимо.

function git () {
    case "$PWD" in
        /path/to/repos/*)
            command git -c user.email=alternate@credentials.org "$@"
            ;;
        *)
            command git "$@"
            ;;
    esac
}
11
27.01.2020, 19:46
  • 1
    может я делать command git -c user.email=alternate@credentials.org user.name="Alter Ego" "$@" или как я должен пойти об этом? Искавший высоко и низко и единственная ссылка на этот флаг-c я нашел, было Вашим, спасибо, очень ценившее. –  Vic Goldfeld 28.01.2013, 19:36
  • 2
    для записи, я получил его работающий с command git -c user.email=alternate@credentials.org -c user.name="Alter Ego" "$@" –  Vic Goldfeld 28.01.2013, 20:07

Можно настроить адрес электронной почты для мерзавца с переменной среды GIT_AUTHOR_EMAIL. Если Вы объединяетесь, это с Выполняет сценарии удара при вводе каталога или каталога определенная конфигурация оболочки с zsh, можно легко изменить настройки на каталог или родительский каталог, например, если Вы вводите в каталог в ~/work можно автоматически скорректировать переменные среды для изменения адреса электронной почты.

6
27.01.2020, 19:46

Основываясь на ответе Калеба, мы можем определить модифицированную команду git, которая навсегда настроит все репозитории в этом каталоге правильно, так что все будущие использования ванильного git будут использовать новую конфигурацию. Я использую hub, который является еще одной оберткой git, поэтому я заменил свой alias git=hub на этот и вызвал hub в своей функции - если вы не используете hub, замените все вызовы hub на command git:

function git() {
    case "$PWD" in
        /home/robin/git/3RD_PARTY)
            hub "$@"
            # We don't know which repository was cloned / operated on, so let's just reconfigure them all
            for f in *; do
                [[ -d "$f" ]] && hub -C "$f" config user.email $my_private_email
            done
            ;;
        /home/robin/git/3RD_PARTY/*)
            hub "$@"
            hub config user.email $my_private_email
            ;;
        *)
            hub "$@"
            ;;
    esac
}

В отличие от ответа Калеба, который работает только в командной оболочке (и если не указано явно, только в интерактивной оболочке), это также влияет на другие git front-end'ы, которые правильно читают git config, такие как emacs magit.

1
27.01.2020, 19:46

См. это решение на основе конфигурации git:

https://dzone.com/articles/how-to-use-gitconfigs-includeif

Добавить в файл «~/.gitconfig»:

    [includeIf "gitdir:~/work/project1/.git"]  
      path =.gitconfig-project1  

Создайте файл «~/.gitconfig -project1» с содержимым:

    [core]  
      sshCommand = "ssh -i ~/.ssh/project1 -F /dev/null"  
  
    [user]  
      name = user1  
      email = user1@email.com  
8
27.01.2020, 19:46

All of the repositories in question are located under a certain path prefix on my local system. Is there a way to set a configuration value somewhere that will be inherited by all repositories under that path?

Да, используйтеgit configусловное включение:

; include for all repositories inside $HOME/to/group
[includeIf "gitdir:~/to/group/"]
    path = /path/to/foo.inc

Обратите внимание, что последняя косая черта в конце gitdir обязательна.

Для проверки работоспособности:

cd ~/to/group/some-checkout
git config --show-origin
2
29.07.2020, 09:02

Теги

Похожие вопросы