Perforce の改行コード変換

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 が挿入されてしまいます。