Git是一個(gè)開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。
Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。
Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務(wù)器端軟件支持。
Git與SVN區(qū)別
- 1、GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統(tǒng),例如SVN,CVS等,最核心的區(qū)別。
- 2、GIT把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而SVN是按文件:所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個(gè)類似.svn,.cvs等的文件夾里。
- 3、GIT分支和SVN的分支不同:分支在SVN中一點(diǎn)不特別,就是版本庫中的另外的一個(gè)目錄。
- 4、GIT沒有一個(gè)全局的版本號(hào),而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個(gè)特征。
- 5、GIT的內(nèi)容完整性要優(yōu)于SVN:GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問題時(shí)降低對版本庫的破壞。
文章目錄
一、Git安裝配置
二、Git基本操作
三、Git分支管理
四、Git.遠(yuǎn)程倉庫
一、Git安裝配置
Git目前支持Mac、Windows、Linux/Unix和Solaris平臺(tái)。
各平臺(tái)安裝包下載地址:http://git-scm.com/downloads
Windows平臺(tái)安裝
下載安裝包之后根據(jù)提示進(jìn)行安裝
安裝完成后就可以使用命令行的git工具了(自帶ssh客戶端),和一個(gè)帶圖像界面的git項(xiàng)目管理工具(Git GUI)。
可以通過桌面圖標(biāo)或者開始菜單找到->"Git"->"Git Bash",點(diǎn)擊會(huì)彈出Git命令窗口,可在該窗口進(jìn)行Git操作。
Mac平臺(tái)下的安裝
1.下載git客戶端,地址:https://git-scm.com/download/mac
mac平臺(tái)下的圖像化git安裝工具,地址:http://sourceforge.net/projects/git-osx-installer/
2.打開安裝包,進(jìn)行安裝。
Linux平臺(tái)安裝
Linux操作系統(tǒng)git安裝命令參考:https://git-scm.com/download/linux
- Ubuntu安裝命令:
$ apt-get install git
- 若提示需要權(quán)限則輸入:
sudo passwd root
,首先輸入登陸密碼,然后設(shè)置新的root密碼,接著輸入su
按Enter
鍵,輸入設(shè)置好的root密碼獲取root權(quán)限。
安裝過程需要輸入幾次y
+回車
,之后等待自動(dòng)下載安裝。
- 輸入
git --version
查看git版本
安裝完成
二、Git基本操作
配置用戶信息
- 以下兩條命令用于配置個(gè)人用戶名稱和電子郵件地址:
git config --global user.name "XXX"
git config --global user.email xxxx@gmail.com
--global:添加了此命令,那么更改的配置文件就是位于用戶主目錄下的,以后的項(xiàng)目都將默認(rèn)使用此用戶信息。若需要為某個(gè)項(xiàng)目使用其他用戶信息,只需要去掉--global重新配置即可,新的配置保存在當(dāng)前項(xiàng)目的.git/config中。
- 查看配置信息命令:
git config --list //也可以將--list換為具體的某個(gè)環(huán)境變量如:user.name
創(chuàng)建倉庫
Git的很多命令都需要在Git倉庫中運(yùn)行,所以我們最先做的就是創(chuàng)建一個(gè)倉庫。
- 我們可以使用一下命令將當(dāng)前目錄作為git倉庫,并初始化:
git init
- 或者使用指定目錄作為倉庫:
git init newrepo
- 初始化后,目錄下會(huì)生成一個(gè)名為.git的目錄,我們要將當(dāng)前目錄下的幾個(gè)文件納入git版本控制下,需要先用git add讓git對文件開始跟蹤,之后提交。
git add *.c //將以.c結(jié)尾的文件提交到倉庫
git add README //將README文件提交到倉庫
git commit -m '初始化項(xiàng)目版本'
克隆倉庫
使用git clone命令從現(xiàn)有Git倉庫中拷貝項(xiàng)目,類似于svn checkout。
- 克隆倉庫的命令:
git clone <repo> //repo:Git倉庫地址
- 克隆到指定目錄:
git clone <repo> <directory> //directory:本地目錄
基本快照
Git 的工作就是創(chuàng)建和保存你的項(xiàng)目的快照及與之后的快照進(jìn)行對比。
git status
git status 可以查看在你上次提交之后是否有修改。
- 使用git status命令查看項(xiàng)目當(dāng)前狀態(tài):
git status -s //-s:簡短輸出
??: 未添加到緩存
A: 已添加到緩存
M: 有改動(dòng)
AM: 添加到緩存后又有改動(dòng)
git diff
git status 顯示你上次提交更新后的更改或者寫入緩存的改動(dòng), 而 git diff 一行一行地顯示這些改動(dòng)具體是啥。
- 使用git diff命令查看git status執(zhí)行結(jié)果的詳細(xì)信息:
git diff //尚未緩存的改動(dòng)
git diff --cached //已緩存的改動(dòng)
git diff HEAD //已緩存和未緩存的所有改動(dòng)
git diff --stat //顯示摘要
git commit
使用 git add 命令將想要快照的內(nèi)容寫入緩存區(qū), 而執(zhí)行 git commit 將緩存區(qū)內(nèi)容添加到倉庫中。
- 將內(nèi)容添加到倉庫:
git commit -m '第一次提交版本'
-m:提交注釋,如果不設(shè)置-m選項(xiàng),那么git會(huì)嘗試打開一個(gè)編輯器以填寫提交信息,默認(rèn)vim。效果如下:
- 如果覺得git add提交緩存比較麻煩,也可以使用-a跳過:
git commit -a
git commit -am '第二次提交版本'
git reset HEAD
git reset HEAD 命令用于取消已緩存的內(nèi)容。
git reset HEAD //也可以使用 --文件名 的形式指定具體文件
git rm
git rm 會(huì)將條目從緩存區(qū)中移除。這與 git reset HEAD 將條目取消緩存是有區(qū)別的。 git reset HEAD是將緩存區(qū)恢復(fù)為做出修改之前的樣子。git rm file 會(huì)將文件從緩存區(qū)和你的硬盤中(工作目錄)刪除。
- 不從工作區(qū)刪除文件:
git rm --cached 文件名
git mv
git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重命名磁盤上的文件,然后再執(zhí)行 git add 把新文件添加到緩存區(qū)。
git mv 原文件名 修改后文件名
三、Git分支管理
幾乎每種版本控制系統(tǒng)都支持類似的分支,使用分支從開發(fā)主線中分離,在不影響主線的同時(shí)繼續(xù)工作。Git的分支模型是最贊的
- 創(chuàng)建分支命令:
git branch (branchname)
- 切換分支命令:
git checkout (branchname)
切換分支時(shí),Git會(huì)用該分支最新的快照替換工作目錄的內(nèi)容,所以多個(gè)分支只需要一個(gè)目錄。
- 列出分支命令:
git branch //沒有參數(shù)時(shí),會(huì)列出本地的分支
當(dāng)執(zhí)行g(shù)it init 時(shí),Git會(huì)默認(rèn)創(chuàng)建"master"分支。
當(dāng)我們創(chuàng)建了一個(gè)分支,在該分支的的上下文中新增刪除了一些文件后,切換回主分支,那些修改的東西都不見了。
使用分支就可以讓我們在不同的上下文中工作,來回切換,而不影響主線。
- 刪除分支命令:
git branch -d (branchname)
- 合并分支命令:
git merge
合并沖突
合并并不僅僅是簡單的文件添加、移除的操作,Git 也會(huì)合并修改。
我們可以在master分支中創(chuàng)建文件test.txt,并寫入github.com
,提交到倉庫。
然后創(chuàng)建一個(gè)change_site分支,并切換過去。
git branch change_site
git checkout change_site
修改test.txt文件內(nèi)容為 https://github.com
,提交后切換回master分支。
git commit -am 'merge test 1'
git checkout master
將change_site分支合并到master分支。
git merge change_site
此時(shí)會(huì)提示我們文件沖突,需要我們手動(dòng)修改。
修改完成后可以通過git add告訴Git文件沖突已解決。
git add test.txt
git commit
Git查看提交歷史
在提交了多次更新后,想要查看提交歷史,可以使用以下命令:
git log
輸出結(jié)果:
查看歷史記錄簡介版本:
git log --oneline
輸出結(jié)果:
使用--graph查看什么時(shí)候出現(xiàn)了分支、合并:
git log --oneline --graph
輸出結(jié)果:
其他log命令:https://git-scm.com/docs/git-log
--reverse 逆向顯示日志
--author 指定具體某一個(gè)作者
--since 和 --before 指定日期
--decorate 查看標(biāo)簽
Git 標(biāo)簽
如果你想要記住或標(biāo)記某個(gè)重要的快照,就可以使用標(biāo)簽。
- 比如我們提交了項(xiàng)目v2.0版本,可以使用以下命令:
git tag -a v2.0
- -a是創(chuàng)建一個(gè)帶注解的標(biāo)簽,記錄標(biāo)簽作者、生成時(shí)間等.
- 使用了-a,Git會(huì)打開一個(gè)編輯器讓你輸入標(biāo)簽注解,就和寫提交注解一樣。
- 使用命令
git tag
可以查看所有標(biāo)簽。 - 如果想給已提交的某個(gè)快照追加標(biāo)簽,可以使用如下命令:
git tag -a v1.0 64ff8e3 //64ff8e3是上圖日志最后一行
快速指定標(biāo)簽信息:
git tag -a v3.0 -m 'author:噫那里有條咸魚'
四、Git遠(yuǎn)程倉庫(Github)
添加遠(yuǎn)程倉庫
由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗(yàn)證信息:
1.創(chuàng)建ssh
- 檢查ssh
打開終端,運(yùn)行cd ~/.ssh
如果路徑下無文件跳過下一步操作,如果有文件代表已有ssh key,需要進(jìn)行備份 - 備份已有ssh
mkdir key_backup
mv id_rsa* key_backup
- 生成ssh key
ssh-keygen -t rsa -C xxxx@gamil.com //注冊的main郵箱
執(zhí)行后終端會(huì)顯示
2.將ssh key添加到github上
- 在終端輸入,mac平臺(tái):
open ~/.ssh id_rsa.pub
,Windows平臺(tái):start ~/.ssh id_rsa.pub
,打開文件id_rsa.pub,拷貝key值。 - 打開https://github.com/官網(wǎng),登錄后,點(diǎn)擊賬戶-ssh公鑰,輸入拷貝的key值,提交。
3.測試鏈接是否成功
- 在終端輸入
ssh -T git@github.com
這里會(huì)要求你輸入SSH key密碼,如果剛才生成SSH key時(shí)未輸入密碼,密碼就為空。 - 看到:
Hi 用戶名! You’ve successfully authenticated
說明配置成功。
配置成功后SSH會(huì)由黑色變?yōu)榫G色。
4.New repository(新建倉庫)
登錄Github點(diǎn)擊New repository
,之后在repository name
填入test(遠(yuǎn)程倉庫名),其他設(shè)置默認(rèn)即可,之后點(diǎn)擊Create repository
,就成功創(chuàng)建了一個(gè)Git倉庫。
5.本地上傳文件到遠(yuǎn)程庫
依次執(zhí)行以下命令:
mkdir test //創(chuàng)建測試目錄
cd test //進(jìn)入測試目錄
echo "git測試" >> README.md //創(chuàng)建README.md文件并寫入內(nèi)容
git init //初始化
git add README.md //添加文件到緩存
git commit -m "添加 README.md 文件" //提交并添加備注
git remote add origin git@github.com:賬戶名/倉庫名 //提交到遠(yuǎn)程倉庫
git push -u origin master
查看遠(yuǎn)程庫
實(shí)例:-v參數(shù)—— 查看每個(gè)別名的實(shí)際鏈接地址
$ git remote
origin
$ git remote -v
origin https://github.com/賬戶名/test (fetch)
origin https://github.com/賬戶名/test (push)
提取遠(yuǎn)程倉庫
- 從遠(yuǎn)程倉庫下載新分支與數(shù)據(jù):
git fetch
- 從遠(yuǎn)程倉庫提取數(shù)據(jù)并嘗試合并到當(dāng)前分支:
git pull
當(dāng)我們需要提取更新的數(shù)據(jù),可以先執(zhí)行 git fetch[別名]
讓Git去獲取本地沒有的數(shù)據(jù),然后執(zhí)行git merge[別名]/[branch]
將更新的數(shù)據(jù)合并到當(dāng)前分支。
實(shí)例:
通過在線修改README.md文件:
在本地提取更新:
將更新同步到本地:
查看README.md文件內(nèi)容:
刪除遠(yuǎn)程倉庫
- 刪除遠(yuǎn)程倉庫命令:
git remote rm [別名]
實(shí)例:
新建倉庫origin2:git remote add origin2 git @github.com:別名/test
查看倉庫:git remote -v
刪除倉庫origin2:git remote rm origin2
Git命令練習(xí):點(diǎn)我
2017-04-07 施工ing