2011-01-08 210 views
41

.gitignore文件在忽略一些我們不想控制的文件時非常有用。不幸的是,當文件已經受版本控制時,它不能使用。例如,我的.gitignore(已經添加到git中)文件可能與我的同事想要的文件不同(例如,我想忽略Vim文件)。每當我對這個文件進行更改時,git會將其顯示爲修改後的文件。所以我的問題:Git:忽略版本控制文件

  1. 有什麼辦法可以忽略某個文件的變化,它已經由Git控制?!
  2. 有什麼辦法可以提交這些更改,但只保留給我自己嗎?顯然,我不想使用分支,因爲我正在某個分支上工作。
+5

沒有答案回答主要問題 - 第1號,包括接受的問題。問題是關於忽略已經被控制的文件,而不是.gitignore不會排除會做這項工作 – shealtiel

+4

git-update-index的答案是正確的答案。 – Jason

回答

11

如果要排除特定於進程的文件(如Vim臨時文件),請編輯(本地)文件.git/info/exclude並在其中添加排除模式。此文件專爲特定於開發人員的排除而設計,而不是針對項目範圍排除設計的.gitignore

簡短的總結是,每個人都應該對添加到.gitignore的內容達成一致。對於不同意的文件,請使用.git/info/exclude

+0

我將版本控制的文件添加到.get/info/exclude,但它們繼續顯示爲已修改的文件。 – paullb

+7

這不是正確的!使用Aristotle Pagaltzis的回答如下。 – paullb

+1

最初的問題是尋找一種方式讓不同的同事忽略不同的文件集。我的回答介紹了爲此設計的'.git/info/exclude'文件。但是,如果將問題概括爲「如何忽略已添加到Git的任何*文件的更改」,那麼是的,您需要不同的解決方案,因爲這是一個不同的問題。然而,我不會推薦針對這個特定問題的一般解決方案,因爲同事們不能再將變化分享給'.gitignore'。 –

2

我真的不能回答這個一般性問題(有混帳忽略跟蹤的文件) - 它給我的印象是一個功能,將遠遠超過有用的更有害。

但是,gitignore manual page指定了幾種配置排除文件模式的方法。

特別是,它提供了有關如何使用這些不同的方式明確指示:

  • 模式應該是版本控制,並通過克隆分發到其他存儲庫(即文件,所有的開發者都希望忽略)應該進入.gitignore文件。

也就是說你.gitignore文件不應該由你的同事不同 - 它如預期運行。

  • 模式,其是針對特定的倉庫,但它並不需要與其他相關資料庫(例如,住在倉庫裏,但具體到一個用戶的工作流程輔助文件)共享應該進入$GIT_DIR/info/exclude文件。用戶想要的git在所有情況下(例如,備份或選擇用戶的編輯器生成臨時文件)忽略

  • 模式通常進入由core.excludesfile用戶的~/.gitconfig指定的文件。

你有它。在您的~/.gitconfig文件中指定一個core.excludesfile文件路徑,然後放入要排除的模式。

99

使用git-update-index暫時忽略更改所有已經在版本控制下的文件:

git update-index --assume-unchanged <files> 

撤消使用:

git update-index --no-assume-unchanged <files> 

也有看skip-worktreeno-skip-worktree選項更新-index如果你需要這個堅持過去一個git-reset

+0

工作就像一個魅力!謝謝! –

1

我寫過關於three ways of excluding files其他地方。

總結:

  1. 的全球混帳忽略文件適用於系統
  2. 在信息庫中的.gitignore文件應用資源庫和信息庫的所有克隆上的所有信息庫。
  3. .git/info/exclude文件僅適用於該存儲庫。

列表中較低的項目優先於較高的項目,並且在文件中的任何模式中的項目前面的!顛倒先前的排除。

這種範例在Git的其他地方看到。例如,如果您使用的是子模塊,則要使用的子模塊的url位於存儲庫中的.gitmodules文件中,但您可以覆蓋該URL以在.git/config文件中使用。

+3

它不適用於已經版本化的文件 –

0

這裏是廣義的,ubiquitos(而不是個人)根據SmartGitHG viusal接口使用Git的解決方案:

  • 選擇要在「庫」窗口中忽略的文件夾;
  • 在「文件」窗口中選擇該文件夾中的所有文件(通過單擊主窗口右上角區域中相應的過濾器圖標來取消隱藏未更改的文件);
  • 單擊控制面板上的「刪除」(如果需要,請選中「刪除本地文件」複選框);
  • 提交本地更改;
  • 右鍵單擊「存儲庫」窗口中的文件夾;
  • 點擊「忽略」。
4

你可以使用這個命令來得到你想要的。

git rm --cached path/to/file 

git rm -r --cached path/ignore/dir 

這隻會從混帳刪除曲目,不會刪除實際的文件。

然後,您可以編輯忽略文件以解開這些文件或目錄。