簡體   English   中英

如何僅在本地忽略跟蹤的文件

[英]How to ignore a tracked file locally only

如何僅忽略本地已存在於索引中的文件? 我不想從索引中刪除文件,從而影響其他人。 我嘗試過的事情:

  • 將文件添加到.git \\ info \\ exclude
  • git update-index-假定未更改的myFile.json
  • git更新索引--skip-worktree myFile.json

修改文件並嘗試切換分支時,兩個update-index命令均會給出錯誤。

$ git checkout myBranch
error: Your local changes to the following files would be overwritten by checkout:
        myFile.json
Please commit your changes or stash them before you can switch branches.
Aborting

此錯誤是因為根據git文檔, “內容安全仍然是優先事項”。 有任何想法嗎?

問題變成: 當您簽出其他提交時,您myFile.json做什么?

背景

使用--skip-worktree (此處不使用--assume-unchanged ,這是一種速度破解,而不是絕對指令;請參閱Git-“ assume-unchanged”和“ skip-worktree”之間的區別 )告訴Git它不必太在乎對工作樹文件的修改。 但是...它們對工作樹文件的修改。 假設此文件的路徑為P。 Git保留與HEAD提交匹配的索引版本-假設這是或將在我們正在查看時,提交ID1234567。工作樹版本會更改,並且當您執行各種Git操作時,“跳過工作樹版本”,只是繼續使用P的索引版本。 這使您可以使用P的(未更改的)索引版本來修改工作樹P ,甚至根據需要進行新的提交。

無論如何,您的P的工作樹版本不再與您的P的索引版本匹配。 正如我們指出的那樣,您現在處於提交1234567上,即git rev-parse HEAD生成該哈希ID。

但是,現在,我們發現要讓Git簽出其他提交,即將HEAD從提交1234567移到commitcba9或其他東西,Git將不得不替換或刪除 P的索引版本。 它可以做到這一點,但是按照當前的編碼,它也將替換或刪除P的工作樹版本。

(切換到一些其他的其他承諾,如說8888888-一個非常幸運的承諾在中國,可能不需要觸碰P的索引版本。在這種情況下, git checkout會很樂意切換HEAD到該犯,再后來,再次回到1234567。但是fedcba9不太幸運。)

這是“安全的”替換或刪除工作樹版本P當且僅當 P的指數版本匹配HEAD P的版本,從此你可以從舊獲取該版本P的背HEAD ,即從1234567在我們的例子中。 但是我們已經聲明P的工作樹版本與HEAD版本不匹配。 --skip-worktree標志不會更改操作的(取消)安全性; 這只是意味着其他各種操作不會抱怨工作樹版本與索引版本不匹配。

那么,您P做什么?

現在,您確定要從commit 1234567移到fedcba9

提交1234567擁有P的版本,而您的P的索引版本與此匹配。 您的P的工作樹版本沒有。

提交fedcba9擁有P的不同版本,或者說P不再存在,並且P的索引版本與此不匹配。

檢出fedcba9將把fedcba9P版本放入索引,或從索引中刪除P。 這兩種操作都應替換或刪除P的工作樹版本,以便您可以看到fedcba9中的內容(或不顯示)。 絕對不同於1234567

看到版本的文件? 如果是這樣,請將P的當前工作樹內容保存到其他位置,將P還原到索引/ HEAD提交中的內容,然后簽出fedcba9 現在,您將在工作樹中fedcba9 您在其他地方保存的P將是安全的。

您是否在乎該文件的該版本中的內容,並且想要保留其中的內容? 如果是這樣,請將P的當前工作樹內容保存到其他位置,將P還原到索引/ HEAD提交中的內容,然后簽出fedcba9 然后用您保存的其他位置的副本覆蓋工作樹中的所有內容。

Git不會為您選擇任何一種,但是您自己做起來很容易。 您只需要確定哪個,然后執行即可。

暫無
暫無

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

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