[解決済み] Git にファイルモード (chmod) の変更を無視させるには?
質問
あるプロジェクトで、ファイルのモードを変更する必要があります。
chmod
を 777 に変更する必要がありますが、メイン リポジトリでは変更する必要はありません。
Gitは
chmod -R 777 .
と表示され、すべてのファイルが変更されたものとしてマークされます。ファイルに加えられたモード変更をGitに無視させる方法はあるのでしょうか?
解決方法は?
試してみてください。
git config core.fileMode false
から git-config(1)です。 :
core.fileMode Tells Git if the executable bit of files in the working tree is to be honored. Some filesystems lose the executable bit when a file that is marked as executable is checked out, or checks out a non-executable file with executable bit on. git-clone(1) or git-init(1) probe the filesystem to see if it handles the executable bit correctly and this variable is automatically set as necessary. A repository, however, may be on a filesystem that handles the filemode correctly, and this variable is set to true when created, but later may be made accessible from another environment that loses the filemode (e.g. exporting ext4 via CIFS mount, visiting a Cygwin created repository with Git for Windows or Eclipse). In such a case it may be necessary to set this variable to false. See git-update-index(1). The default is true (when core.filemode is not specified in the config file).
は
-c
フラグを使用すると、一回限りのコマンドに対してこのオプションを設定することができます。
git -c core.fileMode=false diff
を入力すると
-c core.fileMode=false
は面倒なので、このフラグをすべての git repo に対して、あるいはひとつの git repo に対してのみ設定することができます。
# this will set your the flag for your user for all git repos (modifies `$HOME/.gitconfig`)
git config --global core.fileMode false
# this will set the flag for one git repo (modifies `$current_git_repo/.git/config`)
git config core.fileMode false
さらに
git clone
と
git init
を明示的に設定します。
core.fileMode
から
true
で説明したように、レポの設定に
Git グローバル core.fileMode false はクローン時にローカルに上書きされます。
注意事項
core.fileMode
はベストプラクティスではないので、慎重に使用する必要があります。この設定は、モードの実行可能ビットのみをカバーし、読み取り/書き込みビットは決してカバーしません。多くの場合、この設定が必要だと思うのは、次のようなことをしたからでしょう。
chmod -R 777
すべてのファイルを実行可能にしています。しかし、ほとんどのプロジェクトでは
セキュリティ上の理由から、ほとんどのファイルは実行可能である必要はなく、実行可能であるべきでもありません。
.
このような状況を解決する正しい方法は、フォルダとファイルのパーミッションを別々に、以下のような方法で処理することです。
find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \; # Make files read/write
このようにすれば、もう二度と
core.fileMode
ごく稀な環境を除いては。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] GitHubでフォークされたリポジトリを更新または同期するにはどうすればよいですか?
-
[解決済み] .gitignoreで一部のファイル以外を無視するようにする
-
[解決済み] Gitでファイルの変更を追跡しない、無視する方法とは?
-
[解決済み】Gitバージョン管理でファイルの変更履歴を見る
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Gitマージで「すでに最新」と報告されるが、違いはある
-
[解決済み】git rev-parseは何をするのですか?
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] 警告: リモート HEAD は存在しない参照元を参照しているため、チェックアウトできません。
-
[解決済み] git リモートリポジトリには、ローカルブランチにマージされていないコミットが含まれています。
-
[解決済み】Gitクローン後、ファイルが直接変更されたと表示される。
-
[解決済み】WindowsでのGitファイルのパーミッションについて