私はファイルのモードを変更しなければならないプロジェクトを持っています chmod
開発中を777、メインリポジトリでは変更しないでください。
Git chmod -R 777 .
はすべてのファイルを取得し、変更済みとしてマークします。ファイルに加えられたモードの変更をGitに無視させる方法はありますか?
私はファイルのモードを変更しなければならないプロジェクトを持っています 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
また、この--global
フラグにより、ログインしたユーザーのデフォルトの動作になります。
git config --global core.fileMode false
グローバル設定の変更は、既存のリポジトリには適用されません。さらに、git clone
およびgit init
明示的に設定core.fileMode
するtrue
で説明したようにレポの設定でクローン上でローカルに上書きGitのグローバルcore.fileModeの偽
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 config --global core.filemode false
、すべてのリポジトリに対してこれを1回だけ実行する必要があります。
git config
コマンドは、設定を正しい構成ファイルに書き込みます(.git/config
現在のリポジトリのみ、またはと一緒に~/.gitconfig
使用する場合--global
)。
作業ツリーのモード変更を元に戻す:
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
-d'\n'
部分は省略しxargs
てください。これは違法な議論です(必要ありません)。
tr '\n' '\0'
、-0
argをxargsに使用して、区切り記号としてNULを使用できます。
tr
うまくいきました!ここではOSXのための完全なコマンドがあります:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 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
--add
のように、git config --add --global core.filemode false
もし
git config --global core.filemode false
あなたのために機能しません、それを手動で行います:
cd into yourLovelyProject folder
.gitフォルダーにcdします。
cd .git
構成ファイルを編集します。
nano config
trueをfalseに変更
[core]
repositoryformatversion = 0
filemode = true
->
[core]
repositoryformatversion = 0
filemode = false
保存、終了、上位フォルダに移動:
cd ..
gitを再初期化する
git init
完了です!
.git/config
あるシンプルなものgit config core.fileMode false
で十分です。設定ファイルを編集する場合は、ディレクティブを完全に削除して、グローバルディレクティブを選択することをお勧めします。
global
オプションを削除すると、.git / configを手動で編集するのとまったく同じことが行われます
~/.gitconfig
にすることを確認しましょう、および~/project/.git/config
)
git init
されたら、filemodeをtrueに戻す必要がありますか?
Greg Hewgillの回答に追加(構成core.fileMode
変数を使用):
あなたは使用することができます--chmod=(-|+)x
のオプションgitの更新インデックス、あなたが使用している場合、「-aをコミットgitの「コミットGIT」(とない拾い上げられるところから、インデックス内の実行権限を変更する(「gitの追加」の低レベル版) ")。
グローバルに設定できます:
git config --global core.filemode false
上記の方法がうまくいかない場合は、ローカル構成がグローバル構成をオーバーライドしていることが原因である可能性があります。
ローカル構成を削除して、グローバル構成を有効にします。
git config --unset core.filemode
または、ローカル構成を適切な値に変更することもできます。
git config core.filemode false
git config -l
(現在の構成を一覧表示する-ローカルとグローバルの両方を確認)
すでにchmodコマンドを使用している場合は、ファイルの違いを確認します。次のような以前のファイルモードと現在のファイルモードが表示されます。
新しいモード:755
古いモード:644
以下のコマンドを使用してすべてのファイルの古いモードを設定します
sudo chmod 644 .
コマンドを使用して、または手動で、設定ファイルでcore.fileModeをfalseに設定します。
git config core.fileMode false
次にchmodコマンドを適用して、次のようなすべてのファイルの権限を変更します。
sudo chmod 755 .
また、core.fileModeをtrueに設定します。
git config core.fileMode true
ベストプラクティスとして、core.fileModeを常にfalseにしないでください。
For best practises don't Keep core.fileMode false always
どういう意味ですか、それを説明すべきです。
For best practises don't Keep core.fileMode false always.
一部のファイルシステム(FATなど)はファイルのアクセス許可をサポートしていないため、OSはデフォルト値(とにかく私のシステムでは766)を報告します。この場合、core.filemode
ローカル構成では絶対に必要ですが、不要で意図的でない権限の変更でコミット履歴を
core.filemode=false
、gitは実行ビットの変更を無視します。ローカルのアクセス許可を変更する必要はありません。インデックスへのアクセス許可の変更を既に追加していない場合を除き、その場合、をgit add
オフにした後に必要な手順がありませんcore.filemode
。
設定ファイル(サブモジュールを含む)でfilemodeをfalseに設定する場合:
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
git submodule foreach git config core.fileMode false
シンプルなソリューション:
プロジェクトフォルダーでこの単純なコマンドを押します(元の変更は削除されません) ... プロジェクトフォルダーの権限を変更しているときに行われた変更のみが削除されます
コマンドは以下の通りです:
git config core.fileMode false
このすべての不要なファイルが変更される 理由:コマンド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 {} \;