Git學習筆記(一),Git學習筆記(

來源:互聯網
上載者:User

Git學習筆記(一),Git學習筆記(

版本控制系統簡介

版本控制系統是一種記錄若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。該系統不僅可以度軟體原始碼的文字檔進資料列版本設定管理,也可以對任何其他類型的檔案進資料列版本設定。有了版本控制系統,我們便可以將某個檔案回溯到之前的狀態,甚至將整個項目都回溯到過去的某個時間點的狀態;我們可以比較檔案的變化細節,查出最後是誰修改了哪個地方,從而導致出現怪異的問題,又是誰在何時報告了某個功能缺陷等等。

版本控制系統的種類

1.      集中化版本控制系統CVCS(Centralized Version Control Systems): 如CVS, Subversion, Perforce等。這類系統有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人都通過用戶端串連到這台伺服器,取出最新的檔案或者提交更新。

優點:每個人都可以在一定程度上看到項目中其他人正在做些什麼,而管理員也可以輕鬆掌控每個開發人員的許可權,並且管理一個CVCS遠比在各個用戶端上維護本機資料庫容易。

缺點: 中央伺服器的單點故障。如果中央伺服器出現故障,如中央伺服器磁碟發生故障、死機等,都可能導致無法提交更新和資料丟失等問題。

2.      分布式版本控制系統DVCS(Distributed Version Control System): 如Git, Mercuril, Bazaar, Darcs等。用戶端不只是提取最新版本的檔案快照,而是把原始的代碼倉庫完整地鏡像下來。這樣以來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個鏡像出來的本地倉庫恢複。因為每一次的提取操作,實際上都是一次對代碼倉庫的完整備份。

Git簡介

Git是由Linux鼻祖Linus Torvalds開發的,用於管理Linux的核心代碼,並具有速度飛快、設計簡單、對非線性開發模式強力支援(允許上千個並行開發的分支)、完全分布式、有能力高效管理類似Linux核心一樣的超大規模的項目。

Git特性

1.      直接記錄快照,而非差異比較: Git只關心檔案資料的整體是否發生變化,而大多數其他系統只關心檔案內容的具體差異,這類系統(CVS, Subversion, Perforce, Bazaar等)每次記錄哪些檔案做了哪些更新。而Git並不儲存這些前後變化的資料差異,而是把變化的檔案作快照後,記錄在一個微型的檔案系統中。每次提交更新時,它會縱讓覽以便所有檔案的指紋資訊並對檔案作以快照,然後儲存一個指向這次快照的索引。為提高效能,若檔案沒有變化,Git不會再次儲存,而只對上次儲存的快照作一連結。Git工作方式如下:

                                                                                     

   svn工作方式如下:

                                                              

2.      近乎所有操作都是本地執行: Git的絕大多數操作都只需要訪問本地檔案和資源,不用連網。因為Git在本地磁碟

上就儲存這所有當前項目的曆史更新,所以處理起來速度飛快。用CVCS的話,沒有網路或者斷開VPN便無法做和任何事。但用Git的話,沒有網路時可以頻繁地提交,到有網路時再上傳到遠程倉庫。

  3.時刻保持資料完整性: 在儲存到 Git 之前,所有資料都要進行內容的校正和(checksum)計算,並將此結果作為

資料的唯一標識和索引。換句話說,不可能在你修改了檔案或目錄之後,Git 一無所知。這項特性作為 Git 的設計哲學,建在整體架構的最底層。所以如果檔案在傳輸時變得不完整,或者磁碟損壞導致檔案資料缺失,Git 都能立即察覺。

4. 多數操作僅添加資料: 常用的Git操作大多僅僅是把資料添加到資料庫中。因為任何一種無法復原的操作,比如刪除資料,都會使回退或重現曆史版本變得困難重重。在別的VCS中,若還未提交更新,就有可能丟失或者混淆一些修改的內容,但在Git裡,一旦提交快照後就完全不用擔心遺失資料,特別是養成定期推送到其他倉庫的習慣的話。

基本的Git工作流程

1.      在工作目錄中修改某些檔案

2.      對修改後的檔案進行快照,然後儲存到暫存地區

3.      提交更新,將儲存在暫存地區的檔案快照永久轉儲到Git目錄中

擷取項目的Git倉庫的兩種方法

1.      在現存的目錄下,通過匯入所有檔案來建立新的Git倉庫。即進入到項目所在的目錄,執行$git init語句。初始化後,在目前的目錄下會出現一個名為.git的目錄,所有Git需要的資料和資源都存在這個目錄中。不過目前,僅僅是按照既有的結構架構初始化了裡邊所有的檔案和目錄,但還沒有開始跟蹤管理項目中的任何一個檔案。當用git add命令add項目中的檔案資料時,Git便開始對這些檔案資料進行跟蹤管理。

2.       從遠程伺服器現有倉庫中複製,使用的命令格式為git clone<url>,如: $git clonegit://github.com/schacon/grit.git。這便會目前的目錄下建立一個名為“grit”的目錄,其中包含一個.git的目錄,用於儲存下載下來的所有版本記錄,然後從中取出最新版本的檔案拷貝。同時,gerit目錄下還包含該項目中的所有檔案。需要注意的是,剛從遠程伺服器中clone出代碼倉庫時,git處於本地master分支上,而該本地master分支上是沒有資料的,要獲得資料(遠程代碼倉庫中的資料),需要切換到遠程代碼倉庫中的分支上;或者,將遠程代碼倉庫上的分支合并到本地master分支上,這樣以來,本地master分支便有了項目的所有檔案資料。如果希望在複製的時候,自己要定義建立的項目的目錄名稱,可以在clone命令後面指定新的名字,如:$git clone git://github.com/schacon/grit.git MyGrit。    

忽略某些檔案

如果不希望某些檔案總出現在未跟蹤的檔案清單中,如自動產生的記錄檔、編譯過程中建立的臨時檔案等,我們可以將這些檔案不納入Git的管理中。這可通過定義一個名為.gitignore的檔案,檔案中列出要忽略的檔案模式。檔案愛你.gitignore的格式規範如下:

● 所有空行或者以注釋符號#開頭的行都會被Git忽略。

    ● 可以使用標準的glob模式比對。*匹配模式最後跟反斜線(/)說明要忽略的是目錄。*要忽略指定模式以外的檔案或目錄,可以在模式前加上驚嘆號(!)取反。

例如:

    # 此為注釋 – 將被 Git 忽略

*.a         # 忽略所有 .a 結尾的檔案

!lib.a       # 但 lib.a 除外

/TODO     # 僅僅忽略項目根目錄下的 TODO 檔案,不包括 subdir/TODO

build/      # 忽略 build/ 目錄下的所有檔案

doc/*.txt    # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

gitdiff簡介

  git diff用於查看已暫存和未暫存的更新。不僅能列出哪些檔案被修改過,還能列出當前做的哪些更新還沒有暫存,哪些更新已經暫存起來準備好了下次提交,同時還會以檔案補丁的格式顯示具體添加和刪除的行。&git diff比較工作目錄中當前檔案和暫存地區快照之間的差異,&git diff –cached 或 $git diff –staged比較已經暫存起來的檔案和上次提交時的快照之間的差異。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.