关于macos:如何从Git存储库中删除.DS_Store文件?

How can I Remove .DS_Store files from a Git repository?

如何从Git存储库中删除那些恼人的MacOSX.DS_Store文件?


从存储库中删除现有文件:

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

添加线

1
.DS_Store

到文件.gitignore,该文件可以在存储库的顶层找到(如果还没有的话也可以创建)。使用顶部目录中的这个命令可以很容易地做到这一点

1
echo .DS_Store >> .gitignore

然后

1
2
git add .gitignore
git commit -m '.DS_Store banished!'


结合benzado和webmat的答案,使用git rm进行更新,不失败发现不在repo中的文件,并使其可以为任何用户一般粘贴:

1
2
3
4
5
6
# 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 repos中的这些文件。这可以通过创建全局gitignore文件来完成,例如:

1
vi ~/.gitignore_global

添加忽略以下文件的规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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配置中:

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

编辑:

删除图标,因为它们可能需要作为应用程序资产提交。


在某些情况下,您可能还希望全局忽略某些文件。对我来说,.ds_商店就是其中之一。以下是如何:

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

(或您选择的任何文件)

然后像repo的.gitignore一样编辑文件。请注意,我认为您必须使用绝对路径。


如果由于文件具有阶段性更改而无法删除这些文件,请使用:

1
git rm --cached -f *.DS_Store

打开终端并键入"cd"

  • 删除现有文件: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才能使其工作:

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

    最热门的答案是很棒的,但是帮助像我这样的新手,这里是如何创建.gitignore文件,编辑它,保存它,删除你可能已经添加到git的文件,然后把文件推到github。

    创建.gitignore文件

    要创建一个.gitignore文件,只需创建一个具有指定名称的空白文件。我们要创建名为.gitignore的文件,以便使用以下命令:

    touch .gitignore

    忽略文件

    现在您必须添加一行命令git忽略ds存储文件到.git ignore。您可以使用nano编辑器来执行此操作。

    nano .gitignore

    nano很不错,因为它包含了如何摆脱它的说明。(要保存的ctrl o,要退出的ctrl xbakbd)

    复制并粘贴这个Github Gist中的一些想法,其中列出了一些要忽略的常见文件。回答这个问题最重要的是:

    1
    2
    3
    4
    # OS generated files #
    ######################
    .DS_Store
    .DS_Store?

    是注释,它将帮助您在文件增长时组织文件。

    这篇Github文章也有一些一般性的想法和指导方针。

    删除已经添加到git的文件

    最后,您需要实际地从目录中删除这些DS存储文件。

    使用这个来自投票结果最高的命令。这将遍历目录中的所有文件夹,并从git中删除这些文件。

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

    push.gitignore到github

    最后一步,您需要实际提交.gitignore文件。

    git status

    git add .gitignore

    git commit -m '.DS_Store banished!'


    使用git-rm删除它们,然后在.gitignore中添加.ds-store以阻止它们再次添加。您还可以使用BlueHarvest来阻止它们一起创建。


    使用此命令删除现有文件:

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

    然后把.DS_Store加到.gitignore上。


    如果要将DS-Store文件删除到每个文件夹和子文件夹:对于已提交的DS-U存储:

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

    忽略它们:

    1
    2
    3
    4
    5
    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系统上进行的。

    查找并删除:

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

    我还通过设置一个global core.excludesfile全局忽略所有存储库中的.ds_存储。

    首先,创建文件(如果文件不存在):

    1
    touch ~/.gitignore

    然后添加以下行并保存:

    1
    .DS_Store

    现在配置git以全局尊重该文件:

    1
    git config --global core.excludesfile ~/.gitignore

    我发现,snipplr的以下行在擦除所有.DS_Store方面效果最好,包括一个进行了局部修改的行。

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

    --cached选项,保留您的本地.DS_Store,因为它无论如何都会被复制。

    和上面提到的一样,将.DS_Store添加到项目根目录下的.gitignore文件中。那么它将不再在你的视线(回购)。


    这将起作用:

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

    删除名称以.DS_Store结尾的所有文件,包括._.DS_Store


    出于某种原因,上面的任何一个都不能在我的Mac上工作。

    我的解决方案来自终端运行:

    1
    rm .DS_Store

    然后运行以下命令:

    1
    git pull origin master

    我参加聚会有点晚了,但我有一个很好的答案。要删除.ds_存储文件,请使用终端窗口中的以下命令,但要非常小心地删除带有"find"的文件。使用带有-name选项的特定名称是使用该名称的安全方法之一:

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

    如果您想简单地在前面和后面列出它们,可以不使用"-delete"。那会让你放心他们已经走了。

    关于~/.gitignore_的全球建议:这里要小心。你想把这个好文件放到.gitignore中每个工作区的顶层并提交它,以便克隆您的repo的任何人都能从中受益。


    初始化存储库时,跳过包含

    1
    -u

    这不应该是个问题。


    这对我很有用,上面两个答案的组合:

    • $git rm--缓存的-f*.ds存储
    • $git commit-m"filter branch--索引筛选器"git rm--缓存--忽略unmatch.ds_存储"
    • $git push origin master--强制

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


    将此添加到文件中。gitignore

    1
    2
    #Ignore folder mac
    .DS_Store

    保存并提交

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

    现在你对所有的承诺都视而不见


    删除忽略的文件:

    (DS.Stand)

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

    有几个解决方案可以解决这个问题。为了避免创建.ds_存储文件,不要使用OS X查找工具查看文件夹。查看文件夹的另一种方法是使用unix命令行。要删除.ds_store文件,可以使用名为ds_store terminator的第三方产品。要从整个系统中删除.ds_存储文件,可以使用unix shell命令。从应用程序启动终端:实用程序在unix shell提示下,输入以下unix命令:sudo find/-name".ds_store"-depth-exec rm_当提示输入密码时,请输入Mac OS X管理员密码。

    此命令用于查找和删除从文件系统根目录(/)到整个计算机的所有.ds_存储区。要将此命令配置为作为计划任务运行,请执行以下步骤:从应用程序启动终端:实用程序在unix shell提示下,输入以下unix命令:

    SUDO CRONATAB-E当提示输入密码时,请输入Mac OS X管理员密码。在vi编辑器中按一次键盘上的字母i,然后输入以下内容:

    15 1***根查找/-name".ds_store"-depth-exec rm

    这称为crontab entry,其格式如下:

    minute hour dayofmonth month dayofweek用户命令。

    crontab条目意味着系统将在每天凌晨1:15由名为root的帐户自动执行该命令。

    命令从find开始一直到。如果系统未运行,则不会执行此命令。

    要保存条目,请按一次Esc键,然后同时按Shift+Z+Z。

    注意:步骤4中的信息仅用于vi编辑器。