迷惑なMac OS X .DS_Store
ファイルをGitリポジトリから削除するにはどうすればよいですか?
迷惑なMac OS X .DS_Store
ファイルをGitリポジトリから削除するにはどうすればよいですか?
回答:
リポジトリから既存のファイルを削除します。
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!'
-exec
するとgit-rm
、.DS_Storeファイルごとに1回起動xargs
され、すべてのパスが1つのコマンドラインに配置されます。xargs
多くの特殊文字をエスケープすることを心配する必要がないので、主に私は好みます。
.DS_Store
は.gitignore
再帰的に機能しますか?つまり、無視さsome/level/of/folders/.DS_Store
れますか?
ベンザドと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
~/.gitignore
、グローバル除外ファイルとして使用するのは面倒です。グローバルに無視したくないホームディレクトリから除外したいファイルがあります。私が使用~/.gitexcludes
:同じディレクティブを経由しての代わりにcore.excludesfile
この問題に取り組む最善の解決策は、システム上のすべての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
編集:
アプリケーションアセットとしてコミットする必要がある場合があるため、アイコンを削除しました。
ターミナルを開き、「cd <ProjectPath>」と入力します
既存のファイルを削除します。
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
これを追加 .DS_Store
「ctrl + x」と入力します
「y」と入力します
ファイルを保存するために入力してください
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
ファイルが存在しない場合は作成します。このコマンドはプロジェクトのルートフォルダーから実行する必要があります
トップ投票の答えは素晴らしいですが、私のような新人を助けます、ここで.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!'
を使用してそれらを削除しgit-rm
、次に.DS_Storeを追加して、.gitignore
再度追加されないようにします。blueharvestを使用して、それらがすべて一緒に作成されるのを防ぐこともできます。
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
以下は私にとって最も効果的でした。一致しないファイル、およびローカルで変更されたファイルを処理しました。参考までに、これは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
パーティーには少し遅れますが、いい答えがあります。.DS_Storeファイルを削除するには、ターミナルウィンドウから次のコマンドを使用しますが、 'find'を使用してファイルを削除する際は十分に注意してください。-nameオプションで特定の名前を使用することは、それを使用するより安全な方法の1つです。
cd directory/above/affected/workareas
find . -name .DS_Store -delete
前後に単純にリストしたい場合は、「-delete」を省略できます。それは彼らがなくなったことをあなたに安心させるでしょう。
〜/ .gitignore_globalアドバイスに関して:ここで注意してください。その素敵なファイルを各ワークエリアのトップレベル内の.gitignoreに配置してコミットすると、リポジトリを複製する誰もがその使用の利点を享受できるようになります。
これは動作します:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
これは、名前で終わるすべてのファイル削除.DS_Store
を含むが、._.DS_Store
。
"*.DS_Store"
。これにより、アスタリスクはfind
、シェルによって展開されるのではなく、に渡されます。
これは私にとってうまくいきました、上からの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エディターのみを対象としています。
これをファイル.gitignoreに追加します
#Ignore folder mac
.DS_Store
これを保存してコミットする
git add -A
git commit -m "ignore .DS_Store"
そして今、あなたはすべてのコミットでこれを無視します