九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Git的深入理解與GitHub托管服務(wù)的使用


版本控制是一種記錄若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。

本地版本控制系統(tǒng)

許多人習(xí)慣用復(fù)制整個項目目錄的方式來保存不同的版本,或許還會改名加上備份時間進(jìn)行區(qū)別。這么做的唯一好處就是簡單,壞處也不少:有時候會混淆所在的工作目錄,一旦弄錯了文件數(shù)據(jù)就沒辦法撤銷恢復(fù)。為了解決這個問題,人們很久以前就開發(fā)了許多本地版本控制系統(tǒng),大多是采用某種簡單的數(shù)據(jù)庫來記錄文件的歷次更新差異。



集中化的版本控制系統(tǒng)

接下來人們又遇到一個問題,如何讓在不同系統(tǒng)上的開發(fā)者協(xié)同工作?于是,集中化的版本控制系統(tǒng)(Centralized Version Control Systems)應(yīng)運而生。這類系統(tǒng),諸如CVS、Subversion等,都有一個單一的集中管理服務(wù)器,保存所有文件的修訂版本,而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器,取出最新的文件或者提交更新。多年以來,這已成為版本控制系統(tǒng)的標(biāo)準(zhǔn)做法。



這么做帶來了很多好處,特別是相對于本地版本控制系統(tǒng)來說。現(xiàn)在,每個人都可以在一定程度上看到項目中的其他人正在做什么,管理員也可以輕松掌握每個開發(fā)者的權(quán)限,看到每個人每天的提交記錄。這樣做最大的缺點就是中央服務(wù)器的單點故障。如果宕機一小時,那么在一小時內(nèi)所有人都無法提交更新,也就無法協(xié)同工作。要是中央服務(wù)器的磁盤發(fā)生故障,碰巧沒有備份或者備份不及時,就會有丟失數(shù)據(jù)的風(fēng)險。最壞的情況是徹底丟失整個項目的所有歷史更改記錄,而被客戶端提取出來的某些快照數(shù)據(jù)除外,但是不能夠保證所有的數(shù)據(jù)都已經(jīng)有人事先完整的提取出來。

本地版本控制系統(tǒng)也存在類似問題,只要整個項目的歷史記錄被保存在單一位置,就有丟失所有歷史更新記錄的風(fēng)險。

分布式版本控制系統(tǒng)

分布式版本管理系統(tǒng)就是為了解決這個單點問題,在這類系統(tǒng)中,像Git、Mercurial、Bazaar以及Darcs等,客戶端并不只是提取最新的文件快照,而是把原始的代碼倉庫完整地鏡像下來。這么一來,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復(fù)。因為每一次的提取操作,實際上都是一次對代碼倉庫的完整備份。更進(jìn)一步,這類系統(tǒng)都可以指定和若干不同的遠(yuǎn)端代碼倉庫進(jìn)行交互。因此,你就可以在同一個項目中,分別和不同工作小組的人相互協(xié)作。你可以根據(jù)需要設(shè)定不同的協(xié)作流程。




Git與SVN等常規(guī)版本控制軟件的區(qū)別

Git 是一個快速、可擴展的分布式版本控制系統(tǒng),它具有極為豐富的命令集,對內(nèi)部系統(tǒng)提供了高級操作和完全訪問。

Git誕生于2005年,起因是因為Linux內(nèi)核開源項目使用的版本控制系統(tǒng)BitKeeper被收回,這就迫使Linux開源社區(qū)(特別是Linux的締造者Linus Torvalds)不得不吸取教訓(xùn),只有開發(fā)一套屬于自己的版本控制系統(tǒng)才不至于重蹈覆轍。他們對新系統(tǒng)制定的目標(biāo)如下:
     速度快,設(shè)計簡單,對非線性開發(fā)模式的強力支持(允許上千個并行開發(fā)的分支),完全分布式,有能力高效管理類似Linux內(nèi)核一樣的超大規(guī)模項目(速度和數(shù)量)。

經(jīng)過不斷的完善,Git始終保持著如下的特點:
     1、直接記錄快照,而非差異比較。

     Git和其他版本控制系統(tǒng)的主要差別在于,Git只關(guān)心文件數(shù)據(jù)的整體是否發(fā)生變化,而大多數(shù)其他系統(tǒng)則只關(guān)心文件內(nèi)容的具體差異。這類系統(tǒng)(CVS、Subversion等)每次記錄都有哪些文件做了更新,以及更新了哪些行的什么內(nèi)容,如下圖:

          


     Git 并不保存這些前后變化的差異數(shù)據(jù)。實際上,Git 更像是把變化的文件作快照后,記錄在一個微型的文件系統(tǒng)中。每次提交更新時,它會縱覽一遍所有文件的指紋信息并對文件作一快照,然后保存一個指向這次快照 的索引。為提高性能,若文件沒有變化,Git 不會再次保存,而只對上次保存的快照作一鏈接。Git 的工作方式就像下圖所示:

          


     這是 Git 同其他系統(tǒng)的重要區(qū)別。它完全顛覆了傳統(tǒng)版本控制的套路,并對各個環(huán)節(jié)的實現(xiàn)方式作了新的設(shè)計。Git 更像是個小型的文件系統(tǒng),但它同時還提供了許多以此為基礎(chǔ)的超強工具,而不只是一個簡單的 VCS。

     2、支持離線工作(近乎所有操作都是本地執(zhí)行),本地提交可以稍后提交到服務(wù)器上;

     3、時刻保持?jǐn)?shù)據(jù)完整性;

     4、多數(shù)操作僅添加數(shù)據(jù);

文件的三種狀態(tài)

     對于任何一個文件,在 Git 內(nèi)都只有三種狀態(tài):已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該文件已經(jīng)被安全地保存在本地數(shù)據(jù)庫 中了;已修改表示修改了某個文件,但還沒有提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。由此我們看到 Git 管理項目時,文件流轉(zhuǎn)的三個工作區(qū)域:Git 的工作目錄,暫存區(qū)域,以及本地倉庫。

          


     每個項目都有一個 Git 目錄(譯注:如果 git clone 出來的話,就是其中 .git 的目錄;如果git clone --bare 的話,新建的目錄本身就是 Git 目錄。),它是 Git 用來保存元數(shù)據(jù)和對象數(shù)據(jù)庫的地方。該目錄非常重要,每次克隆鏡像倉庫的時候,實際拷貝的就是這個目錄里面的數(shù)據(jù)。

     從項目中取出某個版本的所有文件和目錄,用以開始后續(xù)工作的叫做工作目錄。這些文件實際上都是從 Git 目錄中的壓縮對象數(shù)據(jù)庫中提取出來的,接下來就可以在工作目錄中對這些文件進(jìn)行編輯。

     所謂的暫存區(qū)域只不過是個簡單的文件,一般都放在 Git 目錄中。有時候人們會把這個文件叫做索引文件,不過標(biāo)準(zhǔn)說法還是叫暫存區(qū)域。

基本的 Git 工作流程如下:

     1. 在工作目錄中修改某些文件。 2. 對修改后的文件進(jìn)行快照,然后保存到暫存區(qū)域。 3. 提交更新,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲到 Git 目錄中。

     所以,我們可以從文件所處的位置來判斷狀態(tài):如果是 Git 目錄中保存著的特定版本文件,就屬于已提交狀態(tài);如果作了修改并已放入暫存區(qū)域,就屬于已暫存狀態(tài);如果自上次取出后,作了修改但還沒有放到暫存區(qū)域,就 是已修改狀態(tài)。

Git的使用

Git 支持許多數(shù)據(jù)傳輸協(xié)議,包括本地傳輸、 git://協(xié)議、http(s):// 或者 SSH傳輸協(xié)議 user@server:/path.git,除了HTTP協(xié)議之外,其他所有協(xié)議都要求在服務(wù)器端安裝并運行Git。

一、使用本地倉庫

     對于本地的項目管理,一些具體的操作方法可以參考這篇文章:Git基礎(chǔ) 里面詳細(xì)的講解了Git每個操作的使用方法和效果。因為本文主要目的在于演示如何利用GitHub參與開源項目,對于使用細(xì)節(jié)就不再花時間描述了,不過我認(rèn)為仔細(xì)的看看這些使用方法對于提高工作效率非常有幫助。

     使用本地倉庫,用戶只是自己一個人,所以不存在協(xié)同工作的問題,不管怎么玩兒,一般不會出問題。使用遠(yuǎn)程倉庫,情況就會復(fù)雜、有趣的多。

二、使用遠(yuǎn)程倉庫

     要參與任何一個 Git 項目的協(xié)作,必須要了解該如何管理遠(yuǎn)程倉庫。遠(yuǎn)程倉庫是指托管在網(wǎng)絡(luò)上的項目倉庫,可能會有好多個,其中有些你只能讀,另外有些可以寫。同他人協(xié)作開發(fā)某 個項目時,需要管理這些遠(yuǎn)程倉庫,以便推送或拉取數(shù)據(jù),分享各自的工作進(jìn)展。管理遠(yuǎn)程倉庫的工作,包括添加遠(yuǎn)程庫,移除廢棄的遠(yuǎn)程庫,管理各式遠(yuǎn)程庫分 支,定義是否跟蹤這些分支,等等。

     以現(xiàn)在比較流行的GitHub為例,如果我在上面創(chuàng)建了一個項目,實際上相當(dāng)于使用 git init 新建了一個服務(wù)器端的倉庫。如果我想在本地進(jìn)行開發(fā),那么我就需要 git clone 到我的本地。做了一些開發(fā)之后,我可以 git push 將本地的修改推送到服務(wù)器倉庫中。隨著項目發(fā)展,有其他人想要參與到這個項目中來,他可以在GitHub上Fork我這個項目,這樣他對這個項目才有寫權(quán)限,而且可以將他的工作保存到GitHub的服務(wù)器上。如果他希望將自己的工作提交給我,首先他需要在本地開發(fā)環(huán)境中添加我的遠(yuǎn)程倉庫 git remote add。然后 git push remotename master 發(fā)起推送的請求,如果我接受了,他的工作就可以合并到主干中了。因為我們此時是并行開發(fā),如果他想看我的工作,可以采用 git pull remotename 的方式將我所做的修改拉取到本地,非常的方便。

     上面這段話,描述了我們在使用遠(yuǎn)程倉庫以及與其他人協(xié)作過程中的大體流程,需要用到的一些遠(yuǎn)程倉庫的操作如下:

     1、查看當(dāng)前配置的遠(yuǎn)程倉庫

     可以使用 git remote -v 來查看當(dāng)前項目中都添加了哪些遠(yuǎn)程倉庫
     

     其中Origin一般是自己在服務(wù)器上的遠(yuǎn)程倉庫,其他的為他人的遠(yuǎn)程倉庫。

     2、添加新的遠(yuǎn)程倉庫

     要添加一個新的遠(yuǎn)程倉庫,可以指定一個簡單的名字,以便將來引用,運行 git remote add [shortname] [url]

     git remote add pb git://github.com/paulboone/ticgit.git

     3、抓取遠(yuǎn)程倉庫的信息

     git fetch [remote-name]

     此命令會到遠(yuǎn)程倉庫中拉取所有你本地倉庫中還沒有的數(shù)據(jù)。運行完成后,你就可以在本地訪問該遠(yuǎn)程倉庫中的所有分支,將其中某個分支合并到本地,或者只是取出某個分支,一探究竟。如果是克隆了一個倉庫,此命令會自動將遠(yuǎn)程倉庫歸于 origin 名下。所以,git fetch origin 會抓取從你上次克隆以來別人上傳到此遠(yuǎn)程倉庫中的所有更新(或是上次 fetch 以來別人提交的更新)。有一點很重要,需要記住,fetch 命令只是將遠(yuǎn)端的數(shù)據(jù)拉到本地倉庫,并不自動合并到當(dāng)前工作分支,只有當(dāng)你確實準(zhǔn)備好了,才能手工合并。

     4、 從遠(yuǎn)程倉庫抓取信息并合并

     git pull [remote-name]

     可以使用 git pull 命令自動抓取數(shù)據(jù)下來,然后將遠(yuǎn)端分支自動合并到本地倉庫中當(dāng)前分支。在日常工作中我們經(jīng)常這么用,既快且好。實際上,默認(rèn)情況下git clone 命令本質(zhì)上就是自動創(chuàng)建了本地的 master 分支用于跟蹤遠(yuǎn)程倉庫中的 master 分支(假設(shè)遠(yuǎn)程倉庫確實有 master 分支)。所以一般我們運行g(shù)it pull,目的都是要從原始克隆的遠(yuǎn)端倉庫中抓取數(shù)據(jù)后,合并到工作目錄中的當(dāng)前分支。

     5、推送數(shù)據(jù)到遠(yuǎn)程倉庫

     git push [remote-name] [branch-name]

     項目進(jìn)行到一個階段,要同別人分享目前的成果,可以將本地倉庫中的數(shù)據(jù)推送到遠(yuǎn)程倉庫。實現(xiàn)這個任務(wù)的命令很簡單: git push [remote-name] [branch-name]。如果要把本地的 master 分支推送到origin 服務(wù)器上(再次說明下,克隆操作會自動使用默認(rèn)的 master 和 origin 名字),可以運行下面的命令:

     git push origin master

     只有在所克隆的服務(wù)器上有寫權(quán)限,或者同一時刻沒有其他人在推數(shù)據(jù),這條命令才會如期完成任務(wù)。如果在你推數(shù)據(jù)前,已經(jīng)有其他人推送了若干更新,那 你的推送操作就會被駁回。你必須先把他們的更新抓取到本地,合并到自己的項目中,然后才可以再次推送。

     6、查看遠(yuǎn)程倉庫信息

     git remote show [remote-name]

     7、遠(yuǎn)程倉庫的刪除和重命名

     git remote rename [old name] [new name]

     git remote rm [remote-name]

Git與GitHub

GitHub是一個利用Git提供免費的代碼托管服務(wù)的網(wǎng)站(類似的網(wǎng)站還有老牌的SourceForge),很多著名的項目都托管在上面。

要想在GitHub上參與開源項目,根據(jù)Git的使用方法,有兩種途徑可以實現(xiàn)。

第一種是項目的創(chuàng)建人將你添加到項目的合作貢獻(xiàn)者列表中,這樣你就可以直接向這個項目推送代碼。
第二種是Fork一份代碼到自己的空間下,這樣的一份代碼自己具有推送的權(quán)限。如果開發(fā)的進(jìn)展很好,項目的創(chuàng)建者可以將Fork的這些項目添加為Remote倉庫,在他認(rèn)為合適的時候?qū)⒋afetch到自己的倉庫中進(jìn)行合并,也可以由我們發(fā)起請求,請創(chuàng)始人將代碼合并。GitHub上提倡的就是使用這種方式進(jìn)行開發(fā)合作。

下面以PHP-Daemon這個項目為例,演示一下如何參與到GitHub中托管的開源項目中。

0、安裝配置Git

1、首先注冊一個GitHub的賬號。

2、選擇一個自己喜歡的項目,進(jìn)行Fork。

3、建立本地的資源池(Local Repo)。


     可以使用下面的命令將項目復(fù)制到本地,復(fù)制的地址可以是SSH的也可以是HTTP形式的,具體的地址在項目頁面中可以看到。

     git clone git@github.com:cocowool/PHP-Daemon.git

4、配置源項目地址。

     項目克隆完成后,默認(rèn)有一個名為“origin”的遠(yuǎn)端指向了我在GitHub上的項目,而并非原始的項目。為了能夠及時獲取原始項目上的更新,我們需要再增加一個遠(yuǎn)端,命名為“upstream”。

     git remote add upstream https://github.com/shaneharter/PHP-Daemon.git
     git fetch upstream

     


5、接下來可以做的事情。

     推送提交 Push Commits

一些小Tips 
Mac OS X Lion 中自帶了Git的命令行和圖形化界面,雖然他的圖形化界面簡陋到吐血。
Mac下還有一個gitk,提供了圖形化工具來進(jìn)行歷史的查閱。它是用 Tcl/Tk 寫成的,基本上相當(dāng)于 git log 命令的可視化版本,凡是git log 可以用的選項也都能用在 gitk 上。

在項目目錄下輸入 /Developer/usr/bin/gitk 就可以看到。

 


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
推薦!手把手教你使用Git | 互聯(lián)網(wǎng)的那點事
Git學(xué)習(xí)筆記
git實操常用命令匯總-小馬哥
一聽就懂的Git詳解
git命令
Git 的全面解讀_github 項目前面有個鎖_Mr
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服