Git和SVN區(qū)別
Git是分布式的喂击,SVN是集成式的
這個是Git和SVN最大的區(qū)別庵楷。
SVN:
·SVN的版本管理有一個唯一的URL翎承,每一個用戶都是從這個地址獲取代碼和數(shù)據(jù)蛉鹿,
·同樣提交的的話也是對這個唯一的版本庫進行更改
·沒有網(wǎng)絡的話取劫,就沒有辦法進行提交文件,無法還原忌卤,查看歷史記錄差異
·提交需要授權扫夜,方便進行權限管理
Git:
·每個clone版本庫都是平等的〕刍玻可以從任何一個版本庫來克隆屬于自己的版本庫笤闯,同時自己的庫也可以當作源來提供給他人。
·可以脫離網(wǎng)絡時正常使用版本庫棍厂,只需要有網(wǎng)時推送PUSH一下颗味,和服務器保持同步
·Git創(chuàng)建功能分支方便
在我剛進公司時我們項目使用的是SVN進行版本管理,后期進行替換到了Git牺弹。從我的角度來看引入git最主要的優(yōu)勢就是更加方便的進行功能分支管理浦马,和斷網(wǎng)不影響正常的功能使用。在我們的后期開發(fā)中需要進行大量的創(chuàng)建feature功能分支张漂,切換分支的操作晶默,因為Git分支是指針指向某次提交,而SVN分支是拷貝目錄磺陡,所以git創(chuàng)建和切換的成本很低漠畜。
Git 的常用操作
日常使用圆丹,我通常是可視化界面和命令行方式結合使用
可視化操作通過Sourcetree來操作
其實日常的一些提交 commit,推送 push廉丽,拉取 pull 通過sourcetree都可以進行很方便的操作正压,但是一些操作還是命令行更方便焦履,如:squash merge,rebase 郑临,cheery-pick 等等
目前我們項目定的規(guī)范是厢洞,在日常拉取時使用rebase來代替合并典奉,在進行不同分支間的合并時也盡量使用squash卫玖;
主要目的時為了跟清晰的版本線管理,因為假瞬,直接使用合并的話可能會導致創(chuàng)建一些自動提交笨触,讓版本線變得復雜,不容易回溯問題芦劣。
這個是我們期望的結果虚吟,一條線拉下來
這個是不希望的偏塞,會拉出很多其他分支灸叼,不方便查看
一般來說,一個功能分支在進行一段時間的開發(fā)之后古今,我們會同步一下dev主干上的內(nèi)容捉腥,防止版本差異過大導致后期合并時沖突過多抵碟。我們會先從dev拉取一個最新的分支命名為對應的功能分支名如:feature_1.x,再把對應的分支功能合并到這個分支上,通過升級的方式來進行分支同步呈队。
關于merge和rebase的區(qū)別具體的可以看看這個:
https://blog.csdn.net/hudashi/article/details/7664631
這里我只簡單的貼兩張圖
merge 會產(chǎn)生一個 merge commit ,在分支線的表現(xiàn)看起來就是“分叉了”
而使用 rebase 就可以避免這個問題
git --help //列出常用的git命令
git branch //輸出本地分支
git brach 分支名 //創(chuàng)建新的分支
git checkout 分支名 //切換分支
git checkout -b mybranch //創(chuàng)建并切換分支
git merge --squash 分支名 //把分支上的提交合并成一次提交唱歧,變動存到本地分支,所以還需要手動提
交一次颅崩;之前的提交日志記錄沒了,會被這個新的提交覆蓋掉
git cherry-pick <HashA> <HashB> //將A和B提交應用到當前分支
git cherry-pick A..B //左開右閉
git cherry-pick A^..B //包括A