WindowsとMacの両方で共同開発
MacとWindowsで共同開発をすることはあまりないかもしれませんが、同プロジェクトのコードを一つのリポジトリで管理しておきたいということはあるかもしれません。そんなときにはまった落とし穴について備忘録的に書いておきます。
エラー内容
Mac側からリモートリポジトリにpushした結果をWindows側でpullしようとすると、以下のようにエラーを吐かれました。
error: unable to create file Icon?: Invalid argument
error: unable to create file arduino/Icon?: Invalid argument
error: unable to create file arduino/LED_test/Icon?: Invalid argument
error: unable to create file visualization/Icon?: Invalid argument
このエラーは全て"Icon?"というファイルに引っかかっているようですが、このサイトの回答にあるように、""のような文字を持つファイルがWindowsではサポートされていないかららしいです。
ちなみにこの "Icon$\r" というファイルは、Macでgitを使ったときに勝手にローカルリポジトリに作られてしまうファイルなのですが、MacOSの制御用のファイルのようなので、バージョン管理をする必要はありません。
解決策
というわけで、一旦あらゆるディレクトリから以下のようにこのファイルを消して(ちゃんと、"git rm"で消す)
$ git rm Icon$'\r'
その結果をpushしたあと、再びWindows側からpullし直すと、
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 4 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
~(略)~
Merge made by the 'recursive' strategy.
というようにpullすることができました。
今後のために
また、今後もこうなるのは面倒なので、このサイトにあるように、".gitignore"ファイルにこのファイル名を記載してしまいましょう。
Icon*
特に"Icon~"という名前のファイルを作る必要が無いのなら、この方法で除くのが一番簡単でしょう。
この一行を.gitignoreに含めて新たにテストしてみた結果、ちゃんと管理対象外になっていることが分かります。
ちなみに、"test"というフォルダの差分が取られていないのは、このサイトにあるように空のフォルダは登録されないからです。
補足
途中で削除した "Icon$\r" は、そのまま削除したままにしておいても特に問題はなさそうです。MacOSの制御用ファイルらしいので何かとヤバそうな匂いがしますが、git管理で初めて現れるものなので作りたいプログラム自体に影響はないはずですし、今のところはgitコマンドにも影響していないので、とりあえずは大丈夫そう。