這篇文章是我學習git之后整理的思路,可大致快速聊解到git的基本使用,如想更加全面是學習到git,筆者推薦 廖雪峰git教程
,百度搜索即可。
Git簡介:
git是linux之父為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。
學習git從這幾個方面來了解:
- 安裝
- 工作區(qū)、暫存區(qū)、倉庫的概念
- 創(chuàng)建倉庫
- 分支
- 遠程倉庫
一、安裝
- Linux 安裝
linux安裝非常簡單,Ubuntu下通過一條sudo apt-get install git
命令就能安裝成功。
其他版本的linux可以直接通過源碼安裝。先從Git官網(wǎng)下載源碼,然后解壓,依次輸入:./config
,make
,sudo make install
這幾個命令安裝就好了。 -
Mac 安裝
直接從AppStore安裝Xcode,Xcode集成了Git,不過默認沒有安裝,你需要運行Xcode,選擇菜單“Xcode”->“Preferences”,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。
Mac.jpg - Windows 安裝
windows安裝也很簡單,直接在官網(wǎng)(https://git-for-windows.github.io/
)上下載一個.exe
的安裝程序雙擊安裝即可,一切按照默認,點擊next
即可。
安裝完成之后在開始菜單中找到Git Bash
彈出一個git自帶的命令行工具則安裝成功!
Git_Bash.jpg
安裝成功之后,需要一些設置,打開Git Bash,在命令行輸入
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
git是分布式的,有很多機器共同協(xié)作完成同一個項目,所以每一臺機子都得有自己的名稱標識。
二、工作區(qū)、暫存區(qū)、倉庫。
在了解這些概念之前我們先簡單的操作一遍。
首先,我們在電腦上任選一個地方,創(chuàng)建一個空文件夾。(我使用Git Bash,用命令創(chuàng)建)
$ cd D: //進入D盤
$ mkdir myGit //穿件文件夾 myGit
$ cd myGit //進入myGit
$ pwd //查看當前位置
/d/myGit
注意:文件夾不能出現(xiàn)中文字符
第二步,通過 git init
將當前所在的目錄變?yōu)镚it可以管理的倉庫。
$ git init
Initialized empty Git repository in /d/myGit/.git/
這樣 git倉庫就創(chuàng)建好了,myGit目錄下就會多一個 .git
文件夾,這個文件夾就是git用來跟蹤管理倉庫的,我們千萬不要去修改這個文件夾。如果你沒有看到 .git
文件夾,打開在windows文件
勾選
查看隱藏目錄
或者使用命令 ls -ah
就能查看到。第三步,新建一個
readme.txt
(一定是在myGit目錄或者其子目錄下), 內(nèi)容如下:
my first git.
用命令 git add readme.txt
把文件放到暫存區(qū)等待上傳,
$ git add readme.txt //執(zhí)行這個命令沒有反應則表示成功。
在使用 git commit
命令將暫存區(qū)的內(nèi)容(這里只有readme.txt)提交到倉庫分支中
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 1 insertions(+)
create mode 100644 readme.txt
-m
后面的內(nèi)容是本次提交的說明,可以任意輸入,也可以是中文,但是最好是有意義的說明。
為什么提交文件需要兩步呢?先使用 add
再使用 commit
因為commit可以一次性提交許多文件,先使用 add
添加多個,然后 一次性 commit
.
- 倉庫(repository)
也叫版本庫,倉庫里面的所有文件,目錄都被git管理,每個文件的修改,刪除,git都能狗跟蹤到。倉庫包括暫存區(qū)和分支。
上面操作中使用commit
命令就是將文件從倉庫的暫存區(qū)提交到倉庫的分支中. - 工作區(qū)(Working Directory)
電腦中能看到的存在代碼的文件夾就是工作區(qū),上面操作中的myGit
文件夾就是一個工作區(qū),但是myGit中的.git文件夾不屬于工作區(qū),它是git倉庫. - 暫存區(qū)(stage)
我們是用add
命令是將工作區(qū)的文件添加到暫存區(qū),使用commit
是將文件從暫存區(qū)提交到分支中。
tu.jpg
現(xiàn)在,我們在工作區(qū)新增一個文件 LICENSE
。
先用git status
查看一下狀態(tài):
$ 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
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# LICENSE
no changes added to commit (use "git add" and/or "git commit -a")
Git告訴我們,readme.txt
。被修改了,而LICENSE
還從來沒有被添加過,所以它的狀態(tài)是Untracked
。
使用兩次命令git add
,把readme.txt
和LICENSE
都添加后,用git status
再查看一下:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: LICENSE
# modified: readme.txt
#
三、創(chuàng)建倉庫
這個已經(jīng)在上面的操作中講了,不在累贅。
四、分支
倉庫包括暫存區(qū)和分支(master)
其實每一次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master
分支。有一個HEAD
(類似于指針那樣)就是指向master
的,而master
則指向最新的提交,就想這樣:
我們也可以使用
git checkout -b dev
新建一個分支名字是dev
$ git checkout -b dev
Switched to a new branch 'dev'
這條命令的意識就是:創(chuàng)建分支dev
并切換到這個分支下。
輸入git branch
查看所有分支,其中*
號表示的是當前分支
$ git branch
* dev
master
現(xiàn)在,我們就可以在dev
分支上正常提交,比如對 readme.txt
做個修改,加上一行:
Creating a new branch is quick.
然后再做提交
$ git add readme.txt
$ git commit -m "branch test"
[dev fec145a] branch test
1 file changed, 1 insertion(+)
現(xiàn)在的內(nèi)部情況就像這個圖一樣,HEAD指向最新dev分支上的修改
下面我們在把在
dev
分支上的修改合并到master
主分支上
$ git checkout master //切換回master主分支
Switched to branch 'master'
執(zhí)行后內(nèi)部的結構就像這樣:
開始合并
dev
分支到master
主分支
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge
命令用于合并指定分支到當前分支。合并后,再查readme.txt
的內(nèi)容,就可以看到,和dev
分支的最新提交是完全一樣的。
合并完成后,就可以放心地刪除 dev
分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
在實際開發(fā)中,我們應該按照幾個基本原則進行分支管理:
首先,master分支應該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩(wěn)定的,到某個時候,比如1.0版本發(fā)布時,再把dev分支合并到master上,在master分支發(fā)布1.0版本;
你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
五、遠程倉庫
Git是分布式版本控制系統(tǒng),同一個Git倉庫,可以分布到不同的機器上。怎么分布呢?最早,肯定只有一臺機器有一個原始版本庫,此后,別的機器可以“克隆”這個原始版本庫,而且每臺機器的版本庫其實都是一樣的,并沒有主次之分。
實際情況往往是這樣,找一臺電腦充當服務器的角色,每天24小時開機,其他每個人都從這個“服務器”倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務器倉庫里,也從服務器倉庫中拉取別人的提交。
完全可以自己搭建一臺運行Git的服務器,不過現(xiàn)階段,為了學Git先搭個服務器絕對是小題大作。好在這個世界上有個叫GitHub的神奇的網(wǎng)站,從名字就可以看出,這個網(wǎng)站就是提供Git倉庫托管服務的,所以,只要注冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。
- 第1步:創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建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”頁面:
- 第三步,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:
在Repository name填入myGit
,其他保持默認設置,點擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫。
現(xiàn)在,我們根據(jù)GitHub的提示,在本地的myGit倉庫下運行命令:
$ git remote add origin git@github.com:daiqiang838/myGit.git
請千萬注意,把上面的michaelliao
替換成你自己的GitHub賬戶名,否則,你在本地關聯(lián)的就是我的遠程庫,關聯(lián)沒有問題,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。
添加后,遠程庫的名字就是origin
,這是Git默認的叫法,也可以改成別的,但是origin
這個名字一看就知道是遠程庫。
- 第四步,就可以把本地庫的所有內(nèi)容推送到遠程庫上:
$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
把本地庫的內(nèi)容推送到遠程,用git push
命令,實際上是把當前分master
推送到遠程。
推送成功后,可以立刻在GitHub頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣.
$ git push origin master
把本地master
分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!