Skip to content

Instantly share code, notes, and snippets.

@z80oolong
Last active May 16, 2019 09:15
Show Gist options
  • Save z80oolong/d33892b66257242b347211c944de78c8 to your computer and use it in GitHub Desktop.
Save z80oolong/d33892b66257242b347211c944de78c8 to your computer and use it in GitHub Desktop.
git 2.17.0 以降において config ファイルの lock に失敗する場合の挙動を変更する差分ファイル

git 2.17.0 以降において config ファイルの lock に失敗する場合の挙動を変更する差分ファイル

告知 (2019/05/16)

これまで、本稿の Gist にて公開しておりました git 2.17.0 以降において config ファイルの lock に失敗する場合の挙動を変更する差分ファイルについて、差分ファイルの分量が多くなったことに伴い、今後は以下の Github のリポジトリにて差分ファイルを公開することと致します。

なお今後、本 Gist には本稿のみを残しておきますので、差分ファイルにつきましては上記 URL より取得して下さいますよう御願い致します。以上誠に勝手ながらどうか御了承下さいますよう御願い致します。

概要

分散型バージョン管理システムである git において、 VFAT ファイルシステム及び Android OS 及び Debian noroot 環境における外部ストレージ領域において、 git clone コマンド等を用いて新しい git リポジトリを作成する場合に、 .git/config ファイルの lock ファイルについて lock ファイルの権限の変更に失敗するために、 .git/config の lock に失敗し、リポジトリが作成できない問題が発生しています。

これらの差分ファイルは、 git において、前述のような .git/config ファイルの lock に失敗する場合の挙動について、 lock の失敗を無視するかどうかの git の挙動を設定する事を可能にするための差分ファイルです。

また、 git のインストール時において、ハードリンクに代えてシンボリックリンクを使用する修正も同時に加えています。

差分ファイルの適用とコンパイル

git のソースコードに差分ファイルを適用するには、安定版の git-x.y.z (ここに、x, y, z は安定版のバージョン番号。以下同様。) には、差分ファイル git-x.y.z-fix.diff を、github 上の git には、差分ファイル git-HEAD-xxxxxxxxx-fix.diff (ここに、 xxxxxxxxx は、 HEAD 版の commit 番号) をそれぞれ適用して下さい。

例えば、安定版の git-x.y.z のソースコードに git-x.y.z-fix.diff を適用するには、安定版の git-x.y.z のソースコードが置かれているディレクトリより、以下のようにして差分ファイル git-2.17.0-fix.diff を適用します。

 $ patch -p1 < /path/to/git-x.y.z-fix.diff
 (ここに、/path/to/diff は、 git-x.y.z-fix.diff が置かれたディレクトリのパス名)

なお、以下に示す差分ファイルは、それぞれ右に示す git の安定版にも適用可能です。

そして、 github 上の git のソースコードに git-HEAD-xxxxxxxxx-fix.diff を適用するには、安定版の github 上の git のソースコードが置かれているディレクトリより、以下のようにして差分ファイル git-HEAD-xxxxxxxxx-fix.diff を適用します。

 $ patch -p1 < /path/to/git-HEAD-xxxxxxxxx-fix.diff
 (ここに、/path/to/diff は、 git-HEAD-xxxxxxxxx-fix.diff が置かれたディレクトリのパス名)

差分ファイルの適用後は、以下のようにして git をコンパイル及びインストールします。

 $ make prefix=/path/to/install install CFLAGS="..." LDFLAGS="..."
 (ここに、 /path/to/install は git のインストール先のパス名であり、環境変数 CFLAGS, LDFLAGS は適切な値を設定する。)

使用法

git において、 .git/config ファイルの lock の失敗を無視するかどうかの挙動の設定については、設定項目 core.errorLevelConfigLockFailure を使用します。 core.errorLevelConfigLockFailure に設定する各設定値の意味は下記の通りです。

  • core.errorLevelConfigLockFailure = error
    通常の git の動作の通り、 lock の失敗時に異常終了します。
  • core.errorLevelConfigLockFailure = warn
    git の動作において、 .git/config ファイルの lock の失敗時に警告メッセージを表示した後、 lock の失敗を無視してリポジトリの作成等を続行します。
    設定項目 core.errorLevelConfigLockFailure のデフォルト値です。
  • core.errorLevelConfigLockFailure = quiet
    git の動作において、 .git/config ファイルの lock の失敗時に何もメッセージを表示せず、 lock の失敗を無視してリポジトリの作成等を続行します。

ここで、設定項目 core.errorLevelConfigLockFailure を変更するには下記のコマンドを実行します。

 $ git config --global core.errorLevelConfigLockFailure quiet

 (若しくは、 git config --global core.errorLevelConfigLockFailure error)
 (若しくは、 git config --global core.errorLevelConfigLockFailure warn)

なお、 設定項目 core.errorLevelConfigLockFailure については、設定ファイル $HOME/.gitconfig を直接編集することでも設定できます。

謝辞

なお、これらの差分ファイルの作成に当たっては、 termux の開発コミュニティ による差分ファイルを参考にしました。 termux の開発コミュニティの皆様には心より感謝致します。

そして、 Junio C Hamano 氏を始めとした git の開発コミュニティの皆様及び git に関わる全ての方々にも心より感謝致します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment