ファイルを git commit します.sh
が、同じファイルを別のサーバーでチェックアウトするときに実行可能にしたいと思います。
chmod
u+x
ファイルをチェックアウトするサーバーでそのファイルを手動でチェックアウトせずにこれを行う方法はありますか?
ベストアンサー1
によると公式文書update-index
サブコマンドを使用して、追跡対象のファイルの「実行可能」フラグを設定または削除できます。
フラグを設定するには、次のコマンドを使用します。
git update-index --chmod=+x path/to/file
削除するには、次を使用します。
git update-index --chmod=-x path/to/file
フードの下
これは通常の UNIX ファイル権限システムのように見えますが、実際は違います。Git は内部ストレージ内の各ファイルに対して特別な「モード」を維持します。
100644
通常のファイルの場合100755
実行可能なもの
ls-file
オプション付きのサブコマンドを使用して視覚化できます--stage
:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
デフォルトでは、リポジトリにファイルを追加すると、Gitはそのファイルシステムの属性を尊重し、それに応じて正しいファイルモードを設定しようとします。これを無効にするには、core.fileMode
オプションをfalseにする:
git config core.fileMode false
トラブルシューティング
ある時点で Git ファイルモードが設定されていないが、ファイルに正しいファイルシステム フラグがある場合は、モードを削除して再度設定してみてください。
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
ボーナス
Git 2.9 以降では、1 つのコマンドでファイルをステージングし、フラグを設定できます。
git add --chmod=+x path/to/file