249

現在、リポジトリで問題が発生しています。通常、Git-fu は良好ですが、この問題を解決できないようです。

このリポジトリを複製してリポジトリにcd入れると、git status変更されたファイルがいくつか表示されます。注: エディターなどでリポジトリを開いたことはありません。

このガイドに従ってみました: http://help.github.com/dealing-with-lineendings/、しかし、これは私の問題にはまったく役に立ちませんでした。

何度も試しgit checkout -- .ましたが、どうにもならないみたいです。

私は Mac を使用していますが、リポジトリ自体にサブモジュールはありません。

ファイルシステムは、Mac では「Journaled HFS+」ファイルシステムであり、大文字と小文字は区別されません。ファイルは 1 行で、それぞれ約 79 KB です (そうです、ご存じのとおりです) git diffgit config --global core.trustctime falseリポジトリのあるコンピューターに戻ったときに試してみます。

ファクトでファイルシステムの詳細を変更しました! そして、git config --global core.trustctime falseあまりうまくいかなかったトリックを試しました。

4

19 に答える 19

93

わかった。他のすべての開発者は Ubuntu を使用しているため (私が思うに)、大文字と小文字を区別するファイル システムを使用しています。ただし、私はしません (私は Mac を使用しているため)。実際、 を使用してファイルを調べたところ、すべてのファイルに小文字の双子が含まれていましたgit ls-tree HEAD <path>

私はそれを整理するためにそれらのうちの1つを取得します。

于 2011-02-16T21:35:48.530 に答える
87
git config core.fileMode false

私の場合、この問題を解決しました

https://git-scm.com/docs/git-config

TL;DR;

core.fileMode

false の場合、インデックスと作業ツリーの間の実行可能なビットの違いは無視されます。FAT のような壊れたファイルシステムで役立ちます。git-update-index(1) を参照してください。

デフォルトは true ですが、リポジトリの作成時に git-clone(1) または git-init(1) がプローブし、必要に応じて core.fileMode を false に設定します。

于 2015-07-02T14:24:58.333 に答える
58

Windows を使用していると仮定します。リンク先の GitHub ページには、詳細が逆になっています。問題は、CR + LF の行末が既にリポジトリにコミットされており、core.autocrlfがtrueまたはinputに設定されているため、Git が行末を LF に変換したいためgit status、すべてのファイルが変更されていることを示しています。

これが、アクセスするだけで関与しないリポジトリである場合は、次のコマンドを実行して、実際に問題を解決せずに単に問題を非表示にすることができます。

git config core.autocrlf false

これがあなたが積極的に関与し、変更をコミットできるリポジトリである場合。リポジトリ内のすべての行末を CR + LF の代わりに LF を使用するように変更するコミットを作成して問題を解決し、今後同じことが起こらないようにするための手順を実行することをお勧めします。

以下は、gitattributes のマニュアル ページから直接取得したものであり、クリーンな作業ディレクトリから実行する必要があります。

echo "* text=auto" >>.gitattributes
rm .git/index     # Remove the index to force Git to
git reset         # re-scan the working directory.
git status        # Show files that will be normalized.
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"

正規化してはならないファイルが に表示される場合はgit status、実行する前にテキスト属性の設定を解除してgit add -uください。

manual.pdf      -text

逆に、Git が検出しないテキスト ファイルでは、正規化を手動で有効にすることができます。

weirdchars.txt  text
于 2011-02-15T21:06:34.917 に答える
12

私の場合のように、ファイルのアクセス許可が異なることからも問題が発生する可能性があります。

新たに複製されたリポジトリ (Windows、Cygwin):

$ git ls-tree HEAD
100755 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile
   ↑↑↑

ベアリモートリポジトリ (Linux):

$ git ls-tree HEAD
100644 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile
   ↑↑↑
于 2014-05-14T12:44:52.490 に答える
3

私も同じ問題を抱えていました。それもMacで。Linux マシンのリポジトリを見ると、次の 2 つのファイルがあることに気付きました。

geoip.dat および GeoIP.dat

Linux マシン上の非推奨のものを削除し、リポジトリを Mac に再度複製しました。重複がある場合、リポジトリのコピーからプル、コミット、スタッシュ、またはプルすることができませんでした。

于 2013-10-21T08:17:44.387 に答える
0

ローカル リポジトリを別のフォルダにコピーしたところ、変更されたファイルが多数表示されました。私の回避策は次のとおりです。変更されたファイルを隠して、隠し場所を削除しました。リポジトリがクリーンになりました。

于 2015-04-22T08:26:29.463 に答える
0

Git がファイル (この場合は .psd) をテキストとして扱っていることがわかりました。.gitattributes でバイナリ型に設定すると解決しました。

*.psd binary
于 2015-09-10T21:33:32.807 に答える
0

念のため、この問題には別の原因が考えられます: Git のバージョンが異なることです。Ubuntu 18.04 (Bionic Beaver) ボックスで Git のデフォルト インストール バージョンを使用していて、すべて正常に動作していましたが、Ubuntu 16.04 で Git を使用してリポジトリのクローンを作成しようとすると、一部のファイルが変更されたものとして表示されました。

ここでの他の回答はどれも私の問題を解決しませんでしたが、両方のシステムで一致するように Git のバージョンをアップグレードすると問題が解決しました。

于 2019-04-08T13:57:01.833 に答える
0

インタラクティブなリベースを行おうとしましたが、変更されたファイルがいくつかあると主張されたため、今は実行できませんでした。クリーンなリポジトリに戻すためにあらゆることを試みましたが、何も機能しませんでした。他の答えはどれも役に立ちませんでした。しかし、これは最終的に機能しました...

git rm -rf the-folder-with-modified-stuff
git ci -m 'WAT'

ブーム!リポジトリをクリーンアップします。問題が解決しました。その後、最後のコミットを削除する必要がrebase -iあり、最終的にすべてが再びクリーンになりました。奇妙な!

于 2018-08-10T11:09:32.510 に答える
0

MacOSで関連する問題がありました。

つまり、MacOS のファイル システムでは大文字と小文字が区別されるように見えても、そうではないことに気付いていない人もいるかもしれません。大文字と小文字が混在するファイル名を保存しますが、たとえば、 と を同じファイルと見なしFoo.pyますfoo.py

同僚は、開発の足場の一部としてfoo.pyfromを作成することで、まさにそのようなシナリオを作成しました。Foo.py(つまり、PEP8 モジュール ファイルの命名規則を強制するだけでなく、そのような作業を並行して行いたいと考えて、元の内容を大幅にリファクタリングします)。foo.pyこれらの変更をプルすると、MacOS は からへのすべての変更を上書きしましたFoo.py。これにより、ローカルに変更を加えていないのに、ローカルに変更を加えたと git が認識してしまいました。Foo.py新しいクローンを実行すると、gitは、それが新しいクローンであったにもかかわらず、すぐに重要な変更があったと主張しました。

解決策はfoo.py、元のファイル名とまったく競合しない、まったく別のファイル名に名前を変更することでした。その変更を行った後、リポジトリの新しいクローンで問題は解消されました。

(MacOS の大文字と小文字を区別する動作をオンにするシステム構成フラグがありますが、動作を切り替えると、大文字と小文字を区別しない動作を期待するものが壊れる可能性があるため、デフォルト設定のままにしておくことをお勧めします。)

于 2020-10-21T15:55:43.633 に答える