0
GitHub Actions+Gitでのマルチバイト文字列表示
2024-11-26

マルチバイト文字列をActionsの中で扱う場合に気を付けようという話

git diff --name-onlyで出力される内容からマルチバイト文字列を含むファイル名をgrepで検索して後続につなげるような処理をしたかった

git diff --name-only | grep --color=no 'ファイル名' | xargs ....

というイメージ

ローカルではうまく動いたのでActionsの環境でも動かしてみたが期待通りの動作をせず

pipefail使っていなかったからってのもあるけど原因を突きとめるまで時間をとってしまった

で、追っていったらgit diff --name-onlyの結果が下記のようになっていた

'\262\267\343\201\206\343\202\202\343\201\256.md'

UTF-8エンコーディングされたバイト列が表示されていた…なるほどね…

$ printf '\262\267\343\201\206\343\202\202\343\201\256.md'
買うもの.md

pipeの後続でこの値ありきの処理をしていたのでgrepに引っかからずそれ以降の処理がされなかったというもの

あんまりマルチバイト文字列をそのまま扱うっていうパターンがなかったのもあるが…

対応

下記どちらかで対応できる

git config --global core.quotepath false
git -c core.quotepath=false diff --name-only

気を付けよう

よく見たらローカルの.gitconfigには設定がしっかり入っていた

pipefail

蛇足だが基本的にActionsに限らずシェルスクリプトではpipefail入れておいたほうがどこで問題があるか気付きやすいので入れておいたほうが良いといのをあらためて実感した

Actionsで設定するには下記

参考

まとめ

  • Actions+Gitでマルチバイト文字を扱う場合はcore.auotepathを設定する
  • 基本的にpipefailを有効にする
0

Profile

swfz
swfz
日々学んだことを残していく
Today I Learned
コード片置き場

Account

RSS

Powered by Pixela
© 2024. swfz