Skip to main content

Windows 上での Git 操作メモ

改行周り

1. 改行の変換をさせない設定(PC側)

txt
git config --global core.autocrlf false
git config --global core.safecrlf true

→ でもこれだと、うっかり手元で CR+LF で保存しちゃった場合に、リポジトリ側にも そのまま入ってしまう

※ CSV を Excel などのソフトで保存した場合? に注意?

2. 改行の変換をさせない設定(リポジトリ側)

.gitattributes を置くと環境によらず統一できるらしい

.gitattributes
* text=auto eol=lf

→ こうしておくと、以下のような動作となる

  • checkout (clone, pull) 時の LF → CR+LF 変換は起きない (のでローカル側は LF になる)
  • add 時にインデックス上は CR+LF → LF 自動変換される(ので commit 時はリポジトリに LF で入る)

もともとリポジトリに CR+LF で入っているファイルは CR+LF のままとなるので、変えたい場合は下のほうのコマンドで renormalize する必要がある

text=auto での変換対象かは自動で判定されるが、明示的に変換させたくない場合は 拡張子指定で binary と明示

.gitattributes
*.kmz binary

3. 改行を .gitattributes 設定に合わせて変換したい場合

txt
git add --renormalize .
git commit -m "Normalize line endings"

ファイル名の NFC Normalize 問題

注意点
  • Mac と Windows の両方で使うリポジトリでは日本語ファイル名/フォルダ名は使わない方針とする
  • 特に パピプペポ など、濁点(゛)/ 半濁点(゜)が絡む文字(合成/分解が起きる) が入るとハマる とだけ覚えておく。無理に設定しない。

ファイルシステムによって動作が異なるのでハマる

  • HFS+(古い macOS の標準) → ファイル名を NFD に近い形へ正規化して保存
  • APFS(現在の macOS 標準) → 正規化を保持するが、正規化に非敏感(=NFC/NFD を同一視)
  • Windows の NTFS は基本的に NFC と NFD を別名として扱える(=両方作れてしまう)

Mac 側の git 設定で core.precomposeUnicode=true macOS 側の分解(NFD寄り)と Git 側(NFC寄り)のズレを吸収できるらしいが・・、その設定をくぐったものにハマるのも嫌なので、「日本語ファイル名使わない」ルールとしておく。

SSH のキーは .ssh フォルダにあるものを使いたい

git コマンドの場合

そのままで OK

TortoiseGit の場合

TortoiseGit は既定で TortoiseGitPlink を SSH クライアントとして使う
→ 設定はレジストリ側に入る。 .ssh は参照しない

.ssh フォルダを使いたい場合
→ SSH Client に ssh.exe を指定する(Settings > Network > SSH Client)
C:\Windows\System32\OpenSSH\ssh.exe


以下広告