如何.DS_Store
从 Git 存储库中删除那些烦人的 Mac OS X 文件?
28 回答
从存储库中删除现有文件:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
添加这一行:
.DS_Store
到文件.gitignore
,它可以在你的存储库的顶层找到(或者如果它还没有,则创建文件)。您可以使用顶级目录中的以下命令轻松完成此操作:
echo .DS_Store >> .gitignore
然后将文件提交到 repo:
git add .gitignore
git commit -m '.DS_Store banished!'
结合 benzado 和 webmat 的答案,使用 更新git rm
,而不是发现不在 repo 中的文件失败,并使其对任何用户都可以粘贴:
# 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
解决此问题的最佳解决方案是全局忽略系统上所有 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
编辑:
删除了图标,因为它们可能需要作为应用程序资产提交。
在某些情况下,您可能还希望全局忽略某些文件。对我来说,.DS_Store 就是其中之一。就是这样:
git config --global core.excludesfile /Users/mat/.gitignore
(或您选择的任何文件)
然后像 repo 的 .gitignore 一样编辑文件。请注意,我认为您必须使用绝对路径。
如果由于文件已分阶段更改而无法删除文件,请使用:
git rm --cached -f *.DS_Store
票数最高的答案很棒,但是帮助像我这样的新手,这里是如何创建 .gitignore 文件,编辑它,保存它,删除你可能已经添加到 git 的文件,然后将文件推送到 Github。
创建 .gitignore 文件
要创建 .gitignore 文件,您可以只touch
创建具有指定名称的空白文件的文件。我们要创建名为 .gitignore 的文件,以便我们可以使用以下命令:
touch .gitignore
忽略文件
现在您必须将告诉 git 忽略 DS Store 文件的行添加到您的 .gitignore 中。您可以使用 nano 编辑器来执行此操作。
nano .gitignore
Nano 很好,因为它包含有关如何摆脱它的说明。(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!'
打开终端并输入“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.'
我必须在上面将 git-rm 更改为 git rm 才能使其工作:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
有时 .DS_Store 文件位于远程存储库中,但在本地项目文件夹中不可见。要解决此问题,我们需要删除所有缓存文件并再次添加。
第 1 步:将其添加到 .gitignore 文件中。
# Ignore Mac DS_Store files
.DS_Store
**/.DS_Store
第 2 步:删除缓存文件并使用这些命令再次添加。
git rm -r --cached .
git add .
git commit -am "Removed git ignored files"
git push -f origin master
使用此命令删除现有文件:
find . -name '*.DS_Store' -type f -delete
然后添加.DS_Store
到.gitignore
永远摆脱这个文件并且再也不用担心它的最好方法是
制作一个全局 .gitignore 文件:
回声 .DS_Store >> ~/.gitignore_global
并让 git 知道您想将此文件用于所有存储库:
git config --global core.excludesfile ~/.gitignore_global 就是这样!.DS_Store 不适合您。
如果您想将 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
使用 删除它们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中的以下行最适合擦除 all .DS_Store
,包括具有本地修改的行。
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
选项,保留您的本地,.DS_Store
因为无论如何它都会被复制。
就像上面提到的那样,添加.DS_Store
到项目根目录下的 .gitignore 文件中。然后它将不再出现在您的视线中(repos)。
我参加聚会有点晚了,但我有一个很好的答案。要删除 .DS_Store 文件,请在终端窗口中使用以下命令,但使用“查找”删除文件时要非常小心。使用带有 -name 选项的特定名称是更安全的使用方法之一:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
如果您想简单地在之前和之后列出它们,您可以省略“-delete”。这会让你放心,他们已经走了。
关于 ~/.gitignore_global 建议:在这里要小心。你想把那个漂亮的文件放到每个工作区顶层的 .gitignore 中并提交它,这样任何克隆你的 repo 的人都会从它的使用中受益。
第1步
这将删除.DS_Store
目录中的每个文件(包括子目录)
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
第2步
添加这个以.gitignore
防止根目录和每个子目录中的任何 DS_Store 文件进入 git!
**/.DS_Store
从git 文档:
- 前导“**”后跟斜杠表示在所有目录中都匹配。例如,“**/foo”匹配任何地方的文件或目录“foo”,与模式“foo”相同。"**/foo/bar" 匹配文件或目录 "bar" 直接位于目录 "foo" 下的任何位置。
出于某种原因,上述方法都不适用于我的 Mac。
我的解决方案来自终端运行:
rm .DS_Store
然后运行以下命令:
git pull origin master
这将起作用:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
它会删除名称以 结尾的所有文件.DS_Store
,包括._.DS_Store
.
初始化存储库时,跳过包含
-u
这不应该是一个问题。
这对我有用,结合了上面的两个答案:
- $ 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
删除忽略的文件:
(.DS_Store)
$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
将此添加到您的文件 .gitignore
#Ignore folder mac
.DS_Store
保存并提交
git add -A
git commit -m "ignore .DS_Store"
现在你忽略了所有提交
.gitignore
使用命令创建文件touch .gitignore
并在其中添加以下行
.DS_Store
保存.gitignore
文件,然后将其推送到您的 git 存储库中。
有几个解决方案可以解决这个问题。为避免创建 .DS_Store 文件,请勿使用 OS X Finder 查看文件夹。查看文件夹的另一种方法是使用 UNIX 命令行。要删除 .DS_Store 文件,可以使用名为 DS_Store Terminator 的第三方产品。要从整个系统中删除 .DS_Store 文件,可以使用 UNIX shell 命令。从 Applications:Utilities 启动终端 在 UNIX shell 提示符下输入以下 UNIX 命令: sudo find / -name ".DS_Store" -depth -exec rm {} \; 当提示输入密码时,输入 Mac OS X 管理员密码。
该命令用于查找并删除从文件系统的根 (/) 开始贯穿整个机器的所有 .DS_Store。要将此命令配置为作为计划任务运行,请执行以下步骤: 从 Applications:Utilities 启动终端 在 UNIX shell 提示符处输入以下 UNIX 命令:
sudo crontab -e 当提示输入密码时,输入 Mac OS X 管理员密码。在 vi 编辑器中按一下键盘上的字母 I 并输入以下内容:
15 1 * * * 根查找 / -name ".DS_Store" -depth -exec rm {} \;
这称为 crontab 条目,其格式如下:
分钟 小时 DayOfMonth 月 DayOfWeek 用户命令。
crontab 条目表示该命令将由系统在每天凌晨 1:15 由名为 root 的帐户自动执行。
该命令从 find 一直到 . 如果系统未运行,则不会执行此命令。
要保存条目,请按一次 Esc 键,然后同时按 Shift + z+ z。
注意:步骤 4 中的信息仅适用于 vi 编辑器。
无需.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
我做了:
git checkout -- ../.DS_Store
(#丢弃本地更改(永久)到文件)它工作正常!