何らかの理由で、最初に私のgitプロジェクトのためにリポジトリから引っ張ったとき、私は自分の作業コピーの中に識別可能な変更を加えていないたくさんのファイルを持っていましたが、私のunstaged changes
エリアに現れ続けます。
私はWindows XP上でGit Guiを使用していますが、そのファイルを調べて何が変わったのかを調べます。私が見ているのはこれだけです:
old mode 100755
new mode 100644
誰がこれが何を意味するのか知っていますか?
どのようにしてこれらのファイルをステージングされていない変更のリストから削除することができますか? (私が最近編集してコミットしたいファイルを選ぶためだけに、何百ものファイルを調べなければならないのは非常に面倒です)。
それは私にとってはUNIXファイルのパーミッションモード(755
= rwxr-xr-x
、644
= rw-r--r--
)のように見えます - 古いモードは+ x(実行可能)フラグを含んでいましたが、新しいモードはそうではありません。
このmsysgit号の返答 は、この問題を解決するためにcore.filemodeをfalseに設定することをお勧めします。
git config core.filemode false
core.filemode
をfalseに設定しても機能しますが、~/.gitconfig
の設定が.git/config
の設定によって上書きされないようにしてください。
私はこの問題に遭遇しました。古いハードドライブから作業ファイルを含む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
ディレクトリのパーミッションをいくつか変更したようです。復元するには、次の手順を実行しました。
$ git diff > backup-diff.txt ### in case you have some other code changes
$ git checkout .
リポジトリを期待されるデフォルトの状態にリセットするには、git reset --hard HEADを試してください。
私は同じ問題に直面しました。そしてこれは私の命を救う: https://Gist.github.com/jtdp/5443498
git diff -p -R --no-color \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply
通常、リポジトリがWindowsとLinux/Unixマシンの間で複製されたときに起こります。
ファイルモードの変更を無視するようにgitに指示してください。
現在のリポジトリにのみ設定できます。
git config core.filemode false
グローバルに設定:
git config --global core.filemode false
〜/ .gitconfigに追加します。
[core]
filemode = false
どちらかを選択してください。
これはpullして全てのファイルがリモートリポジトリで実行可能である時に起こります。それらを再び実行可能にすると、すべてが再び正常に戻ります。
chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder
あなたがする必要があるかもしれません:
chmod -x <file> // Removes execute bit
代わりに、実行可能ファイルとして設定されておらず、それが上記の操作のために変更されたファイル用です。これを実行するためのより良い方法がありますが、これは非常に迅速で汚い修正です。
ファイルモードを元に戻すには、次のコマンドを使用します。 git add --chmod=+x -- filename
そしてブランチにコミットします。
私のブランチをマスターと比較するとき、私はこの問題に遭遇しました。 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の間に違いはありませんでした。
アクセス許可が変更された面倒なファイルが1つだけありました。個別にロールバックするには、rm <file>
を使用して手動で削除した後、チェックアウトして新しいコピーを取得しました。
幸運にも私はまだそれを上演していませんでした。
git reset -- <file>
を実行する前にgit checkout -- <file>
を実行することができれば