簡體   English   中英

git SourceTree中停止跟蹤和忽略文件有什么區別

[英]What is the difference between Stop Tracking and Ignore File in git SourceTree

當我只將文件添加到忽略列表(“忽略”這樣做)時,它仍會顯示在未分段的部分進行更改時。 如何正確忽略它以便不再被跟蹤?

將文件添加到忽略列表和“停止跟蹤”之間有什么區別呢?

困惑。

如果文件已經添加(例如,它是HEAD修訂版的一部分,您正在處理的修訂版),則會跟蹤該文件。 此時,該文件不能被忽略。 你可以將它添加到.gitignore ,git將繼續告訴你文件已被修改(如果是這種情況)。 為了讓你忽略它,它必須是untracked (如果它已被跟蹤,正如我所說)。 為了做到這一點,你可以將它從修訂版中刪除,同時使用git rm --cached the-file將其保存在工作樹上。 如果文件已經在.gitignore上,那么它將不再被報告....至少,向前移動。 但是如果你想回到其中一個仍有文件的修訂版會怎么樣? Git會抱怨。 如果你強行結賬,如果你回去會發生什么? 文件消失了! 因此,如果你想要完全從歷史中刪除文件,有時最好重寫歷史...這一切都取決於你需要付出多少努力。

“停止跟蹤”會從索引中刪除文件。 該文件不會包含在下一次提交中。 如果該文件已包含在先前的提交中,則git會將此解釋為在從上一次提交進行到下一次提交時刪除該文件的指令。 如果該文件尚未包含在先前的提交中,那么它只是成為一個未跟蹤的文件(好像該文件剛剛創建並且git尚未被告知它)。

“忽略文件”為文件的路徑創建git ignore規則。 忽視規則被廣泛誤解。 忽略規則告訴git,“如果您看到一個未跟蹤的文件,其路徑/文件名與此模式匹配,您應該(默認情況下)忽略它”。 兩個關鍵點:

1)如果你說要忽略一個被跟蹤的文件(比如前一次提交中的文件),這實際上什么都不做。 (如果你這樣做並且沒有刪除文件 ,那會有所作為 - 但也許不是你想要的。我會回過頭來看。)

2)雖然UI說您可以忽略該文件 ,但實際上忽略了適用於路徑的規則。 您告訴git忽略它可能在當前與該現有文件關聯的路徑/名稱中找到的任何未跟蹤文件。

我猜你可能想要做的是忽略對文件的更改 ,同時保留已經在歷史記錄中的當前版本。 不僅上述選項都不這樣做,而且事實上沒有選擇這樣做。 (有許多經常提出的解決方法,但我不推薦任何一種,因為它們都有不良的副作用。)

值得注意的是,有些人嘗試直接路由“忽略對跟蹤文件不起作用,因此不要跟蹤文件”。 如上所述,如果您希望后續提交認為您已刪除該文件,則這只是正確的解決方案。

它的長短是,如果您需要在提交中保持文件原樣,但需要對文件進行本地更改(應該忽略),則這是一項無法得到很好支持的要求。 (這不僅僅是git無法做到這一點;沒有工具可以做得很好,因為這是一個矛盾的要求。)所以你真的應該退一步看看如何修改你的過程而不需要這樣做。

(人們提出的最常見的原因 - 可能是您的理由 - 也可能是您的理由 - 他們希望在源樹中“就地”修改配置文件。如果您搜索該問題,您會發現一些SO帖子詳細說明了避免這個問題的方法。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM