Gitリポジトリから.DS_Storeファイルを削除するにはどうすればよいですか?


1257

迷惑なMac OS X .DS_StoreファイルをGitリポジトリから削除するにはどうすればよいですか?



これはMacOSの、だけでなく、マックOS Xの多くのバージョンでも同じだと思う
ジムアホ

https://github.com/xiaozhuai/odourlessをチェックして、.DS_Storeを防ぐためのツールを作成しました。
xiaozhuai

回答:


2428

リポジトリから既存のファイルを削除します。

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!'

13
非常に簡単ですが、を使用-execするとgit-rm、.DS_Storeファイルごとに1回起動xargsされ、すべてのパスが1つのコマンドラインに配置されます。xargs多くの特殊文字をエスケープすることを心配する必要がないので、主に私は好みます。
ベンザド2008

8
これは.gitignoreではなく.git / info / excludeを使用する必要があります。2つの違いの説明については、stackoverflow.com / questions / 1753070 /…を参照してください。
Andrew Grimm、

106
@アンドリュー:同意しない。.DS_Storeファイルをチェックインすることは決して役に立ちません。そのため、各Macユーザーが自分のマシンに設定することを覚えておく必要があるものではなく、リポジトリ全体の全ユーザー設定としてより理にかなっています。
ベンザド2009

51
追加.DS_Store.gitignore再帰的に機能しますか?つまり、無視さsome/level/of/folders/.DS_Storeれますか?
チャーリーシュリーサー

70
@CharlieSはい、パターンにスラッシュが含まれていない場合、すべてのディレクトリのファイル名と照合されます。
ベンザド2012

239

ベンザドと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

2
ホームディレクトリでgitリポジトリ(別名「dotfiles」リポジトリ)を使用する場合~/.gitignore、グローバル除外ファイルとして使用するのは面倒です。グローバルに無視したくないホームディレクトリから除外したいファイルがあります。私が使用~/.gitexcludes:同じディレクティブを経由しての代わりにcore.excludesfile
AL X

156

この問題に取り組む最善の解決策は、システム上のすべてのgitリポジトリからこれらのファイルをグローバルに無視することです。これは、次のようなグローバルgitignoreファイルを作成することで実行できます。

vi ~/.gitignore_global

次のようなファイルを無視するためのルールを追加します。

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

次に、このファイルをグローバルgit構成に追加します。

git config --global core.excludesfile ~/.gitignore_global

編集:

アプリケーションアセットとしてコミットする必要がある場合があるため、アイコンを削除しました。


上記のルールをリポジトリの.gitignoreに追加することもできます。これにより、プロジェクトに複数の貢献者がいる場合、これらのファイルがリポジトリレベルで保持されます。ただし、このような場合、異なる開発者が異なるOSを使用している場合、.gitignoreはすべてのOS固有のファイルなどを処理する必要があります。Linux、OSXなどのルールと同様
2013

私は、各開発者が自分の.global_ignoreでos固有のファイルを処理することをお勧めします。このようにして、プロジェクト.gitignoreはプロジェクト固有です。
mcfedr 2013

実行する必要があります:git add .gitignore_global、別のプログラマが自分のローカル環境にもそのファイルを持っているため?
stackdave 2017年

58

状況によっては、一部のファイルをグローバルに無視することもできます。私にとって、.DS_Storeはその1つです。方法は次のとおりです。

git config --global core.excludesfile /Users/mat/.gitignore

(または任意のファイル)

次に、リポジトリの.gitignoreのようにファイルを編集します。絶対パスを使用する必要があると思います。


26

変更が段階的に使用されているためにファイルを削除できない場合:

git rm --cached -f *.DS_Store

19

ターミナルを開き、「cd <ProjectPath>」と入力します

  1. 既存のファイルを削除します。 find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. これを追加 .DS_Store

  4. 「ctrl + x」と入力します

  5. 「y」と入力します

  6. ファイルを保存するために入力してください

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'


nano .gitignoreファイルが存在しない場合は作成します。このコマンドはプロジェクトのルートフォルダーから実行する必要があります
Saif

17

トップ投票の答えは素晴らしいですが、私のような新人を助けます、ここで.gitignoreファイルを作成し、編集して保存し、すでにgitに追加した可能性のあるファイルを削除してから、ファイルをGithubにプッシュします。

.gitignoreファイルを作成する

.gitignoreファイルを作成するにtouchは、指定した名前の空のファイルを作成するファイルだけを使用できます。次のコマンドを使用できるように、.gitignoreという名前のファイルを作成します。

touch .gitignore

ファイルを無視する

ここで、.gitignoreにDSストアファイルを無視するようにgitに指示する行を追加する必要があります。これを行うには、nanoエディターを使用できます。

nano .gitignore

ナノはそれを抜け出す方法の指示が含まれているのでいいです。(Ctrl- O保存、Ctrl- X終了)

このGithub gistからいくつかのアイデアをコピーして貼り付けます。ここには、無視する一般的なファイルがいくつかリストされています。この質問に答えるための最も重要なものは次のとおりです。

# OS generated files #
######################
.DS_Store
.DS_Store?

#はコメントであり、ファイルが大きくなるにつれてファイルを整理するのに役立ちます。

このGithub記事には、いくつかの一般的なアイデアとガイドラインもあります。

gitに既に追加されているファイルを削除する

最後に、これらのDSストアファイルをディレクトリから実際に削除する必要があります。

上位投票の回答からこの素晴らしいコマンドを使用してください。これにより、ディレクトリ内のすべてのフォルダーが確認され、それらのファイルがgitから削除されます。

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

.gitignoreをGithubにプッシュする

最後のステップとして、実際に.gitignoreファイルをコミットする必要があります。

git status

git add .gitignore

git commit -m '.DS_Store banished!'


3
ステップのタッチコマンドは必要ありません... nanoがファイルを作成します。
Corey Goldberg、

1
2年後に自分の答えを見つけて使いました。私を過ぎて良い仕事。:)
ジョシュアダンス

完璧に働いた!! ありがとう
iUser

15

上記のgit-rmをgit rmに変更して、機能させる必要がありました。

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print

10

を使用してそれらを削除しgit-rm、次に.DS_Storeを追加して、.gitignore再度追加されないようにします。blueharvestを使用して、それらがすべて一緒に作成されるのを防ぐこともできます。


9

DS_Storeファイルをすべてのフォルダーとサブフォルダーから削除する場合:


すでにコミットされたDS_Storeの場合:

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

それらを無視する:

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

8

以下は私にとって最も効果的でした。一致しないファイル、およびローカルで変更されたファイルを処理しました。参考までに、これは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

8

次のコマンドを使用して、既存のファイルを削除します。

find . -name '*.DS_Store' -type f -delete

その後、追加.DS_Store.gitignore


6

snipplrからの次の行.DS_Storeは、ローカルで変更されたものを含め、すべてを消去するのに最適です。

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cachedオプション、.DS_Storeとにかく再現されるのでローカルを維持します。

上記と同様.DS_Storeに、プロジェクトのルートにある.gitignoreファイルに追加します。その後、それはあなたの視界からもうなくなります(レポの)。


5

パーティーには少し遅れますが、いい答えがあります。.DS_Storeファイルを削除するには、ターミナルウィンドウから次のコマンドを使用しますが、 'find'を使用してファイルを削除する際は十分に注意してください。-nameオプションで特定の名前を使用することは、それを使用するより安全な方法の1つです。

cd directory/above/affected/workareas
find . -name .DS_Store -delete

前後に単純にリストしたい場合は、「-delete」を省略できます。それは彼らがなくなったことをあなたに安心させるでしょう。

〜/ .gitignore_globalアドバイスに関して:ここで注意してください。その素敵なファイルを各ワークエリアのトップレベル内の.gitignoreに配置してコミットすると、リポジトリを複製する誰もがその使用の利点を享受できるようになります。


4

これは動作します:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

これは、名前で終わるすべてのファイル削除.DS_Storeを含むが、._.DS_Store


3
アスタリスクはそこにあるべきではありません。
アリストテレスPagaltzis 2008

3
Macシステムで.DS_Storeおよび._。DS_Storeファイルを見つけたので、アスタリスクがそこにあるはずです。
MutantMahesh 2014年

3
@MutantMahesh。その場合、が必要です"*.DS_Store"。これにより、アスタリスクはfind、シェルによって展開されるのではなく、に渡されます。
TRiG 2016

4

何らかの理由で、上記のどれも私のMacでは動作しませんでした。

私の解決策はターミナル実行からです:

rm .DS_Store

次に、次のコマンドを実行します。

git pull origin master

3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

3

リポジトリを初期化するときは、次を含むgitコマンドをスキップします

-u

そしてそれは問題ではないはずです。


1
他の誰かがリポジトリを作成し、OPがそれとのみ同期している場合はどうなりますか?
jww 2014年

3

これは私にとってうまくいきました、上からの2つの答えの組み合わせ:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push origin master --force

3

無視されたファイルを削除します。

(.DS_Store)

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

2

この問題を解決するにはいくつかの解決策があります。.DS_Storeファイルの作成を回避するには、OS X Finderを使用してフォルダーを表示しないでください。フォルダを表示する別の方法は、UNIXコマンドラインを使用することです。.DS_Storeファイルを削除するには、DS_Store Terminatorと呼ばれるサードパーティ製品を使用できます。システム全体から.DS_Storeファイルを削除するには、UNIXシェルコマンドを使用できます。アプリケーションからユーティリティを起動:ユーティリティUNIXシェルプロンプトで、次のUNIXコマンドを入力します。sudo find / -name ".DS_Store" -depth -exec rm {} \; パスワードの入力を求められたら、Mac OS Xの管理者パスワードを入力します。

このコマンドは、ファイルシステムのルート(/)から始まり、マシン全体を通して、.DS_Storeのすべての出現箇所を見つけて削除します。このコマンドをスケジュールされたタスクとして実行するように構成するには、以下の手順に従います。Applications:Utilitiesからターミナルを起動します。UNIXシェルプロンプトで、次のUNIXコマンドを入力します。

sudo crontab -eパスワードの入力を求められたら、Mac OS Xの管理者パスワードを入力します。viエディターでキーボードのIを1回押して、次のように入力します。

15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;

これはcrontabエントリと呼ばれ、次の形式になります。

Minute Hour DayOfMonth Month DayOfWeekユーザーコマンド。

crontabエントリは、コマンドがrootと呼ばれるアカウントによって毎日午前1時15分にシステムによって自動的に実行されることを意味します。

コマンドは、findからに至るまで始まります。システムが実行されていない場合、このコマンドは実行されません。

エントリを保存するには、Escキーを1回押してから、Shift + z + zを同時に押します。

注:手順4の情報は、viエディターのみを対象としています。


2

これをファイル.gitignoreに追加します

#Ignore folder mac
.DS_Store

これを保存してコミットする

git add -A
git commit -m "ignore .DS_Store"

そして今、あなたはすべてのコミットでこれを無視します


2

.gitignoreコマンドを使用してファイルを作成するtouch .gitignore

それに次の行を追加します

.DS_Store

.gitignoreファイルを保存して、それをgitリポジトリにプッシュします。


2

このファイルを永久に削除し、再び心配する必要がないようにする最善の方法は、

グローバルな.gitignoreファイルを作成します。

echo .DS_Store >>〜/ .gitignore_global

そして、あなたのすべてのリポジトリにこのファイルを使いたいことをgitに知らせてください:

git config --global core.excludesfile〜/ .gitignore_globalそしてそれだけです!.DS_Storeは邪魔になりません。


1

.DS_STOREローカルで削除する必要はありません

.gitignoreファイルに追加するだけです

.gitignoreファイルは、プロジェクトで無視するファイルまたはフォルダーをGitに指示する単なるテキストファイルです。

コマンド

  • nano .gitignore
  • 書いて.DS_StoreクリックCTRL+X > y > Hit Return
  • git status 変更を最後に確認するには
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.