2009-12-11 227 views
2

有沒有辦法告訴git忽略存儲在其原始文件中的文件?由於相關文件位於上游存儲庫中,因此只需將它們添加到.gitignore或.git/info/exclude中即可。git:忽略源文件中的文件

背景

我的上游資源庫中有一些生成的文件。每次我執行本地重建時,這些生成的文件都會更改,並且與提交的版本不同。生成的文件在存儲庫中,因爲許多用戶沒有生成它們的軟件(並且我沒有權力改變它)。這些生成的文件永遠不會手工生成,我從不想將它們提交到我的git存儲庫。我有一個單獨的機制將它們推送到主存儲庫(並且我無法控制這個單獨的機制)。

我正在使用專用git存儲庫對上游Subversion存儲庫進行編輯。要做到這一點,我有一個git倉庫,只是爲了從Subversion提交提交。該git庫定期通過cronjob同步。然後我有私有的git倉庫,它是上游git倉庫的克隆。我想讓git不會對生成的文件造成影響。我對這兩個結果感到滿意:文件不再被我的本地git存儲庫跟蹤(但它們應該被跟svn同步的那個跟蹤),否則git會默默更新我生成的文件,但它永遠不會提交我的更改和文件將永遠不會顯示在「git status」的「更改但未更新:」部分中。

回答

2

git update-index --assume-unchanged可能是您的解決方案。檢查man page瞭解更多信息。


  • --assume-unchanged

  • --no-assume-unchanged

當指定這些標誌,記錄的路徑對象名稱不被更新。相反,這些選項設置和取消路徑的「假定不變」位。當「假設不變」位打開時,git停止檢查工作樹文件以進行可能的修改,因此當您更改工作樹文件時,需要手動取消設置該位以告訴git。在一個非常緩慢的lstat(2)系統調用的文件系統(例如cifs)中處理大型項目時,這有時會很有幫助。

該選項也可以用作粗略的文件級機制來忽略跟蹤文件中未提交的更改(類似於.gitignore對未跟蹤文件所做的操作)。你應該記住,一個明確的git add操作仍然會導致文件從工作樹上被刷新。如果需要在索引中修改這個文件,Git將失敗(優雅地)合併時提交;因此,如果假設未跟蹤的文件在上游發生更改,則需要手動處理該情況。

+0

你真的可以在特定路徑上使用它嗎? – 2011-08-15 13:50:40

+0

我已經在我的項目上試過了,無法刪除遠程文件: git update-index --no-assume-unchanged MyProject.xcodeproj/project.xcworkspace/xcuserdata / – 2011-08-15 13:51:38