GIT簡介
1.GTI簡介
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)
-
Git官網(wǎng):http://www.git-scm.com
- 把E:\Git\bin加入到環(huán)境變量里面就可以在命令行下使用了
- Git Bash打開之后可以模擬Linux命令(中文支持有點(diǎn)勉強(qiáng))
-
集中式和分布式
集中式:
先說集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的熊尉,而干活的時(shí)候,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本,然后開始干活嗤谚,干完活了脆侮,再把自己的活推送給中央服務(wù)器。中央服務(wù)器就好比是一個(gè)圖書館蝙砌,你要改一本書,必須先從圖書館借出來跋理,然后回到家自己改择克,改完了,再放回圖書館前普。
-
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作肚邢,如果在局域網(wǎng)內(nèi)還好,帶寬夠大汁政,速度夠快道偷,可如果在互聯(lián)網(wǎng)上缀旁,遇到網(wǎng)速慢的話,可能提交一個(gè)10M的文件就需要5分鐘勺鸦,這還不得把人給憋死啊并巍。
分布式:
那分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有何不同呢?首先换途,分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”懊渡,每個(gè)人的電腦上都是一個(gè)完整的版本庫,這樣军拟,你工作的時(shí)候剃执,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編炀驮谀阕约旱碾娔X上懈息。既然每個(gè)人電腦上都有一個(gè)完整的版本庫肾档,那多個(gè)人如何協(xié)作呢?比方說你在自己電腦上改了文件A辫继,你的同事也在他的電腦上改了文件A怒见,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方姑宽,就可以互相看到對(duì)方的修改了遣耍。
和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多炮车,因?yàn)槊總€(gè)人電腦里都有完整的版本庫舵变,某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了瘦穆。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題纪隙,所有人都沒法干活了
在實(shí)際使用分布式版本控制系統(tǒng)的時(shí)候,其實(shí)很少在兩人之間的電腦上推送版本庫的修改难审,因?yàn)榭赡苣銈儌z不在一個(gè)局域網(wǎng)內(nèi)瘫拣,兩臺(tái)電腦互相訪問不了,也可能今天你的同事病了告喊,他的電腦壓根沒有開機(jī)。因此派昧,分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦黔姜,但這個(gè)服務(wù)器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活蒂萎,只是交換修改不方便而已秆吵。
弱化了服務(wù)器的功能,加強(qiáng)了個(gè)人的功能五慈。
2纳寂、安裝GIT
- 去官網(wǎng)下載安裝
-
安裝完成后主穗,在開始菜單里找到“Git”->“Git Bash”,蹦出一個(gè)類似命令行窗口的東西毙芜,就說明Git安裝成功忽媒!
- 然后進(jìn)行下面的配置,就能在每次提交的時(shí)候跳過輸入用戶名和郵箱了
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3腋粥、創(chuàng)建版本庫
- 什么是版本庫:
- 什么是版本庫呢晦雨?版本庫又名倉庫,英文名repository隘冲,你可以簡單理解成一個(gè)目錄闹瞧,這個(gè)目錄里面的所有文件都可以被Git管理起來,每個(gè)文件的修改展辞、刪除奥邮,Git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史罗珍,或者在將來某個(gè)時(shí)刻可以“還原”洽腺。
- 創(chuàng)建一個(gè)版本庫非常簡單、首先靡砌,選擇一個(gè)合適的地方已脓,創(chuàng)建一個(gè)空的目錄:
- 首先確定不要有中文
-
$ git init
輸入以上命令,把這個(gè)目錄變成Git可以管理的倉庫 Initialized empty Git repository in D:/.git/
- 細(xì)心的讀者可以發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè).git的目錄通殃,這個(gè)目錄是Git來跟蹤管理版本庫的度液,沒事千萬不要手動(dòng)修改這個(gè)目錄里面的文件,不然改亂了画舌,就把Git倉庫給破壞了堕担。
- 把文件夾添加到版本庫
- 第一步 :用命令
git add
告訴Git,把文件添加到倉庫
- 第一步 :用命令
首先 touch readme.txt (創(chuàng)建readme文件)
git add readme.txt
- 第二步曲聂,用命令
git commit
告訴Git霹购,把文件提交到倉庫
- 第二步曲聂,用命令
git commit -m "wrote a readme file"
4、基本操作
基本操作
- git status 命令可以讓我們時(shí)刻掌握倉庫的當(dāng)前狀態(tài)
$ git status
On branch master //當(dāng)前的分支
nothing to commit, working directory clean
- git diff 顧名思義就是查看difference朋腋,顯示的格式正式Unix通用的diff格式齐疙,可顯示修改文件的內(nèi)容
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 80694b3..610db72 100644
--- a/readme.txt
+++ b/readme.txt
@@ -6,4 +6,4 @@ asdfsdafsdfsdf
adfasdfsd
adfdsaf
-asfasdfas
\ No newline at end of file
+asfasdfas123
- git log 命令顯示從最近到最遠(yuǎn)的提交日志
$ git log
commit 0f32004c37a6b8b49430f6d22a333470738de94b
Author: wuyinlei <1069584784@qq.com>
Date: Sat Apr 2 10:12:23 2016 +0800
第二次提交
commit 8bcb79e2f0c08c58c9cc37e7bfa11909fd0da1c7
Author: wuyinlei <1069584784@qq.com>
Date: Sat Apr 2 10:10:36 2016 +0800
第一次提交
- git log --pretty=oneline 顯示為一行
$ git log --pretty=oneline
0f32004c37a6b8b49430f6d22a333470738de94b 第二次提交
8bcb79e2f0c08c58c9cc37e7bfa11909fd0da1c7 第一次提交
- git reset --hard HEAD^ 加退到上一個(gè)版本,上上一個(gè)版本是HEAD^^旭咽,在多的話就寫成HEAD-100
$ git reset --hard HEAD^
HEAD is now at 8bcb79e 第一次提交
**這個(gè)時(shí)候在次查看就可以看到已經(jīng)回退了**
$ git log --pretty=oneline
8bcb79e2f0c08c58c9cc37e7bfa11909fd0da1c7 第一次提交
- git reflog 查看命令歷史贞奋,以便于確定要回到未來的哪個(gè)版本
$ git reflog
0f32004 HEAD@{0}: commit: 第二次提交
8bcb79e HEAD@{1}: commit (initial): 第一次提交
- git reset --hard commit_id 在版本的歷史之間穿梭
- git checkout --readme.txt意思就是:讓這個(gè)文件回到最近一次git commit 或者git add 時(shí)的狀態(tài)
- git rm test.txt 從版本庫中刪除改文件,并且git commit
- git checkout --test.txt 把誤刪的文件恢復(fù)到最新版本
分支管理
- 創(chuàng)建dev分支穷绵,然后切換到dev分支(dev是名字轿塔,可以隨便取):
git branch dev
git checkout dev
或者
git checkout -b dev //-b參數(shù)表示創(chuàng)建并切換
//以下的就是查看創(chuàng)建的分支
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (master)
$ git checkout -b dev
Switched to a new branch 'dev'
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (dev)
$ git checkout dev
Already on 'dev'
- git branch命令查看當(dāng)前分支
$ git branch
* dev
master
//現(xiàn)在可以在dev分支上修改或者提交內(nèi)容了,當(dāng)切換回master分支后是無法查看dev分支修改的內(nèi)容的
git checkout master
$ git checkout dev
Switched to branch 'dev'
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (dev)
$ echo "dev modefi">>readme.txt
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (dev)
$ cat readme.txt
dev modefi
- 當(dāng)我們執(zhí)行以下的語句的時(shí)候,可以看到我們?cè)赿ev分支上提交勾缭,但是如果沒有提交到master上揍障,在master上是沒有數(shù)據(jù)的,跟master沒有關(guān)系
$ git add readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory.
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (dev)
$ git commit -m "branch dev"
[dev warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory.
16fd01f] branch dev
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory.
1 file changed, 1 insertion(+)
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (dev)
$ cat readme.txt
dev modefi
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (dev)
$ git checkout master
Switched to branch 'master'
若蘭@DESKTOP-HNR0QUU MINGW64 /d/wuyinlei (master)
$ cat readme.txt
- 把dev分支的工作成果合并到master分支上:
git merge dev
$ git merge dev
Updating 8bcb79e..16fd01f
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
//這個(gè)時(shí)候在查看俩由,就已經(jīng)合并了
$ cat readme.txt
dev modefi
- 刪除分支:
git branch -d dev
$ git branch -d dev
Deleted branch dev (was 16fd01f).
//在查看毒嫡,就只有master一個(gè)主分支了
$ git branch
* master
5、GIT與GitHub
- 作為開源代碼庫以及版本控制系統(tǒng)采驻,GitHub擁有150多萬開發(fā)者用戶审胚,隨著越來越多的應(yīng)用程序轉(zhuǎn)移到了云上,GitHub已經(jīng)成為了管理軟件開發(fā)以及發(fā)現(xiàn)已有代碼的首選方法礼旅。
搭建遠(yuǎn)程版本庫
- 第一步:https://github.com/ 進(jìn)入注冊(cè)自己的賬號(hào)
-
第二步:創(chuàng)建版本庫
-
第三步:查看建立好的版本庫
- 生成秘鑰
ssh-keygen -t rsa -C"email.com"
查看秘鑰:
把出來的秘鑰復(fù)制到github上:
把生成的秘鑰:添加到github上
- 在.ssh\目錄下創(chuàng)建一個(gè)config文件膳叨,內(nèi)容如下:
Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile~/.ssh/id_rsa
Port 443
測(cè)試通過
ssh -t git@github.com
或者
ssh -T git@github.com
以上的我沒有測(cè)試通過,痘系,菲嘴,,
下面來看下我自己的push推送吧
我們復(fù)制好這里面的地址汰翠,然后用GitBash切換到你的項(xiàng)目根目錄下
輸入以下的命令
$ git clone https://github.com/wuyinlei/loadermanager.git
這個(gè)時(shí)候龄坪,就會(huì)在這個(gè)目錄下創(chuàng)建本地版本庫
這個(gè)時(shí)候我們自己進(jìn)入到這個(gè)目錄的根目錄下:
然后我們進(jìn)入這個(gè)目錄下,把里面的文件剪切出來放到項(xiàng)目根目錄下复唤,這個(gè)時(shí)候刪除那個(gè)空的文件夾
這個(gè)時(shí)候在Git Bash上健田,還是切換到項(xiàng)目的根目錄下,輸入以下的命令:
$ git add . (.代表著同步全部)
$ git commit -m "一個(gè)簡單的介紹loader加載器" (""這里面添加注釋)
$ git push origin master 提交到遠(yuǎn)程版本庫
這個(gè)時(shí)候要輸入用戶名和密碼佛纫,輸入自己的用戶名和密碼妓局,接著enter按鍵。
這個(gè)時(shí)候我們?cè)诖嗡⑿戮W(wǎng)頁呈宇,可以看到我們的代碼已經(jīng)同步到了github上面:
至此好爬,這個(gè)時(shí)候我們已經(jīng)完成了本地和遠(yuǎn)程庫的同步。
參考文檔:廖雪峰的Git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000