什么是版本庫呢?版本庫又名倉庫,英文名 repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被 Git 管理起來,每個文件的修改、刪除,Git 都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
所以,創(chuàng)建一個版本庫非常簡單,首先,選擇一個合適的地方,創(chuàng)建一個空目錄:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
pwd
命令用于顯示當前目錄。在我的 Mac 上,這個倉庫位于/Users/michael/learngit
。
如果你使用 Windows 系統(tǒng),為了避免遇到各種莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文。
第二步,通過git init
命令把這個目錄變成 Git 可以管理的倉庫:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬間 Git 就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),細心的讀者可以發(fā)現(xiàn)當前目錄下多了一個.git
的目錄,這個目錄是 Git 來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把 Git 倉庫給破壞了。
如果你沒有看到.git
目錄,那是因為這個目錄默認是隱藏的,用ls -ah
命令就可以看見。
http://wiki.jikexueyuan.com/project/git-tutorial/images/git-init.gif" alt="" />
也不一定必須在空目錄下創(chuàng)建 Git 倉庫,選擇一個已經(jīng)有東西的目錄也是可以的。不過,不建議你使用自己正在開發(fā)的公司項目來學習 Git,否則造成的一切后果概不負責。
首先這里再明確一下,所有的版本控制系統(tǒng),其實只能跟蹤文本文件的改動,比如 TXT 文件,網(wǎng)頁,所有的程序代碼等等,Git 也不例外。版本控制系統(tǒng)可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”。而圖片、視頻這些二進制文件,雖然也能由版本控制系統(tǒng)管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是只知道圖片從 100KB 改成了 120KB,但到底改了啥,版本控制系統(tǒng)不知道,也沒法知道。
不幸的是,Microsoft 的 Word 格式是二進制格式,因此,版本控制系統(tǒng)是沒法跟蹤 Word 文件的改動的,前面我們舉的例子只是為了演示,如果要真正使用版本控制系統(tǒng),就要以純文本方式編寫文件。
因為文本是有編碼的,比如中文有常用的 GBK 編碼,日文有 Shift_JIS 編碼,如果沒有歷史遺留問題,強烈建議使用標準的 UTF-8 編碼,所有語言使用同一種編碼,既沒有沖突,又被所有平臺所支持。
使用 Windows 的童鞋要特別注意:
千萬不要使用 Windows 自帶的記事本編輯任何文本文件。原因是 Microsoft 開發(fā)記事本的團隊使用了一個不合理的方法來保存 UTF-8 編碼的文件,他們在每個文件開頭添加了 0xefbbbf(十六進制)的字符,你會遇到很多不可思議的問題,比如,網(wǎng)頁第一行可能會顯示一個“?”,明明正確的程序一編譯就報語法錯誤,等等,都是由記事本的弱智行為帶來的。建議你下載Notepad++代替記事本,不但功能強大,而且免費!記得把 Notepad++ 的默認編碼設置為 UTF-8 without BOM 即可:
http://wiki.jikexueyuan.com/project/git-tutorial/images/git5.jpg" alt="" />
言歸正傳,現(xiàn)在我們編寫一個 readme.txt 文件,內(nèi)容如下:
Git is a version control system.
Git is free software.
一定要放到 learngit 目錄下(子目錄也行),因為這是一個 Git 倉庫,放到其他地方 Git 再厲害也找不到這個文件。
和把大象放到冰箱需要 3 步相比,把一個文件放到 Git 倉庫只需要兩步。
第一步,用命令git add
告訴 Git,把文件添加到倉庫:
$ git add readme.txt
執(zhí)行上面的命令,沒有任何顯示,這就對了,Unix 的哲學是“沒有消息就是好消息”,說明添加成功。
第二步,用命令git commit
告訴 Git,把文件提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
http://wiki.jikexueyuan.com/project/git-tutorial/images/add-and-commit.gif" alt="" />
簡單解釋一下git commit
命令,-m
后面輸入的是本次提交的說明,可以輸入任意內(nèi)容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。
嫌麻煩不想輸入-m "xxx"
行不行?確實有辦法可以這么干,但是強烈不建議你這么干,因為輸入說明對自己對別人閱讀都很重要。實在不想輸入說明的童鞋請自行 Google,我不告訴你這個參數(shù)。
git commit
命令執(zhí)行成功后會告訴你,1 個文件被改動(我們新添加的 readme.txt 文件),插入了兩行內(nèi)容(readme.txt 有兩行內(nèi)容)。
為什么 Git 添加文件需要 add,commit 一共兩步呢?因為 commit 可以一次提交很多文件,所以你可以多次 add 不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
現(xiàn)在總結(jié)一下今天學的兩點內(nèi)容:
初始化一個 Git 倉庫,使用git init
命令。
添加文件到 Git 倉庫,分兩步:
第一步,使用命令git add <file>
,注意,可反復多次使用,添加多個文件;
第二步,使用命令git commit
,完成。