1.?Git是分布式版本控制系統
- 集中式版本控制系統:版本庫是 集中存放在中央服務器的 ,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館。(集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在局域網內還好,帶寬夠大,速度夠快,可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,這還不得把人給憋死啊。)
- 分布式版本控制系統:根本沒有“中央服務器”, 每個人的電腦上都是一個完整的版本庫 ,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此, 分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。
2. 創建版本庫 ( creating the repository)
-
版本庫又名倉庫( repository) ,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
- 所以,創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄:
$ mkdir learngit
$ cd learngit
$ pwd
注:
pwd
命令用于顯示當前目錄。在我的Mac上,這個倉庫位于
/Users/michael/learngit
/Users/michael/learngit
如果你使用Windows系統,為了避免遇到各種莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文 。
$ git init
注意:通過
git init
命令把這個目錄變成Git可以管理的倉庫
Initialized empty Git repository
in /Users/michael/learngit/.git/
? ?
注意:瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),細心的讀者可以發現當前目錄下多了一個
.git
的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。
3. ?把文件添加到版本庫
- 注意: 所有的版本控制系統,其實只能跟蹤文本文件的改動 ,比如 TXT文件,網頁,所有的程序代碼等等, Git也不例外。 版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”。 而 圖片、視頻這些二進制文件, 雖然也能由版本控制系統管理,但 沒法跟蹤文件的變化 ,只能把二進制文件每次改動串起來,也就是只知道圖片從100KB改成了120KB,但到底改了啥,版本控制系統不知道,也沒法知道。
-
不幸的是,Microsoft的Word格式是二進制格式,因此,版本控制系統是沒法跟蹤Word文件的改動的,前面我們舉的例子只是為了演示,如果要真正使用版本控制系統,就要以純文本方式編寫文件。
因為文本是有編碼的,比如中文有常用的GBK編碼,日文有Shift_JIS編碼,如果沒有歷史遺留問題,強烈 建議使用標準的UTF-8編碼 ,所有語言使用同一種編碼, 既沒有沖突,又被所有平臺所支持 。
-
使用Windows的童鞋要特別注意 :
千萬不要使用Windows自帶的 記事本 編輯任何文本文件 。原因是Microsoft開發記事本的團隊使用了一個非常弱智的行為來保存UTF-8編碼的文件,他們自作聰明地在每個文件開頭添加了0xefbbbf(十六進制)的字符,你會遇到很多不可思議的問題,比如,網頁第一行可能會顯示一個“?”,明明正確的程序一編譯就報語法錯誤,等等,都是由記事本的弱智行為帶來的。建議你下載 Notepad++ 代替記事本,不但功能強大,而且免費!記得把Notepad++的默認編碼設置為 UTF-8 without BOM 即可(個人更喜歡utraedit)
-
言歸正傳,現在我們編寫一個
readme.txt
文件,內容如下:Git is a version control system. Git is free software.
?
? 一定要放到
learngit
目錄下(子目錄也行), 因為這是一個Git倉庫,放到其他地方Git再厲害也找不到這個文件。
第一步,用命令git add
告訴Git,把文件添加到倉庫 :$ git add readme.txt
第二步,用命令
git commit
告訴Git,把文件提交到倉庫:?
$ git commit -m " wrote a readme file "
? ? ? ? 簡單解釋一下
git commit
命令,
-m?
后面輸入的是
本次提交的說明
,可以輸入任意內容,當然最好是有意義的,
這樣你就能從歷史記錄里方 ? ? ? ? ? 便地找到改動記錄
-
為什么Git添加文件需要
add
,commit
一共兩步呢?因為commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:$ git add file1.txt $ git add file2.txt $ git add file3.txt $ git commit -m " add 3 files. "
?
4.?時光機穿梭
-
我們已經成功地添加并提交了一個readme.txt文件,現在,是時候繼續工作了,于是,我們繼續修改readme.txt文件,改成如下內容:
Git is a distributed version control system. Git is free software.
現在,運行
git status
命令看看結果: -
$ git status # On branch master # Changes not staged for commit: # (use " git add <file>... " to update what will be committed) # (use " git checkout -- <file>... " to discard changes in working directory) # # modified: readme.txt # no changes added to commit (use " git add " and/or " git commit -a " )
?
git status
命令可以讓我們時刻掌握倉庫當前的狀態,上面的命令告訴我們 ,readme.txt被修改過了,但還沒有準備提交的修改 。雖然Git告訴我們readme.txt被修改了,但如果 能看看具體修改了什么內容 ,自然是很好的。比如你休假兩周從國外回來,第一天上班時,已經記不清上次怎么修改的readme.txt,所以,需要用
git diff
這個命令看看$ git diff readme.txt diff --git a/readme.txt b/ readme.txt index 46d49bf..9247db6 100644 --- a/ readme.txt +++ b/ readme.txt @@ - 1 , 2 + 1 , 2 @@ -Git is a version control system. +Git is a distributed version control system. Git is free software.
git diff
顧名思義就是 查看difference ,顯示的格式正是Unix通用的diff格式,可以從上面的命令輸出看到,我們在第一行添加了一個“distributed”單詞。知道了對readme.txt作了什么修改后,再把它提交到倉庫就放心多了, 提交修改和提交新文件是一樣的兩步 ,第一步是
git add
:$ git add readme.txt
同樣沒有任何輸出。在執行第二步
git commit
之前,我們再運行git status
看看當前倉庫的狀態:$ git status # On branch master # Changes to be committed: # (use " git reset HEAD <file>... " to unstage) # # modified: readme.txt #
git status
告訴我們, 將要被提交的修改包括readme.txt, 下一步,就可以放心地提交了:$ git commit -m " add distributed "
輸出
[master ea34578] add distributed 1 file changed, 1 insertion(+), 1 deletion(-)
提交后,我們再用
git status
命令看看倉庫的當前狀態:$ git status
輸出?
-
# On branch master nothing to commit (working directory clean)
注:Git告訴我們當前沒有需要提交的修改,而且,工作目錄是干凈(working directory clean)的。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
