web-dev-qa-db-ja.com

Gitでステージングされていない変更から「古いモード100755新しいモード100644」と言っているファイルを削除するにはどうすればいいですか?

何らかの理由で、最初に私のgitプロジェクトのためにリポジトリから引っ張ったとき、私は自分の作業コピーの中に識別可能な変更を加えていないたくさんのファイルを持っていましたが、私のunstaged changesエリアに現れ続けます。

私はWindows XP上でGit Guiを使用していますが、そのファイルを調べて何が変わったのかを調べます。私が見ているのはこれだけです:

old mode 100755  
new mode 100644  

誰がこれが何を意味するのか知っていますか?

どのようにしてこれらのファイルをステージングされていない変更のリストから削除することができますか? (私が最近編集してコミットしたいファイルを選ぶためだけに、何百ものファイルを調べなければならないのは非常に面倒です)。

634
concept47

それは私にとってはUNIXファイルのパーミッションモード(755 = rwxr-xr-x644 = rw-r--r--)のように見えます - 古いモードは+ x(実行可能)フラグを含んでいましたが、新しいモードはそうではありません。

このmsysgit号の返答 は、この問題を解決するためにcore.filemodeをfalseに設定することをお勧めします。

git config core.filemode false
1111
Amber

core.filemodeをfalseに設定しても機能しますが、~/.gitconfigの設定が.git/configの設定によって上書きされないようにしてください。

85
NovelX

私はこの問題に遭遇しました。古いハードドライブから作業ファイルを含むgitリポジトリを数回コピーしたときです。問題は、所有者と許可が古いドライブ/マシンから新しいドライブ/マシンに変更されたという事実から生じます。長短は、次のコマンドを実行して物事を真っ直ぐにすることです( このスーパーユーザーの回答 のおかげで):

Sudo chmod -R -x . # remove the executable bit from all files

前のコマンドは実際にgit diffが報告した違いを解決しますが、ディレクトリを一覧表示する機能を無効にするので、ls ./ls: .: Permission deniedで失敗します。それを修正するには:

Sudo chmod -R +X . # add the executable bit only for directories

悪いニュースは、.shスクリプトのように、実行可能にしておきたいファイルがある場合は、それらを元に戻す必要があるということです。各ファイルに対して次のコマンドでそれを行うことができます。

chmod +x ./build.sh # where build.sh is the file you want to make executable again
16
Scott Willeke

ディレクトリのパーミッションをいくつか変更したようです。復元するには、次の手順を実行しました。

$  git diff > backup-diff.txt                ### in case you have some other code changes 

$  git checkout .
4
SuperNova

リポジトリを期待されるデフォルトの状態にリセットするには、git reset --hard HEADを試してください。

3
Doppelganger

私は同じ問題に直面しました。そしてこれは私の命を救う: https://Gist.github.com/jtdp/5443498

git diff -p -R --no-color \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply

1
zsoh

通常、リポジトリがWindowsとLinux/Unixマシンの間で複製されたときに起こります。

ファイルモードの変更を無視するようにgitに指示してください。

  1. 現在のリポジトリにのみ設定できます。

    git config core.filemode false
    
  2. グローバルに設定:

    git config --global core.filemode false
    
  3. 〜/ .gitconfigに追加します。

    [core]
         filemode = false
    

どちらかを選択してください。

1
K. Symbol

これはpullして全てのファイルがリモートリポジトリで実行可能である時に起こります。それらを再び実行可能にすると、すべてが再び正常に戻ります。

chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder

あなたがする必要があるかもしれません:

chmod -x <file> // Removes execute bit

代わりに、実行可能ファイルとして設定されておらず、それが上記の操作のために変更されたファイル用です。これを実行するためのより良い方法がありますが、これは非常に迅速で汚い修正です。

1
IskandarG

ファイルモードを元に戻すには、次のコマンドを使用します。 git add --chmod=+x -- filenameそしてブランチにコミットします。

0
Wae

私のブランチをマスターと比較するとき、私はこの問題に遭遇しました。 Gitは、ブランチがmasterと同じであると予想したときに 'mode'エラーを返しました。ファイルを削除してからmasterを再度マージすることで修正しました。

最初にdiffを実行しました:

git checkout my-branch
git diff master

これが返されました:

diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644

私はそれから修正するために次を走らせた:

rm bin/script.sh
git merge -X theirs master

この後、git diffはmy-branchとmasterの間に違いはありませんでした。

0
Collin Krawll

アクセス許可が変更された面倒なファイルが1つだけありました。個別にロールバックするには、rm <file>を使用して手動で削除した後、チェックアウトして新しいコピーを取得しました。

幸運にも私はまだそれを上演していませんでした。

git reset -- <file>を実行する前にgit checkout -- <file>を実行することができれば

0
kEnobus