2013-08-23 46 views
311

在.DS_Store文件我已經添加.DS_Store到的.gitignore文件,但它似乎只是忽略.DS_Store在根目錄下,而不是在每個文件夾和子文件夾。的.gitignore所有的每個文件夾和子

我該如何解決這個問題?

+2

可能的重複[如何刪除.DS \ _從Git存儲庫中存儲文件?](http://stackoverflow.com/questions/107701/how-can-i-remove- ds-store-files-from-a-git-repository) – 2013-08-23 02:04:20

+0

你到底是如何將它添加到.gitignore的?它應該在所有目錄中工作(對我來說)。 – Thilo

+0

它也適用於我。我也在文件末尾嘗試過,如果你必須有一個(特定於平臺的)換行符,但這並沒有改變,那麼層次結構的任何部分中的.DS_Store目錄仍然被忽略。 – enorl76

回答

428

我想你遇到的問題是,在一些早期的承諾,你不小心添加.DS_Store文件到存儲庫。當然,一旦在存儲庫中跟蹤了一個文件,即使它與可用的.gitignore文件中的條目相匹配,也會繼續跟蹤它。

您必須手動刪除添加到存儲庫的.DS_Store文件。您可以使用git rm --cached .DS_Store。一旦刪除,git應該忽略它。您應該只需要在根.gitignore文件中包含以下行:.DS_Store。不要忘記這段時間!

git rm --cached .DS_Store只刪除.DS_Store從當前目錄。您可以使用find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch從存儲庫中刪除所有.DS_Stores

氈尖:因爲你可能永遠都不想包括.DS_Store文件,建立一個全球性的規則。首先,在某個位置創建一個全局.gitignore文件,例如echo .DS_Store >> ~/.gitignore_global。現在告訴git將它用於所有存儲庫:git config --global core.excludesfile ~/.gitignore_global

此頁幫我回答你的問題:https://help.github.com/articles/ignoring-files

+22

最後2段回答了這個問題。謝謝。 – petrsyn

+61

''git rm --cached .DS_Store''只從當前目錄中刪除一個.DS_Store。使用''查找。 -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch''從回購庫中刪除所有.DS_Store – auco

+1

需要忽略的其他公共文件列表可能會得心應用 – geotheory

9

您還可以添加--cached標誌的AUC的回答保持局部.DS_store文件,愛德華紐厄爾在他原來的答覆中提到。修改後的命令如下所示:find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch .. cheers and thanks!

178

添加**/.DS_Store.gitignore的子目錄


如果.DS_Store已經承諾:

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

忽略它們在所有倉庫(有時稱爲._.DS_Store

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 
+6

這是這個問題的正確答案。 –

+0

仍然上傳到我的回購? –

+0

@FreddySidauruk首先使用'git rm --cached your_file' – ronald8192

8

添加*.DS_Store到你的.gitignore文件。這對我的作品完美

64

的.gitignore文件應該是這樣的:

# Ignore Mac DS_Store files 
.DS_Store 

只要你不包括一個斜線,這是對所有目錄中的文件名匹配。 (從here

+0

它仍然上升到回購 –

+0

@FreddySidauruk那麼你必須運行'git rm - 緩存路徑/到/文件/這裏' – Sgnl

15

步驟1中,刪除所有的*.DS_store文件。一個可以運行

git rm -f *.DS_Store 

但要注意,rm -f可有點危險,如果你有一個錯字! 第二步:添加

*.DS_Store 
.DS_Store 

to .gitignore。這對我有用!

+0

公平點。 'rm -f'有點危險。 – travelingbones

33

如果.DS_Store從未添加到您的git存儲庫,只需將其添加到您的.gitignore文件。

如果你沒有一個,創建一個名爲

.gitignore 

文件放在您的應用程序的根目錄,只是寫

**/.DS_Store 

在這裏面。這絕不會允許.DS_Store文件偷偷在你的git中。

但是,如果它已經存在,寫在你的終端:

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

然後提交和推送更改從您的遠程回購刪除.DS_Store:

git commit -m "Remove .DS_Store from everywhere" 

git push origin master 

現在添加。 DS_Store到您的.gitignore文件,然後再次提交併推送2個最後一段代碼(git commit ...,git push ...)

+0

爲什麼加雙星號?那是什麼意思? – MilanG

+0

@MilanG這是一個關鍵字,基本上意味着'搜索此目錄和所有子目錄'。 –

+0

不確定這是雙星號代表的完美解釋。這是一個通配符。根據你想要達到的目的,可以使用'*'或'**'。這是告訴shell如何導航目錄的一種方式。這個stackoverflow答案完全解釋它https://stackoverflow.com/a/28199633/4092170 –

1

步驟:1)使用此命令刪除現有文件

找到。 -name .DS_Store -print0 | xargs的-0的git RM -f - 忽略UNMATCH

步驟:2)添加.DS_Store你的.gitignore文件

步驟:3)犯的.gitignore 更改混帳添加的.gitignore git的承諾-m「刪除.DS_Store」

相關問題