web-dev-qa-db-ja.com

gitから.xcuserstateファイルとDS_Storeファイルを削除する

Xcodeで、.DS_Storeと* .xcuserstateは常に変更され、コミットする必要がないことに気付きました。そこで、これを含む.gitignoreファイルを作成しました。

.DS_Store
*.xcuserstate

他のエントリの中で。それから私は使用しました:

git rm --cached *xcuserstate
git rm ---cached .DS_Store

すでにバージョン管理下にあるこれらのファイルタイプを削除します。ただし、マージに行くと、Xcodeはコミットする必要のある変更があることを教えてくれます。これらの変更には、.DS_Storeファイルと.xcuserstateファイルが含まれます。

だから、私はこれを試しました: Gitリポジトリから.DS_Storeファイルを削除するにはどうすればよいですか?

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
find . -name *.xcuserstate -print0 | xargs -0 git rm --ignore-unmatch

同じ結果が得られました。これらのファイルをソース管理から永久に削除するにはどうすればよいですか?

20
Bryan Bryce

ステージング領域から変更を削除した後、変更をコミットする必要があります。

すでに行ったように、次を実行します。

$ git rm --cached path/to/.DS_Store
$ git rm --cached *.xcuserstate

他のディレクトリにいくつかある可能性があるため、すべてを取得するには複数の呼び出しが必要になる場合があることに注意してください。この時点で、削除はインデックスにステージングされますが、まだやるべきことがあります。.gitignoreを追加し、最終結果をコミットします。

$ git add .gitignore
$ git commit -m "Remove and ignore .xcuserstate and .DS_Store files."

これで、リポジトリから削除され、将来は無視されます。注:これにより、ローカルでgit rm --cachedを使用した場合でも、他のユーザーのファイルが削除されます。残念ながら、これについてできることはあまりありません。また、ファイルはまだ履歴に残っているため、実行内容によっては、ファイルがマージされ、すべてのブランチが新しいコミットを持つものに基づいているまで、他のブランチに表示される場合があります。

23

git update-index --assume-unchanged *.xcuserstate .DS_Storeを試して、それが役立つかどうかを確認してください

2
user376507