![](/img/trans.png)
[英]My React app is using values from the .env file instead of the .env.local file
[英]I return from 'detached HEAD' state and git deleted my .env file from the local directory
我正在檢查我的提交歷史以修復錯誤。 我使用git checkout 4a3cf4ebfc8c3d4a7f8b055b3f38cc90acf2a0cd
在提交之間切換。 我處於 - 'detached HEAD' state
。
在那種狀態下,我使用一些命令,如: git add .
git commit -m "massage"
然后我通過git checkout e255fb94e967c4c1463c25e44090bfc5a40b8463
切換不同的提交。
我使用以下命令從“分離的 HEAD”狀態返回: git checkout master
。
現在,我的.env
文件從本地目錄中消失了。
我正在創建一個反應應用程序。 我正在使用.gitignore
文件來忽略.env
文件中的 API 密鑰。
考慮到一些特殊情況(這里一定是這種情況),這是正常的。
我們從以下事實開始:
Git 存儲提交。 Git 不存儲文件,也不存儲分支,而是整個提交。 (每個提交確實存儲文件,但您一次處理整個提交。分支名稱可以幫助您和 Git找到提交,因為提交編號看起來很隨機。)
每個提交都有一個唯一的編號,它看起來是隨機的,但不是:它是提交的哈希 ID。 哈希 ID 實際上是提交內容的加密校驗和。 任何提交的任何部分都不能更改。
每個提交實際上存儲兩件事:快照——所有文件的完整集合——和一些元數據。 整個提交完全是只讀的,而在所有提交的文件存儲在只讀的,針對Git只,壓縮和去重復的形式。
這反過來意味着您實際上無法處理提交中的文件。 您看到和使用的文件從某個提交中復制到 Git 稱為您的工作樹或工作樹的區域中。
因此git checkout
命令,當給定像master
這樣的名稱或像e255fb94e967c4c1463c25e44090bfc5a40b8463
這樣的原始提交哈希時,必須將存儲(永遠)在該提交中(但不能被 ReactJS 等程序使用)的文件復制到您的工作樹中(它們可以被ReactJS 之類的程序使用)。
這意味着您在工作樹中看到和使用的文件實際上並不在Git 中。 它們只是來自 Git 中某個提交的文件的副本。
現在,假設您的master
分支的最后一次提交是a123456...
。 我編造了哈希 ID,但我們可以確定無論實際的哈希 ID 是什么,它都不是e255fb94e967c4c1463c25e44090bfc5a40b8463
。 所以你的 Git 在里面有兩個不同的提交:
e255fb94e967c4c1463c25e44090bfc5a40b8463
:這個提交中有一個.env
文件。
a123456...
:此提交中沒有.env
文件。
當您檢出提交e255fb94e967c4c1463c25e44090bfc5a40b8463
,Git 必須將保存的.env
文件提取到您的工作樹中。
當您切換回a123456...
,Git 必須刪除已保存的.env
文件以使其.env
。
我正在使用 .gitignore 文件來忽略 .env 文件中的 API 密鑰。
不幸的是, .gitignore
文件實際上並沒有告訴 Git 忽略文件。 它不能:提交e255fb94e967c4c1463c25e44090bfc5a40b8463
有.env
文件,並且任何現有提交的任何部分都不能更改。
因此,當您提取提交e255fb94e967c4c1463c25e44090bfc5a40b8463
,Git 會從該提交中復制.env
文件(到 Git 的索引或暫存區域以及您的工作樹中)。 如果您的.env
文件中包含有價值的數據,則此復制過程可能會破壞有價值的數據。
通常,當git checkout
可能會破壞文件的內容時,Git 會警告您這一點,並拒絕執行git checkout
直到您將這些文件內容保存在其他地方。 不幸的是,在.gitignore
中列出文件的副作用之一是它有時(不總是,但有時)授予 Git 銷毀文件內容的權限。
不過,或許在.env
你有這樣的文件內容是你的工作樹,但不是在犯a123456...
,匹配在提交內容e255fb94e967c4c1463c25e44090bfc5a40b8463
。 如果是這種情況, git checkout e255fb94e967c4c1463c25e44090bfc5a40b8463
將內容保留在原處,實際上並沒有破壞任何東西。 不幸的是,當切換回來時,Git 仍會刪除該文件,但此時您可以指示 Git 從該特定提交中檢索該特定文件的內容:
git show e255fb94e967c4c1463c25e44090bfc5a40b8463:.env > .env
例如。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.