如何从Git存储库中删除那些烦人的Mac OS X .DS_Store
文件?
答案 0 :(得分:2106)
从存储库中删除现有文件:
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!'
答案 1 :(得分:228)
将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
答案 2 :(得分:133)
解决此问题的最佳解决方案是全局忽略系统上所有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
编辑:
删除了图标,因为它们可能需要作为应用程序资产提交。
答案 3 :(得分:56)
在某些情况下,您可能还想忽略全局的某些文件。对我来说,.DS_Store就是其中之一。方法如下:
git config --global core.excludesfile /Users/mat/.gitignore
(或您选择的任何文件)
然后像repo的.gitignore一样编辑文件。请注意,我认为您必须使用绝对路径。
答案 4 :(得分:19)
如果由于分阶段更改而无法删除文件,请使用:
git rm --cached -f *.DS_Store
答案 5 :(得分:15)
打开终端并输入“cd< ProjectPath>”
删除现有文件:
nano .gitignore
.DS_Store
添加此git add .gitignore
输入“ctrl + x”
输入“y”
输入以保存文件
git commit -m '.DS_Store removed.'
public class Connection
{
public List<byte[]> ReadBuffer = new List<byte[]>();
TcpClient ClientLogin;
NetworkStream StreamLogin;
DataEncoder NetworkBufferLogin;
Thread ReadingThread;
public Connection()
{
ClientLogin = new TcpClient("127.0.0.1", 13000);
StreamLogin = ClientLogin.GetStream();
NetworkBufferLogin = new DataEncoder(StreamLogin);
ReadingThread = new Thread(StartReading);
}
private void StartReading()
{
while (true)
{
Console.WriteLine("test");
byte[] a = NetworkBufferLogin.ReceiveData();
ReadBuffer.Add(a);
}
}
}
答案 6 :(得分:15)
我必须在上面将git-rm更改为git rm才能使其正常工作:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
答案 7 :(得分:13)
最受欢迎的答案很棒,但帮助像我这样的新手,这里是如何创建.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 article也有一些一般性的想法和指导方针。
删除已添加到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!'
答案 8 :(得分:10)
使用git-rm
删除它们,然后将.DS_Store添加到.gitignore
以阻止它们再次添加。您还可以使用blueharvest来阻止它们一起创建
答案 9 :(得分:8)
使用此命令删除现有文件:
find . -name '*.DS_Store' -type f -delete
然后将.DS_Store
添加到.gitignore
答案 10 :(得分:7)
如果您要将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
答案 11 :(得分:7)
以下对我来说效果最好。处理不匹配的文件和具有本地修改的文件。作为参考,这是在运行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
答案 12 :(得分:6)
永久删除此文件而永远不必担心它的最佳方法是
创建一个全局.gitignore文件:
echo .DS_Store >>〜/ .gitignore_global
并让git知道您要在所有存储库中使用此文件:
git config --global core.excludesfile〜/ .gitignore_global 就是这样! .DS_Store挡不住您的路。
答案 13 :(得分:6)
我发现snipplr中的以下行最有效地擦除了所有.DS_Store
,包括一个有本地修改的行。
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
选项,保留您的本地.DS_Store
,因为它无论如何都会被复制。
就像上面提到的那样,在项目的根目录上添加.DS_Store
到.gitignore文件。然后它将不再在您的视线中(回购)。
答案 14 :(得分:4)
这将有效:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
删除名称以.DS_Store
结尾的所有文件,包括._.DS_Store
。
答案 15 :(得分:4)
我参加聚会有点晚了,但我的回答很好。 要删除.DS_Store文件,请在终端窗口中使用以下命令,但要小心删除带有&#39; find&#39;的文件。使用带-name选项的特定名称是使用它的更安全的方法之一:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
你可以放弃&#34; -delete&#34;如果你想简单地列出它们之前和之后。这会让你放心,他们已经离开了。
关于〜/ .gitignore_global建议:这里要小心。 你想把这个漂亮的文件放入.gitignore中 每个工作区的最高级别并提交它,以便克隆您的回购的任何人都将获得其使用的好处。
答案 16 :(得分:4)
有时 .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
答案 17 :(得分:4)
出于某些原因,以上都没有在我的Mac上工作。
我的解决方案来自终端运行:
rm .DS_Store
然后运行以下命令:
git pull origin master
答案 18 :(得分:3)
This worked for me, combo of two answers from above:
答案 19 :(得分:3)
初始化存储库时,请跳过包含
的git命令-u
它不应该是一个问题。
答案 20 :(得分:2)
将此添加到您的文件.gitignore
#Ignore folder mac
.DS_Store
保存并提交
git add -A
git commit -m "ignore .DS_Store"
现在你忽略了所有提交
答案 21 :(得分:2)
删除被忽略的文件:
(。DS_Store)
$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
答案 22 :(得分:2)
有一些解决方案可以解决此问题。 要避免创建.DS_Store文件,请不要使用OS X Finder查看文件夹。查看文件夹的另一种方法是使用UNIX命令行。 要删除.DS_Store文件,可以使用名为DS_Store Terminator的第三方产品。 要从整个系统中删除.DS_Store文件,可以使用UNIX shell命令。 从应用程序启动终端:实用程序 在UNIX shell提示符下,输入以下UNIX命令: sudo find / -name&#34; .DS_Store&#34; -depth -exec rm {} \; 提示输入密码时,请输入Mac OS X管理员密码。
此命令用于查找和删除从文件系统的根(/)开始到整个计算机的所有出现的.DS_Store。 要将此命令配置为作为计划任务运行,请执行以下步骤: 从应用程序启动终端:实用程序 在UNIX shell提示符下输入以下UNIX命令:
sudo crontab -e 提示输入密码时,请输入Mac OS X管理员密码。 进入vi编辑器后,按一下键盘上的字母I,然后输入以下内容:
15 1 * * * root find / -name&#34; .DS_Store&#34; -depth -exec rm {} \;
这称为crontab条目,其格式如下:
分钟DayOfMonth Month DayOfWeek用户命令。
crontab条目表示系统将在每天凌晨1点15分由名为root的帐户自动执行该命令。
该命令从查找一直开始。如果系统未运行,则此命令将不会执行。
要保存输入,请按一次Esc键,然后同时按Shift + z + z。
注意:步骤4中的信息仅适用于vi编辑器。
答案 23 :(得分:2)
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
答案 24 :(得分:0)
无需在本地删除.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
答案 25 :(得分:0)
使用命令.gitignore
创建一个touch .gitignore
文件
并在其中添加以下几行
.DS_Store
保存.gitignore
文件,然后将其推入git repo。
答案 26 :(得分:0)
我做了:
git checkout -- ../.DS_Store
(#放弃(永久)对文件的本地更改) 一切正常!
答案 27 :(得分:0)
这将删除目录(包括子目录)中的每个.DS_Store
文件
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
将此内容添加到.gitignore
中,以防止根目录和每个子目录中的所有DS_Store文件进入git!
**/.DS_Store
来自git docs:
- 前导“ **”后跟斜杠表示在所有目录中均匹配。例如,“ ** / foo”与文件“ foo”在任何位置都匹配文件或目录“ foo”。 “ ** / foo / bar”与文件或目录“ bar”匹配,直接位于目录“ foo”下。