<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實戰(zhàn)必備:git 入門級教程

          共 8239字,需瀏覽 17分鐘

           ·

          2021-03-17 13:59


          • 帶你快速理解git

          • 介紹一下Git 的由來

          • 集中式和分布式版本控制系統(tǒng)區(qū)別

          • 安裝git

          • 一次完整的git使用過程

          • 分支管理


          帶你快速理解git

          學完后能立刻上手的Git教程!有沒有想過把每次修改的代碼內(nèi)容都記錄下來,防止改錯了需要回退,也方便查看每次修改了什么;有沒有想過一個代碼需要多人操作,多人切換修改后能立刻生成一份新的代碼,讓開發(fā)效率更高。那就一起來了解一下git吧,讓你不再手動管理文檔了!

          版本控制系統(tǒng)有很多,但是git最出名,為什么呢?像CVS和SVN這種集中式的版本控制系統(tǒng),它們不但速度慢,而且必須聯(lián)網(wǎng)才能使用。

          介紹一下Git 的由來

          隨著Linux的不斷壯大,其代碼的管理遇到了難題,于是,Linux的締造者 Linus Torvalds,選用了分布式版本控制系統(tǒng) BitKeeper 來管理和維護代碼。但是,后來由于一些不太美好的原因,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關系結束,他們收回了 Linux 內(nèi)核社區(qū)BitKeeper 的權力。Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時的經(jīng)驗教訓,使用C開發(fā)出了自己的分布式版本系統(tǒng)git,而且做了很多改進。不得不說很牛??!

          集中式和分布式版本控制系統(tǒng)區(qū)別

          集中式版本控制系統(tǒng),版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。

          分布式版本控制系統(tǒng)實質(zhì)上是根本沒有“中央服務器”這一說的,每個人的電腦上都是一個完整的版本庫(可以稱為本地倉庫),這樣,你工作的時候,就不需要聯(lián)網(wǎng)了,因為版本庫就在你自己的電腦上。分布式版本控制系統(tǒng)通常也有一臺充當“中央服務器”的電腦(這里其實就是遠程倉庫),但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。

          安裝git

          Linux上安裝:
          兩種方法
          一是采用yum來安裝git,可以參考下面的步驟:

          1. 安裝yum
          yum install git

          若出現(xiàn)是否下載,點擊yes

          1. 驗證安裝是否成功
          git --version

          出現(xiàn)版本號,說明安裝成功 git是默認安裝在/usr/libexec/git-core目錄下,可輸入cd指令來查看安裝的信息

          二是采用源碼編譯的方式安裝,這種安裝方法的好處就是方便控制安裝的版本

          1. 先從https://github.com/git/git/releases上下載源碼,在這里我們可以找到所有git已發(fā)布的版本,我們選擇最新版的tar.gz包。
            最近最新的版本是v2.30.0
            下載命令為:
          wget https://github.com/git/git/archive/v2.30.0.tar.gz
          1. 解壓
          tar -zxvf git-2.22.0.tar.gz
          1. 使用cd命令進入解壓后的文件夾

          2. 安裝編譯所需要的依賴

          yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

          耐心等待安裝完成,中途出現(xiàn)提示的時候輸入y并按回車。
          安裝編譯源碼所需依賴的時候,yum自動幫你安裝了git,這時候你需要先卸載這個舊版的git。

          yum -y remove git
          1. 編譯git源碼
          make prefix=/usr/local/git all
          1. 安裝git至/usr/local/git路徑
          make prefix=/usr/local/git install
          1. 配置環(huán)境變量
          vi /etc/profile 
          在底部加上
          export PATH=$PATH:/usr/local/git/bin

          ( 輸入 :wq! 保存修改)

          1. 刷新環(huán)境變量
          source /etc/profile
          1. 查看Git是否安裝完成
          git --version

          Mac上安裝:
          兩種方法
          一是安裝homebrew,然后通過homebrew安裝Git,具體方法請參考homebrew的文檔:http://brew.sh/。

          第二種方法更簡單,也是推薦的方法,就是直接從AppStore安裝Xcode,Xcode集成了Git,不過默認沒有安裝,你需要運行Xcode,選擇菜單“Xcode”->“Preferences”,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。

          Windows上安裝:
          從Git官網(wǎng)直接下載安裝程序,然后按默認選項安裝即可。
          安裝完成后,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西,就說明Git安裝成功!或者是右擊看到下面這幾個圖標:

          一般習慣于用git bash here
          最后一步設置標識,輸入下面的命令:

          $ git config --global user.name "Your Name"
          $ git config --global user.email "[email protected]"

          注意git config  --global參數(shù),有了這個參數(shù),表示你這臺機器上所有的Git倉庫都會使用這個配置,當然你也可以對某個倉庫指定的不同的用戶名和郵箱。

          現(xiàn)在,Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。


          先來理解幾個基本概念

          上面這幅圖中展示了git的基本使用流程,大致可以分為以下四個區(qū)域:

          • workspace:工作區(qū)

          平時開發(fā)時,改動代碼的地方,也就是每次有新的需求下來,直接在該區(qū)域修改代碼,該區(qū)域的代碼最新。

          • index/stage:暫存區(qū)

          工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是 Git 的版本庫(包括暫存區(qū)和對象區(qū))

          當你完成某個需求或功能后需要提交到遠程倉庫,那么第一步就是通過git add先提交到暫存區(qū),被git管理。

          .git目錄下的暫存區(qū)(index文件)會記錄git add添加文件的相關信息(文件名、大小、timestamp...),不保存文件實體, 通過id指向每個文件實體。暫存區(qū)標記了你當前工作區(qū)中,哪些內(nèi)容是被git管理的。

          • repository:本地倉庫

          git commit可以同步index中的內(nèi)容到本地倉庫。

          本地倉庫保存了對象被提交過的各個版本,比起工作區(qū)和暫存區(qū)的內(nèi)容,它要更舊一些。

          • remote:遠程倉庫

          git push 可以同步本地倉庫中的內(nèi)容到遠程倉庫。

          一次完整的git使用過程

          1、創(chuàng)建或獲取版本庫

          • 創(chuàng)建版本庫
            選擇一個文件目錄,然后右擊打開git bash命令行窗口,執(zhí)行下述命令初始化一個本地倉庫:
          git init

          該命令將創(chuàng)建一個名為 .git 的目錄,這個目錄是git來跟蹤管理版本的,沒事千萬不要手動亂改這個目錄里面的文件,否則,會把git倉庫給破壞了。

          • 獲取遠程倉庫至本地倉庫
            ps:遠程倉庫的建立會再補充的 選擇一個文件目錄,然后右擊打開git bash命令行窗口,從一個服務器上克隆一個git遠程倉庫:
          git clone [url]  

          2、記錄每次更新到版本庫
          如果是創(chuàng)建的版本庫,此時,工作區(qū)中還是沒有文件的,可以直接在工作區(qū)中新增并修改;如果是獲取的版本庫,直接修改在工作區(qū)的內(nèi)容就好了。
          改動好之后,可執(zhí)行下述幾個命令:

          1. 檢測當前文件狀態(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
            
          no changes added to commit (use "git add" and/or "git commit -a")

          ”Changes not staged for commit“說明該文件 readme.txt被修改了但并不在暫存區(qū)。

          1. 把更改的內(nèi)容添加到暫存區(qū):
          git add [filename](針對特定文件)
          git add *(所有文件)
          git add *.txt(支持通配符,所有 .txt 文件)

          此時,暫存區(qū)的內(nèi)容和工作區(qū)的內(nèi)容一致。

          1. 忽略文件:

          執(zhí)行add操作時,有些文件是不想要放到暫存區(qū),就可以使用下面的方法忽略掉:

          • 使用命令:touch .gitignore 創(chuàng)建.gitignore文件
          • 在文件中寫入需要忽略的文件
            例如,寫入appName/src/test/* 表示忽略掉了appName項目下的test文件夾下的所有文件
          1. 提交更新:

          現(xiàn)在最新的代碼在暫存區(qū),現(xiàn)在需要將其放到本地倉庫中,采用下述的命令:

           git commit -m "代碼提交信息"

          注意:每次準備提交前,先用 git status 看下,是不是都已暫存起來了,然后再運行提交命令。

          1. 跳過使用暫存區(qū)域提交更新的方式:

          仔細想一想,修改的內(nèi)容在暫存區(qū)中,我們好像也沒有做過什么操作,那為什么不選擇直接提交到本地倉庫呢?稍后解答~,先說一下跳過使用暫存區(qū)域而提交更新的命令:

          git commit -a -m "代碼提交信息"。

          git commit 加上 -a 選項,git 就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟。

          git暫存區(qū)存在的意義:
          會有這個疑惑的,請先問問自己,使用git時候是否是所有的修改一次全部提交,根本沒有考慮到修改的多個內(nèi)容是和多個功能有關的,而每一個功能應該單獨做成一次提交,這樣可以保證提交歷史的清晰。否則,當你想要回滾歷史的時候,你會無所適從,根本分不清每個版本包含了哪些功能,修復了哪些bug。

          而暫存區(qū)的作用就是為了可以選擇性提交,比如你在開發(fā)B功能的時候,發(fā)現(xiàn)A功能還存在Bug,這時候就需要先修復A中的Bug,然后先提交A中的Bug修復后的內(nèi)容,然后再提交B的。這樣就可以使提交版本歷史記錄的更清晰,方便回滾。而提交是原子性操作,文件的選擇就交于暫存區(qū)去做,每一次提交都是一個完整的功能開發(fā),保證commit的干凈,降低commit的粒度。

          1. 查看工作區(qū)和版本庫里面最新版本的區(qū)別:
          git diff HEAD -- [filename]
          1. 移除文件:

          有時候需要先從暫存區(qū)移除某文件,然后提交更新本地倉庫。移除命令如下:

          git rm [filename] 
          1. 對文件重命名:
          git mv README.*** README 
          (這個命令相當于 mv README.*** README、git rm README.***、git add README 這三條命令的集合)
          1. 查看提交歷史:

          在提交了若干更新,又或者克隆了某個項目之后,也許想回顧下提交歷史。完成這個任務最簡單而又有效的工具是 git log 命令。git log 會按提交時間列出所有的更新,最近的更新排在最上面。加上--pretty=oneline后輸出的信息就不會那么多。

          $ git log
          commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
          Author: Michael Liao <[email protected]>
          Date:   Fri May 18 21:06:15 2018 +0800

              append GPL

          commit e475afc93c209a690c39c13a46716e8fa000c366
          Author: Michael Liao <[email protected]>
          Date:   Fri May 18 21:03:36 2018 +0800

              add distributed

          commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
          Author: Michael Liao <[email protected]>
          Date:   Fri May 18 20:59:18 2018 +0800

              wrote a readme file
          $ git log --pretty=oneline
          1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
          e475afc93c209a690c39c13a46716e8fa000c366 add distributed
          eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
          1. 版本回退:
          git reset --hard HEAD^ 回退到上一版本
          git reset --hard HEAD^^ 回退到上上版本
          git reset --hard HEAD~100 回退到前100個版本
          git reset --hard [版本號] 回退到固定版本號
          git reflog 記錄每一次的命令(可以查看版本號)
          1. 推送本地的改動到遠程倉庫,使本地倉庫和遠程倉庫一致

          如果還沒有克隆現(xiàn)有倉庫,并欲將你的倉庫連接到某個遠程服務器,你可以使用如下命令添加:

          ·git remote add origin <url>

          如果已經(jīng)關聯(lián)了遠程倉庫,可以使用下述命令看一下遠程倉庫是哪個:

          git remote -v

          然后將本地的改動提交到遠程倉庫:

          git push origin [分支]

          如此你就能夠將你的改動推送到所添加的服務器上去了。

          分支管理

          分支是用來將特性開發(fā)絕緣開來的。在你創(chuàng)建倉庫的時候,master 是“默認的”分支。在其他分支上進行開發(fā),完成后再將它們合并到主分支上。我們通常在開發(fā)新功能、修復一個緊急 bug 等時候會選擇創(chuàng)建分支。單分支開發(fā)好還是多分支開發(fā)好,還是要看具體場景來說。

          一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:

          每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。

          • 創(chuàng)建一個分支dev
          git branch dev
          git branch 后面不加分支的名字就是查看當前的分支
          • 切換當前分支到 dev
          git checkout dev 
          • 創(chuàng)建并切換分支
          git checkout -b dev   (兩條命令的合寫)
          • 切換到主分支
          git checkout master 
          • 合并dev分支到master(可能會有沖突)
          git merge dev 

          那沖突該怎么解決呢?
          首先通過git status命令查看一下沖突的文件,然后使用cat [文件名]查看該文件內(nèi)是那幾行的代碼出現(xiàn)了沖突,git是用<<<<<<<,=======,>>>>>>>標記出不同分支的內(nèi)容,其中<<<HEAD是指主分支修改的內(nèi)容,>>>>>dev是指dev上修改的內(nèi)容,最后手動解決一下,再執(zhí)行合并操作。

          • 把剛新建的分支刪掉
          git branch -d dev 
          • 將分支推送到遠端倉庫(推送成功后其他人可見):
          git push origin [分支名]

          這里可能會存在push失敗的情況,那很可能就是因為你的另一個小伙伴和你修改了同一個文件的代碼并且他push完成了,而你本次push的文件與遠程倉庫中現(xiàn)有的該文件產(chǎn)生了沖突,那需要先pull一下,再push:

          git pull 
          ps: 如果失敗了,根據(jù)提示,執(zhí)行 git pull --set-upstream-to=origin/<branch> <branch>
          就是說讓你指定本地分支和遠程分支的鏈接





          往期推薦

          CPU 空閑時在干嘛?
          Spring Boot 開發(fā)微信公眾號
          Spring 中經(jīng)典的 9 種設計模式
          為什么軟件開發(fā)很難?真相了!!
          Java+Vue 實現(xiàn)的在線考試系統(tǒng)



          最近面試BAT,整理一份面試資料Java面試BAT通關手冊,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結構等等。
          獲取方式:關注公眾號并回復 java 領取,更多內(nèi)容陸續(xù)奉上。
          明天見(??ω??)??
          瀏覽 34
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91天天综合网 | 日逼91| 天天综合网~91网站永久入口 | A黄色视频网站 | 狠狠se |