Gitクローンの直後に変更されたファイル


227

現在、リポジトリに問題があり、私のGit-fuは通常は良いのですが、この問題を解決できないようです。

このリポジトリのクローンを作成cdすると、リポジトリに、git status変更されたファイルがいくつか表示されます。注:リポジトリなどをエディターで開いていません。

私はこのガイドに従って試してみました:http : //help.github.com/dealing-with-lineendings/、これは私の問題でまったく助けになりませんでした。

私はgit checkout -- .何度も試しましたが、何もしないようです。

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

ファイルシステムはMacの「ジャーナリングHFS +」ファイルシステムであり、大文字と小文字は区別されません。ファイルは1行で、それぞれ約79 KBです(そう、そうですね、そうですね)git diff。見ることは特に役に立ちません。することについて聞いたgit config --global core.trustctime false役立つかもしれないたことがあります。リポジトリが存在するコンピュータに戻ったときに、これを試します。

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

回答:


141

リポジトリのクローンを作成した後、Macでも同じ問題が発生しました。すべてのファイルが変更されたと想定されます。

を実行した後git config --global core.autocrlf inputも、すべてのファイルを変更済みとしてマークしていました。修正を探した後.gitattributes、ホームディレクトリにある次のファイルを見つけました。

* text=auto

私はそれをコメントアウトしました、そしてこれからの他のクローンされたリポジトリはすべてうまくいきました。


5
ありがとう!core.autocrlfとapply.whitespaceをトグルして夜通し過ごした後、ようやくこれを見つけました。これはうまくいきました。ありがとうございました。
xer0x

5
.gitattributesの問題のある行は、他の誰かがこれに遭遇した場合に備えてMathias Bynenのdotfilesからのものです。
SeanPONeil 2013年

31
誰でもこの特定の構成にもっと光を当てることができますか?何をし* text=autoますか?それを削除するとはどういう意味.gitattributesですか?私はそれが私のためにこの問題を修正するのを見ます、しかしそれがなぜそうするのか、そしてそれが実際に何をしているのか、そしてそれが作り出す可能性のあるどんな問題があるのか​​分かりませんか?
デニス

6
@Dennisこの設定は行末を正規化するのに役立ちますので、それを削除することはおそらく正しい答えではありません。参照してください。この質問の答えと、この記事を。以下の@Arrowmasterの回答は私にとってより役に立ちました。私はそれを使用git addgit commitてファイルを正規化し、問題を取り除きました。
jtpereyda 2015年

4
git config --global core.autocrlf input私のために修正しました。ありがとう。
dimiguel、2015年

89

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

そのうちの1つを整理してもらいます。


彼らはそれを整理したことがありますか?同じ問題が発生している可能性があります。
ジョシュジョンソン

8
ええ、大文字と小文字を区別するファイルシステムを持っている人に、大文字と小文字を区別しないファイルシステムで重複するファイル名を持つファイルの各セットから1つを除くすべてを削除させるだけです。
サムエリオット

1
UbuntuからMacに移行してから同じ問題が発生しました。ありがとう、あなたの答えは頭に釘を打ちました。賛成票が最初の位置にプッシュされることを願っています。:-)
chmac 2013

1
@Dirkこれが複数の回答がある理由です。私の場合、不当ではないものを受け入れました。
Sam Elliott

1
これも私の問題でした-大文字と小文字を区別しないMacOS。ただしgit ls-tree HEAD <path>、1つのファイルしか表示されませんでした。ただし、GitHub.com UIで重複ファイルを確認でき、そのUIを使用して1つのバージョンを削除することもできました。
orion elenzil

74
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に設定する場合を除きます。


2
しかし、これは何をしますか?
Siwel

1
これも私にとってはうまくいったので、これが何をするかについても知りたいです。
Donato

2
私がやったときgit diff、私は変更がファイルモードのみであることがわかりました。上のgitピックアップしchmod -R 777 .、私は私のプロジェクトを実行し、この設定は私がgitのではchmodの変更を無視することができたときに引き起こされたstackoverflow.com/q/1580596/6207775
Ayushya

1
リンクが壊れています(「申し訳ありませんが、カーネルが見つかりません」)。
Peter Mortensen

残りの回答は機能しませんでしたが、これは魔法です!
Patel

53

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

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

git config core.autocrlf false

これが、積極的に関与し、変更をコミットできるリポジトリである場合。リポジトリ内のすべての行末をCR + LFではなくLFを使用するように変更するコミットを作成して問題を修正し、それが今後再び発生しないようにする手順を実行することができます。

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

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

8
私は窓を使っていません。
サムエリオット

1
Windows以外のシステムのデフォルトでは、core.autocrlfはfalseに設定されています。したがって、行末が原因でこの問題が発生することはないはずです。あなたは、何としてあなたの特定の設定の詳細について与える可能性git diffを示し、これらのファイルのためのgit statusファイルシステムは、使用しているものも、変更されたと言うの?
Arrowmaster

これらの質問に対する回答で質問を更新しました。1、2秒ですべての詳細をもう一度見ていきます。開発チームの他のメンバーが何を使っているのかわかりません
Sam Elliott

これは私たちのために働いたものです(git config core.autocrlf false十分でした)。クライアントがLinux(SL / RHEL)で実行されているという事実に騙されましたが、LinuxセッションはWindowsホストからx2goを介して開始されました。したがって、これはWin + Linの均一なコンテキストで最も可能性の高いソリューションである可能性があります。
Dirk

37

以下のコマンドを実行してください。それで問題が解決するかもしれません。

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

他の解決策はどれも私にとってはうまくいきませんでしたが、これは私を元に戻して実行させました。
Rainabba

1
私はこれを試してみましたが、うまくいきました。リアマさん、ありがとう!
Danniel Little

これは私のリポジトリを悪化させます。変更のないブランチでは、実行後277でした。私が切り替えた他のブランチでも同じ変更がありました。注意して実行してください。私はリポで再クローンし、615ファイルを変更しました。:(
プログラマーPaul

これはgit v2.7.4をubuntu(WSL)で使用して動作し、Git for Windows v2.18.0.windows.1およびposh-git私は常にautocrlf falseを持っていました。 2.18.0今日
ジムフレネット

私はこの作品に驚いています。助けてくれてありがとう。このパスをたどる他の人にとって、変更されたように見えるファイルはすべてgit LFSによって管理される.pngファイルと.bmpファイルでした
David Casper

16

Visual Studioでは、Gitを使用している場合、.gitignoreファイルと.gitattributesファイルを自動生成できます。自動生成された.getattributesファイルには次の行があります。

* text=auto

この行はファイルの先頭近くにあります。その行の前に#を追加して、行をコメント化する必要がありました。その後、問題なく動作しました。


1
おかげで、この問題に苦労してきました
Andrew Berry

これはまさに私の問題でした。別の開発者がCLIではなくVSを介してGITを使用し、この.gitattributesファイルを作成しました。
Josh Maag

12

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

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

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

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

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

5

これを修正する方法についてはすでに良い答えがあるので、「なぜ」これが起こるのかについてより詳細な回答を追加したかったのです。

だから、.gitattributes持っている* text=autoこの問題の原因となる設定を、。

私の場合、GitHubのマスターブランチにあるファイルには末尾が\r\nありました。末尾にチェックインするためにリポジトリの設定をダイヤルアップしました\n。Gitが何をチェックするかはわかりません。Linuxボックス(\n)にネイティブエンディングでチェックアウトすることになっていますが、\r\nエンディングでファイルをチェックアウトしたと思います。Git \r\nは、リポジトリにあるチェックアウトされた末尾を確認し、\n設定をチェックインすることを警告するため、文句を言います。したがって、ファイルは「変更されます」。

それが今のところ私の理解です。


3

同じ問題がありました。Macでも。Linuxマシンのリポジトリを見ると、2つのファイルがあることがわかりました。

geoip.datおよびGeoIP.dat

Linuxマシンで廃止されたものを削除し、リポジトリをMacに再度クローンしました。重複がある場合、リポジトリのコピーからプル、コミット、スタッシュ、またはプルできませんでした。


3

私にとっても同じ問題です。リモートGitリポジトリでは「textField.png」や「textfield.png」のように同じ名前の画像がいくつか表示されますが、ローカルリポジトリでは表示されません。プロジェクトのコードで使用されていない "textField.png"しか見ることができませんでした。

私の同僚のほとんどがext4ファイルシステムを使用しているUbuntu にいるのに対し、私はAPFSを使用しているMacにいることがわかりました。

サムエリオットの回答のおかげで、解決策は非常に簡単でした。まず、Ubuntuの同僚に大文字の冗長なファイルバージョンを削除するように依頼し、コミットしてリモートでプッシュしました。

それから私は以下を実行しました:

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

最後に、すべての開発者がGit構成を変更して、これが二度と起こらないようにすることを決定しました。

# Local Git configuration
git config core.ignorecase = true

または

# Global Git configuration
git config --global core.ignorecase = true

あなただけのupvoted@ kdsの答えがあればもっといいでしょう!
Elharony、2018

コマンドラインコマンドは等号(=)を含むべきではないようignorecase = =です。これは、最終的に設定ファイルに含まれるためです。
Dmytro

1

私も同じ問題を抱えていました。私の場合、リポジトリのクローンを作成したところ、いくつかのファイルがすぐに見つかりませんでした。

これは、ファイルのパスとファイル名がWindowsでは長すぎるために発生しました。この問題を解決するには、リポジトリをできるだけハードディスクドライブのルートの近くにクローンして、ファイルへのパスの長さを短くします。たとえば、C:\A\GitRepoではなくにクローンしC:\Users Documents\yyy\Desktop\GitRepoます。


1

次のファイルを編集します.git/config

sudo gedit .git/config

または:

sudo vim .git/config

目次

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true

[remote "origin"]
    url = kharadepramod@bitbucket.org:DigitalPlumbing/unicorn-magento.git
    fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]
    remote = origin
    merge = refs/heads/master

[branch "productapproval"]
    remote = origin
    merge = refs/heads/productapproval

に変更filemode=truefilemode = falseます。


これは次と同等ですgit config core.Filemode false
ギジェルモプランディ

1

macOSの新しいバージョンの場合、これはOSのセキュリティ機能が原因である可能性があります。

私が作業していたリポジトリに、ファイルタイプとして* .appが含まれるバイナリファイルがありました。

これは単なるシリアル化されたデータでしたが、macOSはすべての* .appファイルをアプリケーションとして扱い、このファイルはユーザーによってダウンロードされなかったため、システムはそれを安全ではないと判断com.apple.quarantineし、ファイルを実行できないようにするファイル属性を追加しました。

しかし、この属性をファイルに設定すると、ファイルも変更されたため、元に戻す方法なしでGit変更セットに表示されました。

を実行して、同じ問題があるかどうかを確認できます$ xattr file.app

ファイルで作業する必要がない限り、解決策は非常に簡単です。に追加*.app binaryするだけ.gitattributesです。


0

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


0

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

*.psd binary

0

インタラクティブなリベースを実行しようとしていましたが、変更されたファイルがいくつかあるため、現時点では実行できませんでした。クリーンなリポジトリに戻すためにすべてを試しましたが、何もうまくいきませんでした。他の答えはどれも役に立ちませんでした。しかし、これはついにうまくいきました...

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

ブーム!クリーンなリポジトリ。問題が解決しました。それから私は私がやったときに最後のコミットをドロップしなければならず、rebase -iそして最後にすべてが再びきれいになりました。奇妙な!


0

それが他の誰かを助ける場合に備えて、この問題には別の原因がある可能性があります:Gitの異なるバージョンです。Ubuntu 18.04(Bionic Beaver)ボックスでデフォルトでインストールされたGitのバージョンを使用していて、すべてが正常に機能していましたが、Ubuntu 16.04でGitを使用してリポジトリのクローンを作成しようとすると、一部のファイルが変更されたように表示されました。

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


1
gitのどのバージョンが一緒にうまく機能していなかったかを知ることは役立つ(そして興味深い)でしょう。
jpaugh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.