冷凍庫

個人用メモ

git config --all について

  1. alias gitconf="git config --global"
  2. gitconf my.test1 abc とした場合、 ~/.gitconfig

     [my]
         test1 = abc
    

    というようなセクションが追加される

  3. 普通の使い方: gitconf my.test1 def とすると、上記で abcdef に置き換わる

  4. gitconf --add my.test1 abc とすると、 ~/.gitconfig では

     [my]
         test1 = def
         test1 = abc
    

    となり、設定値が2つに増える

  5. この状態で gitconf [--get] my.test1 とすると、 abc が得られる

  6. つまり、最後に設定したものが得られる
  7. 複数の値を得たい場合、 gitconf --get-all my.test1 とすれば LF 区切りで2つの値が得られる
  8. このとき、 gitconf --get-all --null my.test1 とすると出力される値は LF の代わりに \0 で区切られる
  9. ここで my.test1 の設定値を変更しようと gitconf my.test1 ghi とすると

     warning: my.test1 has multiple values
     error: cannot overwrite multiple values with a single value
     Use a regexp, --add or --replace-all to change my.test1
    

    と怒られる

  10. 一番わかりやすいオプションは --replace-all であり、これは既存の設定値をすべて削除し新しいものに置き換える

  11. def という設定を ghi に書き換えたい場合、 gitconf my.test1 ghi def とする

    [my]
        test1 = ghi
        test1 = abc
    
  12. ここで第3引数に指定されているのは、既存の設定を示す正規表現であり、この場合に限れば ^d と言った指定も可能

  13. このとき指定された正規表現にマッチする設定値がない場合、設定は新しく追加される(!)

調べてないこと

  • --replace-all 使用時にも value_regex が使用可能だがこれはどういう意味7日
    • --replace-all を使った場合のみマッチした設定値をすべて書き換える?
      • --replace-all を使用した場合新しい設定値はどこと入れ替えられるのか?
    • そうでない場合はじめに見つかった一つのみ書き換える?