[英]It´s possible to have git locally branches with different config files?
我想知道是否有可能在我的本地存儲庫中擁有一個使用生產數據庫憑據的配置文件的主分支,以及一個具有不同憑據和數據庫的配置文件的開發分支。
我一直在搜索但沒有運氣,我找到的最接近的答案是使用 git 屬性,但它只能在發生合並時發生沖突時保留配置文件。 我想一直在每個分支上保留未修改的配置文件。 有誰知道我怎樣才能做到這一點? 或有關如何管理這些文件的任何建議?
Git 並不是真正關於分支。 這真的是關於commits 。 分支——或者准確地說是分支名稱——只是查找提交的一種方式。 重要的是提交。
如果您提出這樣的問題:兩個不同的提交是否可以包含名稱相同但內容不同的文件? 答案很明確:是的,他們可以。
一旦你問了一個明顯的后續問題:給定兩個不同的提交,在哪個文件 F 中有不同的內容,當我合並這些提交時,F 的內容會發生什么? 你會看到問題開始出現的地方。
在 Git 中,合並是關於合並工作。 因為每次提交都代表一個文件快照,所以 Git 需要在這里進行第三次提交。 第三次提交是在兩個分支上的一些共享的公共提交。 請記住,在 Git 中,一次提交通常會同時在多個分支上進行。 分支上的短語僅表示通過使用分支名稱——分支的提示提交——並反向工作,我們得到了有問題的提交。
因此,如果我們有一串不同的提交:
I--J <-- branch1
/
...--G--H
\
K--L <-- branch2
我們可以考慮從共享公共提交H
開始合並工作,它保存所有文件的快照。 我們將H
中的這個快照與J
的快照進行比較。 如果文件F在從H
到J
的過程中發生了變化,那就是一個變化。 接下來,我們將H
的快照與L
的快照進行比較。 如果文件F在這里發生了變化,那就是一個變化。 Git 現在將合並更改。
如果更改是“將系統配置為以一種方式運行”和“將系統配置為以其他方式運行”,則這些更改可能會發生沖突。 它們是否以及如何沖突取決於配置的工作方式。 Git 只理解lines 。 如果提交H
中文件F 的第 47 行在J
和L
中都發生了更改,並且更改的方式不同,那就是沖突。 如果只有提交J
對第 47 行進行了更改,Git 認為從J
獲取該更改肯定沒問題。
我想一直在每個分支上保留未修改的配置文件。 有誰知道我怎樣才能做到這一點?
通常的答案是:甚至不要嘗試。 這些文件不應該依賴於分支,因為當你有這個時:
...--G--H <-- master, dev
提交H
中的文件是相同的,無論您是因為名稱master
還是因為名稱dev
而使用提交H
兩個分支名稱標識相同的提交H
。
相反,讓這些配置文件不被跟蹤(也可能被忽略)。 這意味着 Git 從不關注它們。 當您從一個提交切換到另一個提交時,它們不會更改,也不會在您從一個分支切換到另一個分支時更改,即使這也意味着切換提交。
在不同的工作樹中執行基於憑證和數據庫的工作。 每個 Git 存儲庫都帶有一個工作樹,因此您只需使用同一基礎存儲庫的兩個不同克隆即可輕松獲得兩個不同的工作樹。
如果您的 Git 至少為 2.5(最好至少為 2.15,因為一個相當大的錯誤直到那時才修復),您可以使用一個 Git 存儲庫和git worktree add
將第二個工作樹git worktree add
到一個存儲庫。
如果您真的堅持在一個存儲庫中完成所有操作,並根據您為最近的git checkout
或git switch
命令指定的分支名稱修改文件,請考慮使用 post-checkout 掛鈎。 您可以在這樣的鈎子中編寫您喜歡的任何代碼,並且您可以讀取此處使用的分支的名稱。 這樣做既痛苦又充滿陷阱:單獨的工作樹方法要優越得多,前提是您可以為其提供磁盤空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.