git合並分支時禁止合並特定文件


開發過程中經常會遇到這樣的場景,一個項目可能有develop(開發環境)、release(生產環境)等多個分支,經常需要對分支進行合並,但是不同分支下的一些配置文件可能會有所不同,比如數據庫配置、redis配置等等。但是我們又不想每次打不同的包時都把這些文件改一遍,這時候怎么樣才能偷個懶呢?Git正好提供了這樣的功能。

 

將develop分支的代碼合並到release分支,並忽略特定的文件
操作步驟如下:
1. 定義一個虛擬的合並策略,叫做 ours:

在根目錄下運行命令行

git config --global merge.ours.driver true

如下圖所示:

 

 

2. 在develop分支的項目根目錄下新建文件.gitattributes,在文件中寫入需要忽略的文件名 + merge=ours, 一個文件占一行。

例如,忽略service.properties、redis.properties、jdbc.properties 文件:

/yjxy-common-web/src/main/resources/service.properties merge=ours
/yjxy-common-web/src/main/resources/redis.properties merge=ours
/yjxy-web-admin/src/main/resources/jdbc.properties merge=ours

如下圖所示:

 

3. 將.gitattributes文件拷貝到 release分支的項目根目錄。

 

4. 切換回release分支

git checkout release

 

5. 合並分支

git merge --no-ff -m 'merge' develop

 

合並之后, release分支的配置文件保持了原樣。

 

 

影響.gitattributes忽略規則的因素
有的文章中提到,在配置了.gitattributes文件的情況下,仍然存在一個問題:要忽略的文件在不同分支間先修改的不會合並到后修改的文件里,但是后修改的文件可以和先修改的文件進行正常合並。也就是說不同分支中,舊文件不會合並到新文件中,但新文件仍然會合並到舊文件,那么真的是這樣嗎?在測試過程中發現這個問題有時會出現,有時又不會出現,因此推斷是有更細節的觸發機制。

 

經過實驗,得到如下結果

前置條件:假設有release、dev兩個分支,兩個分支的根目錄下有同樣的.gitattributes文件

結論1:只有在提交更改相同文件時才會觸發自定義的忽略規則。

首先,這一點是確定無疑的。

結論2:如果有且僅有一個分支中的文件有修改,此時將這個分支合並到另一個分支,那么自定義忽略規則不會觸發,文件仍然會成功合並。

也就是說,僅有一個分支修改過的情況下,要將這個修改過的分支合並到另一個分支的時候,是不適用忽略規則的,文件還是會被合並。

結論3:如果兩個分支的文件都有變化(文件變化之后沒有進行過合並),那么在進行分支合並時,自定義忽略規則會觸發,設置為忽略的文件不會合並,這里不受兩個分支文件修改時間先后順序的影響。

這里是需要強調的一點,如果兩個分支的文件都有變化,是會觸發忽略規則的,文件不會被合並。不論兩個分支中文件的修改時間先后順序是怎樣的,忽略規則都會被觸發。當然,這里還有個前提,就是兩個分支的文件修改之后,沒有進行過合並,如果進行了合並,再次合並時,分支已經變了。
————————————————
版權聲明:本文為CSDN博主「Gabriel8304」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Gabriel576282253/article/details/100077940


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM