Perforce は Workspace 毎に改行コードの変換ルールを設定することができます。設定は下記の 5種類です。
変換 Mode | 改行 code | |
---|---|---|
Local | — | OS 依存 |
Unix | LF | OSX/macOS 含む |
Mac | CR | Mac OS 9 以前 |
Win | CR+LF | Windows |
Shared | LF |
git のような変換無しのモードは特に無く、text の場合は OS (改行コード) 毎に変換が行われているようです。サーバー上の改行コードは LF で統一されています。
“Local” は OS 依存で “Unix”, “Mac”, “Win” の何れかと同じ意味になります。”Mac” は OSX より古い OS 用のもので、現在の OSX/macOS は “Unix” に含まれます。
実際にどのように変換されるか調べてみました。下記はテキストファイルを Perforce サーバー経由で取得し直した結果です。
Mode Local PC Server(p4d) Local PC -------------------------------------------------- Unix CRLF -> CRLF -> CRLF Win CRLF -> LF -> CRLF Shared CRLF -> LF -> LF Unix LF -> LF -> LF Win LF -> LF -> CRLF Shared LF -> LF -> LF Unix CRLF -> CRLF Win CRLF -> CRCRLF Shared CRLF -> CRLF
“Unix” は改行コードを LF に統一しているわけではなく、単に何もしていないだけであることがわかります。
各モードの変換の動作をまとめると下記のとおりです。
変換 Mode | PC → Server | Server → PC |
---|---|---|
Win | 変換あり CRLF → LF | 変換あり LF → CRLF |
Unix | 変換無し | 変換無し |
Shared | 変換あり CRLF → LF | 変換無し |
Perforce の変換モードと git との比較
Perforce の変換 Mode | 対応する git の設定 |
---|---|
Win | autocrlf=true |
Unix | autocrlf=false |
Shared | autocrlf=input |
Perforce ではサーバー上の改行コードは LF で統一されており、CRLF のファイルが存在することを想定していないようです。”Unix” は事実上無変換モードなので、CRLF の text ファイルもそのまま Uploard することができてしまいます。”Win” 設定で受け取ると余計な CR が挿入されてしまいます。