

あるファイルを、

[code]

    git rm --cached text.php
    
[/code]

としてステージから削除したあとに、

[code]

    git add -A
    
[/code]

として、

[code]

    git diff 
    
[/code]

とすると、

[code]

    old mode 100644
    new mode 100755
    
[/code]

と出てきました。色々ぐぐって

[code]

    [core]
    filemode = false
    
[/code]

をconfigに追加すればパーミッションの変更が無視されて対処できることはわかったのですが、根本的な理由がわからず下記2つについて教えてほしいです。

①なぜステージから削除→再度ステージにupをするとパーミッションが変わるのか  
②パーミッションが644→755に変わったと表示されているのにファイル自体を`ls -l`でみてみると、パーミッションが`-rw-r--
r--`になっており、755になっていない  
③git diffで

[code]

     old mode 100644
     new mode 100755
    
[/code]

と出てしまっているものを削除したい

どうぞよろしくお願い致します。

[環境]  
ゲストマシン:centOS6.6をvagrantで実行。  
ホストマシン:macOS  
で、vagrantの中身をmacOSから（vagrant sshせずに）phpstormをつかっていじっている、という環境です。


CC BY-SA 3.0
2015-02-26T14:55:58.103
7155
2015-07-22T16:13:51.287
2015-02-27T06:39:26.477
288
288
question
git
git rm --cached 後に git add -Aするとファイルのパーミッションが変わる


自分も同じ現象を経験し、同じ方法で解決しました。  
結局のところ、  
Windowsから参照・変更・作成したファイルと、  
Linuxから参照・変更・作成したファイルのパーミッションが違うから、  
Windowsエディタで作成したファイルをコミットしてあったらリポジトリもそのパーミッションになるし、  
Linuxで作成したファイルをコミットしてあったら(略

ということではないでしょうか。  
localでcygwinでgitをいじっているということであれば、  
windowsで編集したファイルは644になって、cygwinでコミットした時に755になる  
cygwinでcloneして、windowsで見るとwindows標準パーミッションと異なっているので> が付く。  
windowsでコミットしてcygwinでgit commit -aすればfile modeが変更される  
ということですね。

うまく説明できなくてすみません。


CC BY-SA 3.0
2015-03-24T08:45:40.890
8326
2015-03-24T08:45:40.890
8396
7155
answer