hg轉git的那些事

2021-07-03 05:56:19 字數 2238 閱讀 7376

其實網上的資訊真的很多很多了,不管是度娘還是谷歌,搜關鍵字「git」,所有的資訊都有了。最簡單的入門也好,高階操作也罷,在這個資訊**的時代,想要的不想要的資訊,都觸手可及。那我寫這篇文章的意義何在呢?——權當總結吧。

公司說,為了提高大家的效率以後都要用git,用慣了hg的我們積極響應公司的號召,棄hg投git。此為記。

先回憶下hg的常用操作,pull,update,push,merge,天天用的也就這四個了吧。那如果要轉到git上來,搞定了跟hg這四個操作對應的命令,應該就可以萬事大吉了。push和merge這兩個操作,git的表現和hg完全一樣,略過,pull和update就有點差別了。我們都知道,hg的pull只是把**拉下來,並沒有更新到本地,update是將拉取到的**更新到本地,而git的pull卻不是這樣——它把update的活也給幹了。在git中,單純拉取**的命令是fetch。這個點是平時使用中最大的區別了。我用的小烏龜git漢化之後,fetch和pull的漢語分別是獲取與拉取,剛開始使用的時候挺容易弄混的,需要小心謹慎。

過去三年的時間裡,我所經歷的三個專案組都使用的hg,但不知道為什麼,無一例外採用的是分倉庫的方式進行**的隔離,比如***-stable、***-alpha、***-beta,這樣就造成了一種情況——本地有n多重複的**庫。猶記得當時樂園的**庫多達七八個,本地整合開發環境一開啟,映入眼簾的是uzone-stable、uzone-alpha、uzone-agile、uzone-quick等等,甚是壯觀。現在想想,過去的我們一直說「在不同的分支上開發」,實際上我們一直都是「在不同的倉庫上開發」。

插入的一段話——由於這篇文章太囉裡囉嗦一時半會沒寫完然後組內就開周例會了,在例會上leader為大家解答了為什麼hg時代沒有使用多branch的原因。簡單來說,hg本身是有branch的沒錯,但是各個專案組不約而同採用了多倉庫的形式,實際上是犧牲了單個倉庫多branch的便捷及**簡潔的優點,承擔了維護多個倉庫及本地**冗餘多份的缺點,達到「強」**隔離的目的。因為當年的uzone是乙個蠻大的專案組,開發人員有三四十人,每個人對hg的掌握程度不一,如果只有乙個hg倉庫每個人push到不同的branch上的話,出現誤操作的可能性就非常大——插入的這段話結束。

最後在例會上大家結合當前的情況各抒己見,最後決定採用乙個倉庫多個分支的情況,原因如下:現在組內的每個子專案一般都是兩個人在維護,系統支撐組也對我們進行了比較完善的git培訓,加之git可以選擇對倉庫的某一分支進行保護操作(比如將master設為保護分支,只有擁有最高許可權的人可以推**上去),綜合考量使用乙個倉庫多分支的利大於弊。

那麼現在回答剛才提到的兩個問題。第乙個問題已經有明確答案,當然可以,不再囉嗦。第二個問題,多分支並行開發也很簡單。首先檢視當前的倉庫有多少分支:

git branch
git branch的結果至少有乙個——master——這個是預設分支,必須有的。如果結果列表中已經有了你需要工作的分支,比如alpha,那麼通過命令切換:

git checkout alpha
這樣你就切換到alpha分支上開發了。一般來說本地的分支都會和遠端的某個分支對應的。在本地開發完成後推**時,注意需要選擇遠端的對應的分支。

如果本地不存在你需要工作的分支,那麼需要新建分支,命令如下:

git branch alpha -- 新建分支alpha

git branch beta -- 新建分支beta

git branch gamma -- 新建分支gamma

然後git checkout 分支名就ok。或者採用

git checkout -b 
這個命令將新建分支和切換分支的動作合二為一了,更為方便。

如果有三個同學a、b、c需要同時對乙個倉庫開發,那麼進行了如上的操作後,三位同學可以分別在三個分支上開發,互不影響。如果a先開發完畢且上線了,可以將a開發的分支(如alpha)合併到master分支。操作步驟如下:

git checkout master -- 切回主幹

git merge alpha -- 合併

對於b和c來說,主幹分支更新了,自己需要拿到主幹的最新**,這個時候只需要在本地執行git merge master就可以了(因為b和c本來就在beta和gamma分支上進行開發中)。至於合併的過程中有衝突怎麼解決,我覺得對於有hg使用經驗的人來說完全不是事,這裡就不展開了。

網上參考資料太多了,有很多很好的使用手冊,這裡推薦 這個**,本文在分支這一塊的操作也參考了book/zh/ch3-2.html。不囉嗦了,git走起!

Git 的 版本管理那些事

安裝完成你得有你自己的身份,找到 git git bash 你得配置 git config global user.name your name 生成ssh,ssh t git github.com本地與github倉庫相連 git新建乙個倉庫,然後本地建乙個資料夾,git init git add...

開發中關於Git那些事 Git Rebasing

1.1 修改預設編輯器 預設使用vim編輯器,當然可以使用core.editor修改 git config global core.editor emacs1.2 修改log分頁 預設使用less,可以使用core.pager來設定為more或則其他,也可以使用空字串,關閉分頁,一次性載入所有內容 ...

remap的那些事

月14日 今天還在看啟動 看到target.c這裡。先說說target.c的職責。target.c檔案包含和目標初始化相關的 如remap設定 系統時鐘設定和儲存器加速模組設定等,以及irq和fiq的異常處理空函式。好吧,這裡 看到了remap就好好查資料把它搞清楚咯!其實我前面看過這個了,只是人上...