これらの迷惑なMacOSX.DS_Store
ファイルをGitリポジトリから削除するにはどうすればよいですか?
28 に答える
リポジトリから既存のファイルを削除します。
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
次の行を追加します。
.DS_Store
このファイル.gitignore
は、リポジトリの最上位にあります (または、ファイルがまだ存在しない場合は作成します)。トップディレクトリで次のコマンドを使用すると、これを簡単に実行できます。
echo .DS_Store >> .gitignore
次に、ファイルをリポジトリにコミットします。
git add .gitignore
git commit -m '.DS_Store banished!'
benzadoとwebmatの回答を組み合わせ、で更新しgit rm
、リポジトリにないファイルが見つかった場合は失敗せず、すべてのユーザーが一般的に貼り付け可能にします。
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
状況によっては、一部のファイルをグローバルに無視したい場合もあります。私にとって、.DS_Storeはその1つです。方法は次のとおりです。
git config --global core.excludesfile /Users/mat/.gitignore
(または任意のファイル)
次に、リポジトリの.gitignoreと同じようにファイルを編集します。絶対パスを使用する必要があることに注意してください。
ステージングされた変更があるためにファイルを削除できない場合:
git rm --cached -f *.DS_Store
動作させるには、上記の git-rm を git rm に変更する必要がありました。
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
次のコマンドを使用して、既存のファイルを削除します。
find . -name '*.DS_Store' -type f -delete
次に追加.DS_Store
します.gitignore
このファイルを永遠に取り除き、二度と心配する必要がない最善の方法は、
グローバル .gitignore ファイルを作成します。
echo .DS_Store >> ~/.gitignore_global
そして、すべてのリポジトリでこのファイルを使用することを git に知らせます。
git config --global core.excludesfile ~/.gitignore_global それだけです! .DS_Store は邪魔になりません。
を使用してそれらを削除してgit-rm
から、.DS_Storeを追加して、.gitignore
それらが再度追加されないようにします。また、 blueharvestを使用して、それらがすべて一緒に作成されるのを防ぐこともできます
以下は私にとって最もうまくいきました。一致しないファイル、およびローカルで変更されたファイルを処理しました。参考までに、これは git 1.7.4.4 を実行している Mac 10.7 システムでのものです。
以下を見つけて削除します。
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
また、グローバルな core.excludesfile を設定することで、すべてのリポジトリで .DS_Store をグローバルに無視します。
最初に、ファイルを作成します (まだ存在しない場合)。
touch ~/.gitignore
次に、次の行を追加して保存します。
.DS_Store
ファイルをグローバルに尊重するように git を設定します。
git config --global core.excludesfile ~/.gitignore
snipplrの次の行は、.DS_Store
ローカルで変更されたものを含め、すべての を消去するのに最適であることがわかりました。
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
.DS_Store
とにかく再現されるので、ローカルを保持します。
上記のすべてと同様.DS_Store
に、プロジェクトのルートにある .gitignore ファイルに追加します。その後、それは(レポの)あなたの目の前になくなります。
これは機能します:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
名前が。で終わるすべてのファイルを削除し.DS_Store
ます._.DS_Store
。
これは私にとってはうまくいきました.上記の2つの答えの組み合わせです:
- $ git rm --cached -f *.DS_Store
- $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
- $ git push オリジン マスター --force
リポジトリを初期化するときは、次を含む git コマンドをスキップします。
-u
そしてそれは問題にすべきではありません。
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
この問題を解決するには、いくつかの解決策があります。.DS_Store ファイルの作成を回避するには、OS X Finder を使用してフォルダーを表示しないでください。フォルダを表示する別の方法は、UNIX コマンド ラインを使用することです。.DS_Store ファイルを削除するには、DS_Store Terminator というサードパーティ製品を使用できます。システム全体から .DS_Store ファイルを削除するには、UNIX シェル コマンドを使用できます。Applications:Utilities からターミナルを起動します。 UNIX シェル プロンプトで、次の UNIX コマンドを入力します。パスワードの入力を求められたら、Mac OS X 管理者パスワードを入力します。
このコマンドは、ファイル システムのルート (/) から始まり、マシン全体で .DS_Store の出現箇所をすべて見つけて削除します。このコマンドをスケジュールされたタスクとして実行するように構成するには、次の手順に従います。 アプリケーション:ユーティリティからターミナルを起動します。 UNIX シェル プロンプトで、次の UNIX コマンドを入力します。
sudo crontab -e パスワードの入力を求められたら、Mac OS X 管理者パスワードを入力します。vi エディターに入ったら、キーボードの文字 I を 1 回押して、次のように入力します。
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
これは crontab エントリと呼ばれ、次の形式です。
分 時 DayOfMonth 月 DayOfWeek ユーザー コマンド。
crontab エントリは、ルートと呼ばれるアカウントによって毎日午前 1 時 15 分にシステムによってコマンドが自動的に実行されることを意味します。
コマンドは、find から . システムが実行されていない場合、このコマンドは実行されません。
エントリを保存するには、Esc キーを 1 回押してから、Shift + z+ z を同時に押します。
注: ステップ 4 の情報は、vi エディターのみを対象としています。