我怎么能除去那些恼人的Mac OS X .DS_Store 文件从一个混帐库?

有帮助吗?

解决方案

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

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进行更新,而不是发现不在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 config:

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

我必须在上面将git-rm更改为git rm才能使其正常工作:

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

打开端和类型"的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.'

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

创建.gitignore文件

要创建.gitignore文件,您只需touch创建具有指定名称的空白文件的文件即可。我们想要创建名为.gitignore的文件,以便我们可以使用命令:

touch .gitignore

忽略文件

现在你必须添加一行告诉git忽略你的.gitignore的DS Store文件。您可以使用nano编辑器执行此操作。

nano .gitignore

Nano非常好,因为它包含了如何摆脱它的说明。 ( Ctrl - O 保存, Ctrl - X 退出)

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

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

#是评论,可以帮助您在文件增长时整理文件。

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

删除已添加到git的文件

最后,您需要从目录中删除这些DS Store文件。

从最高投票的答案中使用这个伟大的命令。这将遍历目录中的所有文件夹,并从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 来阻止他们一起创建

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

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

然后将.DS_Store添加到.gitignore

以下对我来说效果最好。处理不匹配的文件和具有本地修改的文件。作为参考,这是在运行git 1.7.4.4的Mac 10.7系统上。

查找并删除:

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

我还通过设置全局core.excludes文件来全局忽略所有存储库中的.DS_Store。

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

touch ~/.gitignore

然后添加以下行并保存:

.DS_Store

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

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

如果您要将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

我发现 snipplr中的以下一行最好擦除所有.DS_Store,包括具有本地修改的--cached

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

<=>选项,保留您的本地<=>,因为它无论如何都会被复制。

就像上面提到的那样,在项目的根目录中添加<=>到.gitignore文件。然后它将不再在您的视线中(回购)。

我参加派对有点晚了,但我的答案很好。 要删除.DS_Store文件,请在终端窗口中使用以下命令,但要小心删除带有“find”的文件。使用带-name选项的特定名称是使用它的更安全的方法之一:

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

你可以不留下<!> quot; -delete <!>;如果你想简单地列出它们之前和之后。那会让你放心,他们已经走了。

关于〜/ .gitignore_global建议:这里要小心。 你想把这个漂亮的文件放入.gitignore中 每个工作区的最高级别并提交它,以便克隆您的回购的任何人都将获得其使用的好处。

这将有效:

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

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

出于某些原因,以上都没有在我的Mac上工作。

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

rm .DS_Store

然后运行以下命令:

git pull origin master

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

的git命令
-u

它应该不是问题。

这个工作对我来说,组合的两个答案从上述:

  • 编译rm--cached-f*。DS_Store
  • 编译犯-m"过滤器的分支--index-筛选'混帐rm--缓存 --忽略了-取消匹配.DS_Store"
  • 编译推动原籍国--主力
$ 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 shell命令。 从应用程序启动终端:实用程序 在UNIX shell提示符下,输入以下UNIX命令: sudo find / -name <!> quot; .DS_Store <!> quot; -depth -exec rm {} \; 提示输入密码时,请输入Mac OS X管理员密码。

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

sudo crontab -e 提示输入密码时,请输入Mac OS X管理员密码。 进入vi编辑器后,按一下键盘上的字母I,然后输入以下内容:

15 1 * * * root find / -name <!> quot; .DS_Store <!> quot; -depth -exec rm {} \;

这称为crontab条目,其格式如下:

分钟DayOfMonth Month DayOfWeek用户命令。

crontab条目表示系统将在每天凌晨1点15分由名为root的帐户自动执行该命令。

该命令从查找一直开始。如果系统未运行,则此命令将不会执行。

要保存输入,请按一次Esc键,然后同时按Shift + z + z。

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

将此添加到您的文件.gitignore

#Ignore folder mac
.DS_Store

保存并提交

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

现在你忽略了所有提交

删除被忽略的文件:

(。DS_Store)

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

不需要除去 .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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top