2011-05-19 128 views
1

我有一個非常基本的工作環境,但沒有設法根據需要使用Git。Git:使用.gitignore與不同分支

以下是我們如何描述它:兩個分支A和B各有兩個文件在其工作樹中,第一個文件是toMerge,第二個文件是KeepSpecific。

我在兩個分支中有相同的.gitignore,表示忽略toKeepSpecific文件。 toKeepSpecific文件從未在遠程存儲庫中推送過,因此兩個分支只包含toMerge。

我遇到的問題是,當我在分支B上並嘗試結帳分支A時,我收到以下消息:「以下未跟蹤的工作樹文件將被結帳覆蓋」。我認爲.gitignore會照顧,但顯然不...

什麼是最適合這種需求的git環境?

謝謝!

+0

這之前未追蹤文件是在抱怨?另外,.gitignore不應該管理git正在跟蹤的文件。 – 2011-05-19 10:59:41

+0

這是提出抱怨的toKeepSpecific文件... – Johanisma 2011-05-19 11:01:40

回答

2

git ignore tell git 不跟蹤文件內容通過具體名稱

編輯這隻能防止git顯示未跟蹤的文件,或在git add後自動跟蹤它們。 它不適用於當前跟蹤的文件。您需要從您希望首先忽略的分支中手動刪除它們。

IOW:git ignore不影響現有修訂版。跟蹤的文件將繼續跟蹤,直到您刪除它們


無論是,這是從來沒有確定覆蓋本地文件沒有任何警告,即使他們不是(目前)跟蹤。這正是爲了防止轉換分支上的數據丟失。

許多git命令接受--force-選項,無論如何,所以如果你知道你在做什麼,盡一切辦法,使用它。

如果使用Git的工作流程,不允許你使用--force選項,那麼我建議你採用git clean -x命令清理未跟蹤(即忽略)文件執行分支開關

+0

我不想使用--force,因爲我不希望文件被覆蓋,我想保留當前的本地版本... – Johanisma 2011-05-19 11:27:38

+0

checkout結帳。您無法在保持某些文件不變的情況下檢出版本。您首先必須確保阻止文件不再位於您嘗試結帳的修訂版本中。你可以做相反的事情:'git checkout revision - notignored1/notignored2 /'但是這會改變語義:這將不會將HEAD更新爲結賬版本,而是覆蓋命名的本地文件,同時保持與之前相同的HEAD。 – sehe 2011-05-19 11:30:49

+0

添加了對答案的說明 – sehe 2011-05-19 11:33:43