開発中に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
フラグを使用して、1回限りのコマンドにこのオプションを設定できます。
git -c core.fileMode=false diff
そして--global
フラグはそれをログインユーザーのデフォルトの振る舞いにします。
git config --global core.fileMode false
core.fileMode
はベストプラクティスではないため、慎重に使用する必要があります。この設定はmodeの実行可能ビットのみをカバーし、read/writeビットはカバーしません。多くの場合、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 diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x
あるいはmingw-gitで
git diff --summary | grep 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x
すべてのレポジトリにこのオプションを設定したい場合は、--global
オプションを使用してください。
git config --global core.filemode false
これでうまくいかない場合は、おそらく新しいバージョンのgitを使用しているので、--add
オプションを試してください。
git config --add --global core.filemode false
--globalオプションを指定せずにこれを実行し、作業ディレクトリがリポジトリではない場合は、次のようになります。
error: could not lock config file .git/config: No such file or directory
もし
git config --global core.filemode false
あなたのために働かない、手動でそれをしなさい:
cd into yourLovelyProject folder
.gitフォルダに移動します。
cd .git
設定ファイルを編集します。
nano config
trueをfalseに変更
[core]
repositoryformatversion = 0
filemode = true
- >
[core]
repositoryformatversion = 0
filemode = false
保存して終了し、上のフォルダに移動します。
cd ..
gitを再起動
git init
これで終わりです!
Greg Hewgillに追加します。 (core.fileMode
設定変数を使用した場合):
git update-index ( "git add"の低レベル版)の--chmod=(-|+)x
オプションを使用すると、 "git commit"を使用した場合に選択される場所から、インデックス内の実行権限を変更できます。 "git commit -a").
グローバルに設定できます。
git config --global core.filemode false
上記の方法でうまくいかない場合は、ローカル設定がグローバル設定を上書きしている可能性があります。
ローカル設定を削除して、グローバル設定を有効にします。
git config --unset core.filemode
あるいは、ローカル設定を正しい値に変更することもできます。
git config core.filemode false
chmod commandをすでに使用している場合は、ファイルの違いを確認してください。以前のファイルモードと現在のファイルモードが表示されます。
新しいモード:755
旧モード:644
下記のコマンドを使用してすべてのファイルの古いモードを設定します
Sudo chmod 644 .
コマンドを使用するか手動で、configファイルでcore.fileModeをfalseに設定するようになりました。
git config core.fileMode false
次にchmodコマンドを適用して、次のようにすべてのファイルのアクセス権を変更します。
Sudo chmod 755 .
そして再びcore.fileModeをtrueに設定します。
git config core.fileMode true
ベストプラクティスとして、core.fileModeを常にfalseにしないでください。
次のエイリアス(〜/ .gitconfig)を定義することで、gitコマンドごとのfileModeを簡単に一時的に無効にすることができます。
nfm = "!f(){ git -c core.fileMode=false $@; };f"
この別名がgitコマンドの前に付いていると、ファイルモードの変更は、それ以外の場合には表示されるコマンドと一緒に表示されません。例えば:
git nfm status
(サブモジュールを含めて)再帰的に設定ファイルでfilemodeをfalseに設定したい場合:find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
シンプルなソリューション:
これをヒットシンプルなコマンドプロジェクトフォルダーで(元の変更を削除しません) ...それは変更を削除でした- 完了変更中プロジェクトフォルダーの権限
コマンドは次のとおりです:
git config core.fileMode false
不要なファイルがすべて変更される理由: commendでプロジェクトフォルダーのアクセス許可を変更したためSudo chmod -R 777 ./yourProjectFolder
あなたが行っていない変更をいつチェックしますか? git diff filenameを使用しているときに次のように見つかりました
old mode 100644
new mode 100755
これは私のために働く:
find . -type f -exec chmod a-x {} \;
オペレーティングシステムに応じて
find . -type f -exec chmod a+x {} \;