Git和Github詳細(xì)教程

Git和Github詳細(xì)教程

一 概述

  說到Git和Github,前幾天我們知道微軟以75億美元收購全球最大的代碼托管和寫作平臺GitHub,而GitHub是全球最大的代碼倉庫,很多開發(fā)人員都將代碼存放在Github,許多開發(fā)者因?yàn)閾?dān)心微軟無法讓 GitHub 在運(yùn)營上保持開放和獨(dú)立,將無數(shù)項(xiàng)目遷移到了 GitLab上,博主也擔(dān)心微軟是否會讓GitHub按照以前一樣運(yùn)營,不管那么多,下面正式開始講解Git:

說到Git,很多人會想到svn,svn是集中式的版本控制工具,相比Git,博主認(rèn)為Git更強(qiáng)大,Git出自linux之父林納斯之手,而Git又全面兼容linux,這對編程開發(fā)人員來說是非常爽的,下面我們看看版本控制工具應(yīng)該具備的功能 :

1 協(xié)同修改,多人并行不悖的修改服務(wù)器端的同一個文件,數(shù)據(jù)備份。
2 不僅保存目錄和文件的當(dāng)前狀態(tài), 還能夠保存每一個提交過的歷史狀態(tài)。
3 版本管理
4 在保存每一個版本的文件信息的時(shí)候要做到不保存重復(fù)數(shù)據(jù), 以節(jié)約存儲空間, 提高運(yùn)行效率。 這方面 SVN 采用 的是增量式管理的方式, 而 Git 采取了文件系統(tǒng)快照的方式。
5 權(quán)限控制
6 對團(tuán)隊(duì)中參與開發(fā)的人員進(jìn)行權(quán)限控制。
7 對團(tuán)隊(duì)外開發(fā)者貢獻(xiàn)的代碼進(jìn)行審核——Git 獨(dú)有。
8 歷史記錄
9 查看修改人、 修改時(shí)間、 修改內(nèi)容、 日志信息。
10 將本地文件恢復(fù)到某一個歷史狀態(tài)。
11 分支管理
12 允許開發(fā)團(tuán)隊(duì)在工作過程中多條生產(chǎn)線同時(shí)推進(jìn)任務(wù), 進(jìn)一步提高效率。

二 版本控制介紹

2.1 版本控制簡介

          工程設(shè)計(jì)領(lǐng)域中使用版本控制管理工程藍(lán)圖的設(shè)計(jì)過程。 在 IT 開發(fā)過程中也可以

           使用版本控制思想管理代碼的版本迭代.

2.2 版本控制工具

        1.集中式版本控制工具:CVS、 SVN、 VSS  and so  on

         集中式版本控制工具的模式主要是將代碼專門放在一個服務(wù)器,如下:
image
       2\. 分布式版本控制工具:Git、 Mercurial、 Bazaar、 Darcs and so on

         分布式版本控制工具像Git支持分支管理,如下:

         ![image](http://upload-images.jianshu.io/upload_images/9159664-702f53ab80ce6b06.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

三 Git歷史

3.1 Git發(fā)展史

image

3.2 Git官網(wǎng)

   Git官網(wǎng)地址:https://git-scm.com/

3.3 Git優(yōu)勢

    1  大部分操作在本地完成,不需要聯(lián)網(wǎng)

    2  完整性保證

    3  盡可能添加數(shù)據(jù)而不是刪除或修改數(shù)據(jù)

    4  分支操作非??旖萘鲿?
    5  與 Linux 命令全面兼容

3.4 Git的安裝

    這是我的百度網(wǎng)盤鏈接,里面有32位和64位安裝包

 [  鏈接:https://pan.baidu.com/s/16LHA-qajOw5h_EfP25LD7g 密碼:jsfb ](https://pan.baidu.com/s/16LHA-qajOw5h_EfP25LD7g)

   安裝很簡單,跟著提示點(diǎn)擊過來就好了,有問題可以聯(lián)系博主。

3.5 Git的結(jié)構(gòu)

                      ![image](http://upload-images.jianshu.io/upload_images/9159664-ea275d8bc234fd2f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.6 Git和代碼托管中心

局域網(wǎng)環(huán)境 GitLab服務(wù)器

外網(wǎng)環(huán)境下 GitHub 碼云

3.6 本地庫和遠(yuǎn)程庫

image

本地庫是存在在個人本地的,而Github中創(chuàng)建的是遠(yuǎn)程庫,本地庫push/pull從遠(yuǎn)程庫中上傳代碼或者拉取代碼,而其他開發(fā)者可以直接clone到本地庫,當(dāng)然還有夸團(tuán)隊(duì)協(xié)作,其實(shí)差不多,fork一下就好了。

四 Git操作

4.1 本地庫初始化

 首先我在自己的工作區(qū)創(chuàng)建一個目錄gitDev,專門用來存放gitDev這個項(xiàng)目,將gitDev比作我將要開發(fā)的項(xiàng)目。

mkdir gitDev,進(jìn)入創(chuàng)建好的目錄,pwd看下我的位置
image

ls -la 可以看到我現(xiàn)在只有2個隱藏的目錄

image

下面我開始初始化: (git init)

image

ls -la查看,多了.git的隱藏文件,說明已經(jīng)初始化成功了

image

4.2 設(shè)置簽名

1 項(xiàng)目級別/倉庫級別:僅在當(dāng)前本地庫范圍內(nèi)有效

image
image

git config user.name xxxx

git config user.email xxxx

這是設(shè)置當(dāng)前庫范圍有效的

2 系統(tǒng)用戶級別:登錄當(dāng)前操作系統(tǒng)的用戶范圍

git config --global user.name xxxx

git config --global user.eamil xxxx

3 級別優(yōu)先級

就近原則:項(xiàng)目級別優(yōu)先于系統(tǒng)用戶級別,二者都有時(shí)采用項(xiàng)目級別的簽名

如果只有系統(tǒng)用戶級別的簽名,就以系統(tǒng)用戶級別的簽名為準(zhǔn)

二者都沒有不允許

4.3 查看狀態(tài)


image

查看工作區(qū)、暫存區(qū)狀態(tài)

4.4 添加至緩存區(qū)

首先我建立一個文件,寫入test內(nèi)容

image
image

查看內(nèi)容

image

這個時(shí)候git status查看下狀態(tài)

image

這個時(shí)候提示我們使用git add命令添加到暫存區(qū)

image

再git status一下

image

提示我們 git rm 用來刪除,我們git commit提交一下

image

再看看git status,發(fā)現(xiàn)沒有需要提交的內(nèi)容了

image

4.5 查看歷史記錄

剛剛我們提交了信息,加入想看到我提交的內(nèi)容的話

1.git log: 很清楚的看到我剛剛提交的信息,master代碼主分區(qū)

image

2.git log --pretty=oneline可以更清楚的看到我的提交記錄

image

3.git reflog 也能查看日志記錄

image

4.6 前進(jìn)和后退(git reset --hard [局部索引值] )

我先多提交幾次,讓記錄更加多

image

現(xiàn)在可以看到我的日志記錄,我提交了4次,每次新加的內(nèi)容就是后面的消息,現(xiàn)在這個版本的內(nèi)容如下:

image
image

現(xiàn)在我要回到cc37538這個版本的記錄的話:

image

可以看到,給我們的提示是Head已經(jīng)在cc37538了,cat test.txt一下

image

可以看到回到了以前的狀態(tài)。

image

現(xiàn)在可以看到HEAD指向cc37538了

當(dāng)然還有其他方法進(jìn)行回退,博主推薦大家使用這種方式。

只要提交到本地庫的文件,都可以在歷史版本中找回原來的信息

4.7 分支管理

1.分支可以理解多個功能同時(shí)推進(jìn),最后再合并

                ![image](http://upload-images.jianshu.io/upload_images/9159664-14dc30981969a318.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.好處

     同時(shí)并行推進(jìn)多個功能開發(fā),提高開發(fā)效率
     各個分支在開發(fā)過程中,如果某一個分支開發(fā)失敗,不會對其他分支有任何影響。失敗的分支刪除重新開始即可。

3.創(chuàng)建分支(git branch [分支名])

  ![image](http://upload-images.jianshu.io/upload_images/9159664-3ca3173163f109ae.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

首先我創(chuàng)建修復(fù)bug的分支hot_fix,git branch -v 查看下分支

image

git checkout hot_fix來切換分支

image

git branch -v 查看下分支,現(xiàn)在就切換到hot_fix分支了

image

在hot_fix分支,輸入ll,在查看下之前的內(nèi)容

image
image

其實(shí)hot_fix復(fù)制了一份master分支的內(nèi)容

4.合并分支(git merge [ 有新內(nèi)容分支名 ])

第一步:切換到接受修改的分支(被合并,增加新內(nèi)容)上 gitcheckout [被合并分支名]

第二步:執(zhí)行 merge 命令 git merge [有新內(nèi)容分支名]

首先,我在hot_fix上修改test.txt文件,添加了new content內(nèi)容

image

git commit到本地庫

image

git checkout 到master分支

image

git merge hot_fix : 合并hot_fix 分支的內(nèi)容

image

再查看下test.txt中的內(nèi)容,已經(jīng)將new content中的內(nèi)容合并到mster中

image

5.解決沖突

    團(tuán)隊(duì)開發(fā)的時(shí)候很有可能會發(fā)生沖突,如何解決沖突,如下:

首先查看下我在master分支

image

我修改了第4行的內(nèi)容: edit by master

![image](http://upload-images.jianshu.io/upload_images/9159664-28f8c6021399d78a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

將內(nèi)容保存到本地庫中

image

切換到hot_fix分支

image

查看

image

同樣修改test.txt中的第4行內(nèi)容

image

提交到本地庫中

image

現(xiàn)在我想把hot_fix分支的內(nèi)容合并到master分支中

切換分支:

image

合并got_fix分支修改的內(nèi)容

image

查看狀態(tài)

image

打開test.txt文件后

image

修改內(nèi)容后,如下,保存退出

image

添加到暫存區(qū)

image

查看狀態(tài)

image

提交

image

查看合并后的內(nèi)容

image

沖突的解決:

第一步:編輯文件,刪除特殊符號
第二步:把文件修改到滿意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
注意:此時(shí) commit 一定不能帶具體文件名

五 Github

   1.github

               GitHub 首頁就是注冊頁面:https://github.com/
image
   2.在github中創(chuàng)建遠(yuǎn)程庫
image
image
   3.為遠(yuǎn)程庫地址創(chuàng)建別名
image

git remote -v 查看當(dāng)前所有遠(yuǎn)程地址別名

git remoteadd [別名] [遠(yuǎn)程地址]

image
image
   4.將本地庫內(nèi)容推送到github中(git push origin master)

  ![image](http://upload-images.jianshu.io/upload_images/9159664-a3e2feea63a255c5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 這個時(shí)候會彈出登陸框,輸入賬號密碼

    ![image](http://upload-images.jianshu.io/upload_images/9159664-7cdd12c90c41b88f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

成功之后,會有如下提示信息:

image
   5\. 刷新github,可以看到提交上去的信息
image

進(jìn)入test.txt文件,這個時(shí)候信息成功被push到github上了

image
  6\. 團(tuán)隊(duì)協(xié)同開發(fā)   

我重新創(chuàng)建了一個目錄zhangsan,假如團(tuán)隊(duì)中的zhangsan協(xié)同開發(fā)的話,我就去github上面把信息clone下來

image

這個時(shí)候?qū)τ趜hangsan的話,創(chuàng)建目錄不用進(jìn)行任何的操作,直接

git clone https://github.com/liuXinJianGithub/gitDev.git

image

ls -la 查看

image
image
image

可以發(fā)現(xiàn)從github上把信息給克隆下來了.

現(xiàn)在zhangsan修改了信息想要提交到github上面的話,可以看到新加了一條內(nèi)容:my name is zhangsan

image

git push origin master 會彈出登錄信息,我用另外一個新賬號登陸

image
        ![image](http://upload-images.jianshu.io/upload_images/9159664-4b2fc8f6d3507924.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

可以看到現(xiàn)在是拒絕讓zhangsan這個賬號push,因?yàn)閦hangsan還沒有被邀請到團(tuán)隊(duì)進(jìn)行協(xié)同開發(fā)

image

登陸遠(yuǎn)程庫創(chuàng)建者的github賬號,如下

image
image
image

切換zhangsan的github賬號,輸入邀請地址https://github.com/liuXinJianGithub/gitDev/invitations

image

點(diǎn)擊接受邀請即可。這個時(shí)候push到github上

image

可以看到已經(jīng)成功上傳

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,213評論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 4,162評論 0 11
  • 看平如和美棠的照片,平如眉清目秀相貌堂堂美棠人如其名花容月貌。為什么不說男才女貌,正如美棠對他說的最多的一句話是:...
    桃酥1618閱讀 14,111評論 0 4
  • 瑪依拉,在夜晚失眠的孩子, 許多星辰從午夜高懸到黎明, 只有你深知它們的寓意。 直到白晝來臨,葉爾羌河濤聲遠(yuǎn)逝, ...
    三水林楓閱讀 499評論 17 29
  • 四海春雷驟雨狂,乾坤滌蕩凈八荒。 窮途濁浪一朝盡,滾滾清流譜華章。
    霙愔閱讀 432評論 2 5

友情鏈接更多精彩內(nèi)容