免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
為什么選擇GIT--GIT與其他SCM工具的比較
我會(huì)做這個(gè)網(wǎng)站是因?yàn)槲一撕芏鄷r(shí)間在替 Gitsters 辯護(hù),對(duì)抗那些狂熱者(fanboyism),從眾者 (badwagonism) 還有 koolaid-thirst。這裡要說(shuō)明的就是為什麼大家都要從 X 換成Git,而為什麼你也應(yīng)該這樣做的原因。直接點(diǎn)擊任何一個(gè)原因來(lái)展開(kāi)查看。

使 Git 從幾乎所有其他 SCM 中脫穎而出,最受矚目的特色,恐怕非它的分支模型莫屬。它完全不同於我在此一起比較的其他模型,大部分它們推薦的最佳分支方法僅僅只是複製倉(cāng)儲(chǔ) (repository) 到新的目錄而已。
Git 可不這麼做。 Git讓你可以擁有多個(gè)本地的分支,它們可能是完全獨(dú)立的,而且建立、合併和刪除這些開(kāi)發(fā)的支線只需要幾秒鐘的時(shí)間。
這表示你可以這樣做:
  • 建立一個(gè)分支來(lái)試試新點(diǎn)子,提交 (commit) 個(gè)幾次然後切回你原本的分支,加上一個(gè) patch 然後再切回剛剛實(shí)驗(yàn)用的分支,把它合併進(jìn)來(lái)。
  • 有一個(gè)分支只用來(lái)放要釋出的版本,另一個(gè)用來(lái)合併開(kāi)發(fā)中的部份供測(cè)試,其他幾個(gè)小分支用來(lái)放每天的開(kāi)發(fā)工作。
  • 替每一個(gè)你正在實(shí)做的新功能建立新的分支,然後你就可以平順的在它們之中切換,最後刪除掉每一個(gè)新功能已經(jīng)合併回主線的分支。
  • 建立一個(gè)新的分支做實(shí)驗(yàn),結(jié)果發(fā)現(xiàn)這樣行不通就刪掉這個(gè)分支;放棄一個(gè)分支,甚至沒(méi)有任何人知道它曾經(jīng)存在 (同時(shí)你還可以把其他的分支公佈出去)
最重要的是,當(dāng)你要發(fā)布到一個(gè)遠(yuǎn)端的倉(cāng)儲(chǔ),你不需要把你所有的分支都推出去。你可以只分享你的分支的其中一個(gè)而不是全部。這讓大家可以嘗試新的點(diǎn)子而不需要擔(dān)心要計(jì)劃要如何、何時(shí)合併或與其他人分享。
你在其他系統(tǒng)上可以找到方法做同樣的事,但是會(huì)比較困難且容易出錯(cuò)。 Git讓這個(gè)過(guò)程變得非常簡(jiǎn)單,而且當(dāng)開(kāi)發(fā)人員開(kāi)始學(xué)習(xí),它常常會(huì)改變他們工作的方法。

svn perforce

這基本上對(duì)所有分散式 SCM 來(lái)說(shuō)都是一樣的,但是在我的經(jīng)驗(yàn)中 Git 把這個(gè)特性發(fā)揮的更好。 除了'fetch', 'pull' 和 'push' 這些命令外,幾乎沒(méi)有其他命令會(huì)需要硬碟之外的東西。
這不只讓大部分操作變得比你可能習(xí)慣的還要快得多,它還讓你可以離線工作。這聽(tīng)起來(lái)也許沒(méi)有什麼,但是我總是驚訝於我有多麼常離線工作。當(dāng)你在飛機(jī)上或火車(chē)上,你還可以建立分支、合併和提交工作、瀏覽專(zhuān)案的歷史,這是多麼的有生產(chǎn)力。
就算是用 Mercurial,一些常用的指令如 'incoming' 和 'outgoing'也需要連線伺服器,而用 Git 你可以在離線前 'fetch'伺服器上所有的資料,然後比較、合併和查看紀(jì)錄,這些資料原本是在伺服器上還沒(méi)有在你的本分支中的。
這表示你可以很容易擁有不只你自己的分支的副本,還有其他任何和你一起工作的人的分支都可以存在你的 Git倉(cāng)儲(chǔ)中而不打亂你原有的東西。

Git 很快。大家都這麼說(shuō),甚至那些其他系統(tǒng)的死忠支持者也都會(huì)給予 Git 這個(gè)評(píng)價(jià)。 使用Git,所有的操作都是在本地端的特性讓它比 SVN 與 Perforce 跑得快許多,它們兩個(gè)都需要網(wǎng)路連線才能完成大部分操作。然而,就算是與其他也是在本地端操作的 DSCM 比較,Git 還是快非常多。
一部分的原因可能是因?yàn)樗墙?lái)用在 Linux 核心上的,這表示它從一開(kāi)始就必須有效率的處理非常大的倉(cāng)儲(chǔ)。此外,因?yàn)?Git 是用 C 寫(xiě)的,減少了使用其他高階語(yǔ)言在執(zhí)行期的開(kāi)銷(xiāo)。 另外一個(gè) Git這麼快地原因是因?yàn)樗闹饕_(kāi)發(fā)者們將這個(gè)列為設(shè)計(jì)的目標(biāo)。
底下是一些我測(cè)試的數(shù)據(jù),使用 Django 的原始碼倉(cāng)儲(chǔ)與三種不同的 SCM: Git, Mercurial和 Bazaar。 我也用 SVN 測(cè)試了一些同樣的項(xiàng)目,不過(guò)相信我,它慢更多 — 基本上是 Bazaar 的數(shù)字再加上網(wǎng)路的延遲...
 
 
 
 
 
 
測(cè)試的結(jié)果是所有操作,除了加新檔案之外都是 Git 最快。 (還有大量的提交操作,Hg基本上一樣快,可是我測(cè)試的提交量是如此之大,你平常不太可能有同樣的的量 — 正常的提交操作在 Git 快多了。)
 GitHgBzr
Init 0.024s 0.059s 0.600s
Add 8.535s 0.368s 2.381s
Status 0.451s 1.946s 14.744s
Diff 0.543s 2.189s 14.248s
Tag 0.056s 1.201s 1.892s
Log 0.711s 2.650s 9.055s
Commit (Large) 12.480s 12.500s 23.002s
Commit (Small) 0.086s 0.517s 1.139s
Branch (Cold) 1.161s 94.681s 82.249s
Branch (Hot) 0.070s 12.300s 39.411s
Cold 和 Hot 分支數(shù)字是我第一次和第二次分支一個(gè)倉(cāng)儲(chǔ) — 第二次分支的數(shù)據(jù)有使用磁碟快取。
要特別注意的是雖然 'add' 操作的速度慢很多,但這是在大量的檔案 — 超過(guò) 2000 個(gè) —上進(jìn)行新增操作 。 對(duì)於大部分人日常使用來(lái)說(shuō),在任何系統(tǒng)上新增操作都只會(huì)用到幾分之一秒而已。 其他測(cè)試到的操作 (除了大量提交...大概)應(yīng)該與你日常用到的差不多。
這些數(shù)字不會(huì)很難重現(xiàn),只要用不同的系統(tǒng) clone 一份 Django 計(jì)劃然後試試這些指令就可以了。
  • git clone git://github.com/brosner/django.git dj-git
  • hg clone http://hg.dpaste.com/django/trunk dj-hg
  • bzr branch lp:django dj-bzr
  • svn checkout http://code.djangoproject.com/svn/django/trunk dj-svn
Git 真的很懂得怎麼節(jié)省磁碟空間。 你的 Git 目錄只會(huì) (一般來(lái)說(shuō)) 比一個(gè) SVN checkout大一點(diǎn)點(diǎn) — 一些情況下甚至更小 (顯然 .svn 目錄裡面有很多東西可以丟掉)。
以下數(shù)據(jù)是用不同系統(tǒng)使用同樣的歷史紀(jì)錄點(diǎn)取出 Django 之後得到。
 GitHgBzrBzr*SVN
Repo Alone 24M 34M 45M 89M  
Entire Directory 43M 53M 64M 108M 61M
* 第二個(gè) Bzr 數(shù)字是我執(zhí)行 'bzr pack'後得到,我原本以為會(huì)讓它更小,結(jié)果反而讓它變大許多...。
hg bzr svn perforce

和其他系統(tǒng)不一樣,Git 有它稱(chēng)為 "staging area" 或 "index" 的東西。這是一個(gè)中間地帶讓你可以在提交前設(shè)定你想要提交什麼。
Staging area 最酷的地方,讓 Git 遠(yuǎn)遠(yuǎn)拋開(kāi)其他工具的,就是你可以輕易的 在工作告一段落後stage 一些你的檔案,然後提交上去而不需要提交所有修改過(guò)的檔案,或是必須在命令列上列出所有想要提交的檔案。
這還允許你只 stage 修改過(guò)的檔案的一部分。想像有一天你對(duì)一個(gè)檔案做了兩項(xiàng)毫不相關(guān)的修改,然後你發(fā)現(xiàn)忘了先提交其中一個(gè)。 現(xiàn)在你可以只 stage 你現(xiàn)在要提交的部份,然後在 stage剩下的改變給下一次提交。 這個(gè)功能可擴(kuò)大應(yīng)用到任何你對(duì)檔案的改變。
當(dāng)然了,Git 也可以很簡(jiǎn)單的略過(guò)這些特性。 如果你不想要控制這麼多 — 只要加上 '-a' 到你的commit 命令就可以一次把所有的修改都丟到 staging area 去。
svn perforce

任何分散式 SCM,當(dāng)然包括 Git,最酷的功能之一就是它是分散式的。 這表示你不是只 "checkout"目前最新版的原始碼,而是 "clone" 整個(gè)倉(cāng)儲(chǔ)。
這表示甚至你是使用中央集中式的工作流程,每一位使用者都有會(huì)一份主伺服器的備份,每一份都可以在主伺服器當(dāng)機(jī)或損壞時(shí)推上去取代主伺服器。 基本上使用 Git 不會(huì)因?yàn)檫z失單一的點(diǎn)而造成災(zāi)難,除非就只有那一個(gè)點(diǎn)。
而且這不會(huì)使得操作變慢太多。平均來(lái)說(shuō),一次 SVN 的 checkout 只比其他 DSCM 快一點(diǎn)。當(dāng)然在我測(cè)試過(guò)的 DSCM 中,Git 是最快的。
Git 1m 59s
Hg 2m 24s
Bzr 5m 11s
SVN 1m 4s
svn perforce

其中一個(gè) Git令人驚訝的事情就是因?yàn)樗姆稚⑹皆O(shè)計(jì)以及超級(jí)分支系統(tǒng),你可以輕易的實(shí)做出幾乎任何你想得到的工作流程。

Subversion 式的工作流程

這是一種很常見(jiàn)的 Git工作流程,特別是那些從集中管理式系統(tǒng)轉(zhuǎn)換過(guò)來(lái)的人會(huì)使用的,是一種集中管理式的工作流程。 如果在你最後一次 fetch 後有人發(fā)布過(guò)改變,Git不會(huì)允許你跟著發(fā)布,所以使用這種集中式的模型,所有的開(kāi)發(fā)人員都發(fā)布到同一個(gè)伺服器也可以工作的很好。

整合管理員工作流程

另外一種常見(jiàn)的 Git 工作流程就是有一個(gè)整合管理員 — 一個(gè)負(fù)責(zé)提交到 'blessed'倉(cāng)儲(chǔ)的人,然後其他數(shù)位開(kāi)發(fā)人員從這個(gè)倉(cāng)儲(chǔ)複製,發(fā)布到他們自己的獨(dú)立倉(cāng)儲(chǔ)去,然後要求整合者 pull 他們的修改。 這是在開(kāi)放原始碼界或是GitHub 倉(cāng)儲(chǔ)上常見(jiàn)的開(kāi)發(fā)模型。

司令官與副手的工作流程

對(duì)於一些更複雜的專(zhuān)案,你可以讓你的開(kāi)發(fā)人員們使用類(lèi)似於 Linux核心的開(kāi)發(fā)流程,開(kāi)發(fā)人員們各自負(fù)責(zé)專(zhuān)案中不同的子系統(tǒng) (副手) 然後合併所有關(guān)於此子系統(tǒng)的改變。另外一位整合者 (司令官) 只可以從他的副手手上pull 改變,然後發(fā)布到 'blessed' 倉(cāng)儲(chǔ)讓所有人都可以複製回去。

在一次的,Git 是完全非常有彈性的,所以你可以混合和取用適合你的工作流程。
hg bzr svn perforce

這由我來(lái)說(shuō)可能有點(diǎn)偏頗,因?yàn)槲姨?nbsp;GitHub 工作,但是我還是決定要寫(xiě)這一部份,因?yàn)楹芏嗳苏f(shuō)他們是因?yàn)?GitHub而選擇 Git。
GitHub 是很多人使用 Git 的原因之一,因?yàn)樗袷且粋€(gè)社交網(wǎng)路而不僅僅是簡(jiǎn)單的 hosting服務(wù)。 人們找到其他開(kāi)發(fā)人員或是專(zhuān)案,和他們想要做的事類(lèi)似,因此可以輕易的分支然後貢獻(xiàn),以 Git 和各種專(zhuān)案為中心創(chuàng)造出一個(gè)非?;钴S的社群。
網(wǎng)路上還有其他類(lèi)似的服務(wù),有 Git 的也有其他 SCM的,但是很少是使用者導(dǎo)向或社交導(dǎo)向的,沒(méi)有一個(gè)其他服務(wù)有類(lèi)似的用戶(hù)群。 這個(gè) GitHub 的社交觀點(diǎn)是它的殺手級(jí)應(yīng)用,合併以上的特色使得使用Git 與 GitHub 工作變成快速開(kāi)發(fā)開(kāi)放原始碼專(zhuān)案的極佳組合。
這樣的社群不是其他 SCM 所擁有的。
perforce

這本來(lái)不是真的 — 早期 Git 不是一個(gè)真正的SCM,比較像是一組工具讓你可以用分散式的觀點(diǎn)做出有版本控制的檔案系統(tǒng)。 但是現(xiàn)在,Git 的命令集以及學(xué)習(xí)曲線已經(jīng)變得和其他 SCM類(lèi)似,甚至比一些更好。
不特別去做研究的話(huà)很難證明這一點(diǎn),我在這僅顯示出 Mercurial 與 Git 的預(yù)設(shè) 'help'菜單之間的差異。 我把兩個(gè)系統(tǒng)間相同 (或是近似) 的命令做了高亮顯示。 (在 Hg 中,如果你輸入 'hg help',你會(huì)得到一個(gè) 40多個(gè)指令的清單。)

Mercurial Help

add        add the specified files ...            annotate   show changeset informati...            clone      make a copy of an existi...            commit     commit the specified fil...            diff       diff repository (or sele...            export     dump the header and diff...            init       create a new repository ...            log        show revision history of...            merge      merge working directory ...            parents    show the parents of the ...            pull       pull changes from the sp...            push       push changes to the spec...            remove     remove the specified fil...            serve      export the repository vi...            status     show changed files in th...            update     update working directory            

Git Help

add        Add file contents to the index            bisect     Find the change that introduce...            branch     List, create, or delete branches            checkout   Checkout a branch or paths to ...            clone      Clone a repository into a new ...            commit     Record changes to the repository            diff       Show changes between commits, ...            fetch      Download objects and refs from...            grep       Print lines matching a pattern            init       Create an empty git repository            log        Show commit logs            merge      Join two or more development h...            mv         Move or rename a file, a direc...            pull       Fetch from and merge with anot...            push       Update remote refs along with ...            rebase     Forward-port local commits to ...            reset      Reset current HEAD to the spec...            rm         Remove files from the working ...            show       Show various types of objects            status     Show the working tree status            tag        Create, list, delete or verify...            
在 Git 1.6 之前,所有的 Git 命令都放在執(zhí)行檔路徑下,常使一些人的感到迷惑。 現(xiàn)在雖然 Git仍然認(rèn)識(shí)這些指令,但在執(zhí)行檔路徑下的命令只剩下 'git' 一個(gè)。 如果你仔細(xì)比較 Mercurial 和 Git 會(huì)發(fā)現(xiàn),Git 和Mercurial 有幾乎一樣的指令集和說(shuō)明系統(tǒng) — 以初學(xué)者的 UI 角度來(lái)說(shuō)兩者之間幾乎沒(méi)有差別?,F(xiàn)在已經(jīng)很難說(shuō) Mercurial 或Bzr 比 Git 容易學(xué)習(xí)了。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Redmine 2.4.5與VisualSVN Server的整合
我用過(guò)的源碼管理工具們(SCM) | 息田網(wǎng)站|CodePiao團(tuán)隊(duì)博客
目前國(guó)內(nèi)外常見(jiàn)的10種配置管理(SCM)工具一覽
Git詳解之八:Git與其他系統(tǒng)
Linux 的版本控制
Clearcase, SVN, Git之我見(jiàn)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服