前一陣子,公司的版本控制從svn
遷移到了git
,不得不說,git
確實比svn
要強大好多,單單是乙個分支功能,就有很多值得學習的地方,通過git
分支的版本控制,我們可以很方便的進行不同開發環境的切換。
現在來看,分支切換是沒有什麼問題的,然而在分支進行合併的時候,plist配置檔案勢必會發生被覆蓋的情況,比如我從publish
正式環境分出來乙個功能分支func1
進行相關功能的開發,開發完後,我需要先合併到develop
上進行測試,於是我切換到develop
分支,將我的功能分支func1
合併過去,合併完後,會發現我的develop
分支的配置檔案,變成了publish
的配置檔案,於是我需要再手動的將這些變化改過來,這很明顯不是我們想要的結果,在講究時間成本的開發環境下,這樣做無異於浪費。
如何在分支合併的時候,忽略掉一些指定的檔案不讓它們發生合併呢。網上搜了一下,發現也有很多前輩遇到類似的問題,比如這篇文章,大致的做法就是通過
gitattribute
方法:
info.plist merge = ours
***.h merge = ours
//有多個的話,依次排列即可
網上的很多文章到此就為止了,然而這樣並不夠。由於開發的時候,功能分支一定都是從
publish
分支出來,並且只存在publish
分支(包括功能分支)合併到develop
和simuluate
分支的情況,因此我們只需要保證publish
分支(包括功能分支)向別的分支合併時,別的分支的配置檔案不會覆蓋掉就可以了。
現在如果我們在publish
分支下建立了gitattribute
檔案,並在裡面按照上面的方法對info.plist
檔案進行合併忽略設定。然後我們從publish
環境分出develop
與simulute
分支,並對dev
與sim
分支的plist
檔案進行修改,此時我們將publish
分出來的功能分支func1
往另外兩個分支合併的時候沒有問題,不會發生覆蓋。可是當我們改變了publish
分支下info.plist
檔案的任何一處後,再將publish
(包括從其中分出來的功能分支)合併到別的分支的時候,info.plist
檔案又會被覆蓋掉。這個方法貌似就失效了。
困惑了很久後,最終在stackoverflow和同事的幫助下,找到了答案,發現這真是乙個隱藏的坑,原來gitattribute
方法生效是有條件的,跟檔案的修改順序有關係,只有先修改的往後來修改的合併的時候才會生效。這裡的先後是指檔案的最後修改時間,不是建立的時間,如果最近修改過,那它就是最新的,比如剛才的例子,我們修改了publish
分支的info.plist
,而沒有對另外兩個分支下的info.plist
進行修改,那麼publish
分支下的info.plist
就比另外兩個分支新,這時候合併的時候,gitattribute
就會失去作用,那麼該如做呢,我們在修改完publish
分支後,需要再次修改另外兩個分支下的plist
配置檔案,即使沒啥可以改的,也要改(可以先改錯,再改回去)這樣我們publish
分支下的,就會仍然保持最舊。
方法比較繁瑣,但確實有效。
windows安裝rabbitmq踩坑實錄
最近學習springcloud訊息匯流排需要用到rabbitmq,然後安裝的時候踩了一些坑,記錄如下 首先安裝rabbitmq之前需要先安裝erlang,因為rabbitmq服務端使用erlang寫的,依賴erlang 安裝好erlang之後安裝rabbitmq 第乙個坑 1.rabbitmq的版本...
systemtap embedded C 踩坑筆記
官方文件 systemtap的embedded c中,不能 include 也不能用printf和print。那怎麼列印呢?用stap printf。用法與printf一樣。還可以訪問cript中的全域性變數。官方文件中的示例 global var global var2 100 function ...
Aggregation MongoDB踩坑記錄
對某些篩選條件進行分頁查詢,開始每一頁的有效data都不足pagesize,最後發現,aggregation 的pipeline是有先後順序的。錯誤 agg aggregation.newaggregation aggregation.skip curpage 1 pagesize aggregat...