首先確保系統中已經安裝了git,這裏使用的linux系統。html
列出它的選項和最經常使用的子命令。標準命令格式中,COMMAND表明的就是下面列出的子命令。linux
[root@flower1 ~]# git
[root@flower1 ~]# git --version git version 1.7.1
它用來分離一系列參數。好比下面這個:git
[root@flower1 ~]# git diff -w master origin -- tools/Makerfile
這裏對命令行的說明,僅是對git命令格式的簡單說明。web
這裏將新建一個版本庫,添加一些內容,而後管理一系列修訂版本。vim
在~/public_html目錄建立一個我的網站項目,並把它放到Git版本庫裏。編輯器
[root@flower1 ~]# mkdir public_html [root@flower1 ~]# cd public_html/ [root@flower1 public_html]# echo 'My website is alive!' > index.html
執行git init,將~/public_html轉化爲Git版本庫:工具
[root@flower1 public_html]# git init Initialized empty Git repository in /root/public_html/.git/
git init命令會建立一個隱藏目錄:至於該文件夾內部的數據表明什麼意思,後續會有說明。網站
[root@flower1 public_html]# cd .git [root@flower1 .git]# pwd /root/public_html/.git [root@flower1 .git]# ll total 32 drwxr-xr-x 2 root root 4096 Nov 29 17:47 branches -rw-r--r-- 1 root root 92 Nov 29 17:47 config -rw-r--r-- 1 root root 73 Nov 29 17:47 description -rw-r--r-- 1 root root 23 Nov 29 17:47 HEAD drwxr-xr-x 2 root root 4096 Nov 29 17:47 hooks drwxr-xr-x 2 root root 4096 Nov 29 17:47 info drwxr-xr-x 4 root root 4096 Nov 29 17:47 objects drwxr-xr-x 4 root root 4096 Nov 29 17:47 refs
除了在~/public_html目錄下新增了一個.git隱藏文件夾,整個目錄結構沒有任何變化。隱藏在.git內的版本庫將由Git維護。spa
最初,每一個Git版本庫都是空的。爲了管理內容,必須明確的把文件加入到版本庫中。命令行
這裏,將~/public_html文件夾下全部的文件都加入到版本庫中:
[root@flower1 public_html]# pwd /root/public_html [root@flower1 public_html]# git add .
固然,也能夠單個文件添加到版本庫,好比這裏只用一個index.html文件,咱們將它加入到版本庫:(其實上面的操做已經將index.html加入到版本庫中了)
[root@flower1 public_html]# git add index.html
在使用了git add 命令後,Git知道index.html這個文件是要留在版本庫中的,可是,如今它還只是暫存(staged)了這個文件,這是提交以前的中間步驟。Git有意將add和commit命令分開,是爲了不頻繁變化。
運行git status命令,顯示中間狀態的index.html:
這個命令顯示新文件index.html將在下一次提交(commit)的時候添加到版本庫裏。
因爲Git在每次提交(commit)的時候會記錄一下元數據,包括日誌消息和做出這次變動的做者,因此一條完整的commit命令以下:
[root@flower1 public_html]# git commit -m "Initial contents of public_html" --author="nextflower <2230256@qq.com>" [master (root-commit) c57b6cd] Initial contents of public_html 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 index.html
若是想在提交時經過編輯器輸入日誌消息,而且使用vim來編輯的話,能夠導入下面的環境變量:
[root@flower1 public_html]# export GIT_EDITOR=vim
如今再查看一下git status:
這意味着工做目錄中不包含任何與版本庫中不一樣的未知或者更改過的文件。
雖然能夠在每次提交時使用—author參數來讓Git識別你的身份,但若是每次都輸入不免讓人感受麻煩。
能夠經過下述命令來修改提交做者的信息:
[root@flower1 public_html]# git config user.name "nextflower" [root@flower1 public_html]# git config user.email "2230256@qq.com"
也可使用環境變量GIT_AUTHOT_NAME和GIT_AUTHOR_EMAIL來告訴Git。
這裏修改一下index.html文件,並從新提交。
[root@flower1 public_html]# cd ~/public_html/ [root@flower1 public_html]# vim index.html [root@flower1 public_html]# cat index.html <html> <body> My web site is alive! </body> </html> [root@flower1 public_html]# git commit index.html [master e36e1e0] firsr change 1 files changed, 5 insertions(+), 1 deletions(-)
這裏或許讓人感到疑惑,由於在commit以前,並無使用add命令,這是爲何呢?
由於這個文件已經添加到版本庫裏了,因此沒有必要再把這個文件告訴給索引。
事實上,當咱們在修改index.html文件時,若是使用git status命令就會發現,Git已經自動捕捉了文件變動。
git log命令會產生版本庫裏一系列單獨提交的歷史。
可使用git show + 提交碼查看特定提交的詳細信息:(若不添加提交碼,則將只顯示最近一次提交的詳細信息)
還可使用show-branch提供當前開發分支簡潔的單行摘要:
[root@flower1 public_html]# git show-branch --more=10 [master] firsr change [master^] Initial contents of public_html
使用兩個提交的全ID名而且運行git diff便可:
在刪除以前,咱們先按照上面的步驟再添加一個文件poem.html到版本庫中。
而後使用git rm命令將poem.html從版本庫中刪除。
[root@flower1 public_html]# git rm poem.html rm 'poem.html' [root@flower1 public_html]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: poem.html # [root@flower1 public_html]# git commit -m "Remove a poem" [master 1811e1e] Remove a poem 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 poem.html
和添加操做同樣,刪除操做也須要2步:git rm表示你想刪除這個文件並暫存這個變動,接着使用git commit提交了這個變動。注意觀察上面兩個命令執行後文件系統發生的變化,當執行了git rm命令後,poem.html文件已經在文件系統中被刪除了。
那麼,若是想爲版本庫裏的一個文件重命名,該如何操做呢?能夠經過git rm和git add組合命令達到這個效果。
固然,也可使用git mv實現相同的功能:
咱們能夠經過git clone命令建立一個完整的副本,或叫克隆。
這裏,咱們在用戶主目錄裏創建一個副本,並命名爲my_website。
[root@flower1 ~]# cd ~ [root@flower1 ~]# git clone public_html/ my_website Initialized empty Git repository in /root/my_website/.git/
如今public_html和my_website兩個版本庫包含相同的對象、文件和目錄,可是還有一些細微的差異,這些區別將在後續的章節進行說明。查看一下二者的區別:
和不少工具同樣,Git支持不一樣層次的配置文件。按照優先級遞減的順序,它們以下所示。
.git/config: 版本庫特定的配置設置,可用--file進行修改,擁有最高的優先級。
實際修改該文件的方式爲 git config user.name 「xxx」 ~/.gitconfig: 用戶特定的配置設置,可用--global選項修改。 /etc/gitconfig: 系統範圍的配置設置,可用--system選項進行修改。這個文件可能在其餘位置,或者徹底不存在。
這裏咱們使用下面的命令修改一下用戶的特定配置:這個命令其實修改的就是~/.gitconfig中的相關配置。
[root@flower1 my_website]# git config --global user.name "nextflowertest" [root@flower1 my_website]# git config --global user.email "test@qq.com"
若是要修改版本庫特定的名字和Email地址,只要執行下面的命令便可,就是將—global省略掉就行。它會修改~/.git/config文件。
[root@flower1 my_website]# git config user.name "nextflowertest" [root@flower1 my_website]# git config user.email "test@qq.com"
若是要移除某個設置,執行下面的命令:
[root@flower1 public_html]# git config --unset user.email
或者
[root@flower1 public_html]# git config --global --unset user.email
上面兩種方式的區別在於,前者移除的是版本庫特定的設置,後者移除的是用戶的特定設置。
在提交日誌消息時,編輯器的選擇按照如下步驟的順序來肯定:
命令格式以下:
# git config --global alias-graph \ > 'log --graph --abbrev-commit --pretty=oneline'
本節介紹了Git的基本使用方法,可是還有不少的疑問須要解答。
下一節將介紹Git的一些概念。