前提環境 §
Visual Studio 2017 Update3
問題 §
Visual Studio 2017をUpdate3にバージョンアップしたらClickOnceインストーラーをgithubでホストする【Visual Studio 2017 Update2編】で述べた方法で対処できない。
問題の発生箇所 §
gitconfigにautocrlf = falseを書き加えるとVisal Studio側がエラーになって動作しない。なぜ動作しないのかは不明。
原因 §
不明。(Update3のリリースノートにも仕様変更のことは何も書いていない)
解決 §
ClickOnceインストーラーをgithubでホストする【Visual Studio 2017 Update2編】と基本的に同じだが、転送設定の変更の手順だけが異なる。
プロジェクトのルートフォルダの.gitattributesファイルに以下の行を追加する。単純に末尾に書き足せば良い。
*.exe binary
*.htm binary
*.inf binary
*.application binary
*.manifest binary
*.deploy binary
※ プロジェクトごとに対処が必要である。また対象拡張子は全てバイナリー扱いされるので、自動マージはできなくなる。
その後、ローカルgit、github上のClickOnce関連の間違った改行処理されたファイルを全て削除の上、再度配置コマンドでファイルを作成してそれを同期する。
感想 §
「自動変換と名が付くものはたいていトラブルメーカー……という経験則がまた成立してしまった」
「改行コードはLFに統一すべきなのじゃないの?」
「それは改行コードがLFという世界に住んでいる人たちが、自分だけ楽をしたいという言い分だ」
「現実にはどうなの? 変換しちゃいけないの?」
「改行コードを書き換えるとハッシュ値が変わって改竄扱いされる場合もあるし、そもそも改行ではないコードを誤認して書き換えたらそれこそファイルが壊れて大惨事になる。ああいう変換は、本来なら絶対安全が保証される世界の中でのみ可能になること。一般論としてやると、たいてい問題が起きる」
「99%上手く行く方法論は100人に1人が困るわけだね」
「その計算は間違っているぞ」
「なんで?」
「一人が扱う改行コード入りファイルは一つではないからだ。そして、一つ一つのファイルに、上手く行かない確率が存在するぞ」
「自動変換と名が付くものはたいていトラブルメーカー……という経験則があるはずだ」
「そうだね」
「ところで、これはMS製品の問題? OSSの問題?」
「どちらが原因かは分からないが、【自動変換と名が付くものはたいていトラブルメーカーという経験則】に関して言えば、どこの製品だろうとOSSだろうと関係なく存在する経験則だ」
「自動変換に過度に依存して自爆するのは人間の典型的な姿ってことだね」