安裝git
在Linux上安裝Git
首先輸入git
,看看系統有沒有安裝Git:
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
像上面的命令,有很多Linux會友好地告訴你Git沒有安裝,還會告訴你如何安裝Git。
如果是其他Linux版本,可以直接通過源碼安裝。先從Git官網下載源碼,然后解壓,依次輸入:./config
,make
,sudo make install
這幾個命令安裝就好了。
在Windows上使用Git,可以從Git官網直接下載安裝程序,然后按默認選項安裝即可。
安裝完成后,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西,就說明Git安裝成功!
安裝完成后,還需要最后一步設置,在命令行輸入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
創建庫
版本庫又名倉庫,你可以簡單理解成一個目錄,這個目錄里面所有文件都可以被Git管理,每個文件修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史。所以,創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
pwd
命令用于顯示當前目錄。
?如果你使用Windows系統,為了避免遇到各種莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文。
第二步,通過git init
命令把這個目錄變成Git可以管理的倉庫:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository)。
修改兩步走
編寫一個readme.txt
文件,內容如下:
Git is a version control system.
Git is free software.
第一步,用命令git add
告訴Git,把文件添加到倉庫:
$ git add readme.txt
第二步,用命令git commit
告訴Git,把文件提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file1 file changed, 2 insertions(+)create mode 100644 readme.txt
-m
后面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。
查看狀態
修改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會告訴你,git checkout -- file
可以丟棄工作區的修改:
$ git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作區的修改全部撤銷,這里有兩種情況:
一種是readme.txt
自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt
已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。
總之,就是讓這個文件回到最近一次git commit
或git add
時的狀態。
具體修改了什么內容需要用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,可以從上面的命令輸出看到,我們在第一行添加了一個distributed
單詞。
?
知道了對readme.txt
作了什么修改后,再把它提交到倉庫,是一樣的兩步,第一步是git add
:
$ git add readme.txt
我們再運行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 e475afc] add distributed1 file changed, 1 insertion(+), 1 deletion(-)
提交后,我們再用git status
命令看看倉庫的當前狀態:
$ git status
On branch master
nothing to commit, working tree clean
Git告訴我們當前沒有需要提交的修改,而且,工作目錄是干凈(working tree clean)的。
版本
版本控制系統有命令可以告訴我們歷史記錄,在Git中,我們用git log
命令查看:
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800append GPLcommit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800add distributedcommit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800wrote a readme file
git log
命令顯示從最近到最遠的提交日志,我們可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是wrote a readme file
。
如何回退?
在Git中,用HEAD
表示當前版本,,上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,往上100個版本可以寫成HEAD~100
。
現在,我們要把當前版本append GPL
回退到上一個版本add distributed
,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
要重返未來,用git reflog
查看命令歷史,以便確定要回到未來的哪個版本。?
github SSH keys
實際情況往往是這樣,找一臺電腦充當服務器的角色,每天24小時開機,其他每個人都從這個“服務器”倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務器倉庫里,也從服務器倉庫中拉取別人的提交。
完全可以自己搭建一臺運行Git的服務器,不過現階段,只要注冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。
由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要一點設置:
第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可。
如果一切順利的話,可以在用戶主目錄里找到.ssh
目錄,里面有id_rsa
和id_rsa.pub
兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa
是私鑰,不能泄露出去,id_rsa.pub
是公鑰,可以放心地告訴任何人。
第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:
然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub
文件的內容:
為什么GitHub需要SSH Key呢?GitHub需要識別出提交確實是你推送的,而不是冒充的,而Git支持SSH協議。當然,GitHub允許你添加多個Key。假定你有若干電腦,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。
和github關聯
創建一個新的倉庫:
目前,在GitHub上的這個learngit
倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然后,把本地倉庫的內容推送到GitHub倉庫。
現在,我們根據GitHub的提示,在本地的learngit
倉庫下運行命令:
$ git remote add origin git@github.com:yourname/learngit.git
添加后,遠程庫的名字就是origin
,這是Git默認的叫法,也可以改成別的,但是origin
這個名字一看就知道是遠程庫。
下一步,就可以把本地庫的所有內容推送到遠程庫上:
$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
把本地庫的內容推送到遠程,用git push
命令,實際上是把當前分支master
推送到遠程。
由于遠程庫是空的,我們第一次推送master
分支時,加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
$ git push origin master
把本地master
分支的最新修改推送至GitHub,現在,你就擁有了真正的分布式版本庫!
clone
用命令git clone
克隆一個github庫到本地:
$ git clone git@github.com:yourname/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.
如果有多個人協作開發,那么每個人各自從遠程克隆一份就可以了。