乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      git原理圖解

       黃家v少 2019-04-13

       

      正文

      本文背景,在實(shí)際項(xiàng)目中使用git已有一年,發(fā)現(xiàn)不少同事雖然會(huì)使用常用git指令,但并不理解每個(gè)指令對(duì)應(yīng)的作用原理。今天靜下心總結(jié)下git 的基本理解:代碼的存在區(qū)域;本文以實(shí)際項(xiàng)目出發(fā),理清使用git過程中,代碼的遷徙流程。

      git跟傳統(tǒng)的代碼管理器(如:svn)不同, 主要區(qū)別在于git多了個(gè)本地倉(cāng)庫(kù)以及緩存區(qū),所以即使無(wú)法聯(lián)網(wǎng)也一樣能提交代碼。術(shù)語(yǔ)解釋:

      工作區(qū)間: 即我們創(chuàng)建的工程文件, 在編輯器可直觀顯示;

      緩存區(qū): 只能通過git GUI或git shell 窗口顯示,提交代碼、解決沖突的中轉(zhuǎn)站;

      本地倉(cāng)庫(kù): 只能在git shell 窗口顯示,連接本地代碼跟遠(yuǎn)程代碼的樞紐,不能聯(lián)網(wǎng)時(shí)本地代碼可先提交至該處;

      遠(yuǎn)程倉(cāng)庫(kù): 即保存我們代碼的服務(wù)器,本文以公共版本控制系統(tǒng):github為例,登錄github賬號(hào)后可直觀顯示;

      接下來(lái), 我們以三個(gè)實(shí)際操作的例子講解git的日常,代碼如何在上述4個(gè)區(qū)域流動(dòng)。

      1.提交 代碼到遠(yuǎn)程倉(cāng)庫(kù)

      首先在本地工作區(qū)間創(chuàng)建一個(gè)新工程:testGit,然后在項(xiàng)目里新建一個(gè)README.md, 工作區(qū)間的工程如下:

      遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建一新工程,具體操作參見 如何在window上把你的項(xiàng)目提交到github

      將該新建的工程提交至遠(yuǎn)程倉(cāng)庫(kù),關(guān)鍵的git 指令如下:

      git init
      git add README.md
      git commit -m "首次提交代碼"
      git remote add origin https://github.com/wteam-xq/testGit.git
      git push -u origin master

      指令解釋:

      `git init ` 表示在當(dāng)前的項(xiàng)目目錄中生成本地的git管理;

      `git add README.md` 將“README.md”文件保存至緩存區(qū),實(shí)際開發(fā)中一般使用 `git add -A`,使用-A:將新增、刪除、修改的文件改動(dòng)全保存至緩存區(qū);

      `git commit -m "first commit"` 將代碼從緩存區(qū)保存至本地倉(cāng)庫(kù),實(shí)際開發(fā)中一般使用`git commit -am "說(shuō)明的文字"`,使用 -a:如果沒文件更改操作(增、刪、改名)就可以省略git add指令;

      `git remote add origin https://github.com/wteam-xq/testGit.git`將本地倉(cāng)庫(kù)與指定的遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建 聯(lián)系;

      `push -u origin master` 將本地倉(cāng)庫(kù)代碼推送至遠(yuǎn)程倉(cāng)庫(kù),實(shí)際開發(fā)中 該指令后需要輸入github 賬號(hào)以及密碼。(首次提交注意別遺漏`-u`指定默認(rèn)主機(jī))

      以上指令正常執(zhí)行后, 本地倉(cāng)庫(kù)的代碼就提交到遠(yuǎn)程倉(cāng)庫(kù)了:

      原理圖如下:

      2.將遠(yuǎn)程倉(cāng)庫(kù)代碼更新到本地

      首先我們新建一文件夾:copyTestGit,進(jìn)入該文件夾后使用git 指令:

      git clone https://github.com/wteam-xq/testGit

      指令執(zhí)行完畢后, 就在該文件夾下生成一份副本啦(相當(dāng)于多人協(xié)作時(shí)另一臺(tái)設(shè)備上的工程文件),原理圖如下:

      接下來(lái), 討論`git pull`、 `git fetch` 、 `git merge`的關(guān)系

      先拋簡(jiǎn)單結(jié)論:

      git pull
      #等同于下面命令
      git fetch
      git merge

      實(shí)際項(xiàng)目:我們?cè)趖estGit工程中修改README.md,然后更新、提交下代碼 執(zhí)行以下git 指令(日常使用中會(huì)用`git status`看看是否有文件需要`git add`):

      git commit -am 'update readme.md'
      git push origin master

      原理圖如下:

      遠(yuǎn)程倉(cāng)庫(kù)代碼更新后, 我們進(jìn)入另一本地倉(cāng)庫(kù):copyTestGit\testGit,將遠(yuǎn)程倉(cāng)庫(kù)的代碼更新至該本地倉(cāng)庫(kù)。

      在該目錄下輸入以下git指令:

      git fetch 
      git merge origin/master

      日常使用圖方便一般都是直接:

      git pull

      以上指令的詳細(xì)探討請(qǐng)看 少用pull,多用fetch 和 merge

      注意: 本文注重git工作原理圖不考慮多分支情況,且使用了git clone所以副本工程已經(jīng)跟主分支建立了追蹤關(guān)系,所以'pull' 'fetch' 后都不接分支代碼 )

      以上指令區(qū)別的原理圖:

      3.更新到本地倉(cāng)庫(kù)時(shí), 出現(xiàn)沖突,解決沖突

      首先, 我們先重現(xiàn)下出現(xiàn)沖突的情況; 在testGit目錄下先修改README.md文件第三行,hello word 修正為 hello world:

      提交該修改到遠(yuǎn)程倉(cāng)庫(kù)(提交細(xì)節(jié)參照前述步驟):

      然后, 在副本工程copyTestGit/testGit 目錄下也修改README.md文件第三行,hello word 修正為 hello world2:

      現(xiàn)在副本工程修改完了代碼打算提交,提交前先將遠(yuǎn)程倉(cāng)庫(kù)最新代碼更新至本地倉(cāng)庫(kù), 慣例使用指令:

      git pull

      指令執(zhí)行之后會(huì)發(fā)現(xiàn)以下沖突提示:

      出現(xiàn)以上提示, 說(shuō)明本次更新代碼失敗;主要在于本地工作區(qū)間遠(yuǎn)程倉(cāng)庫(kù)的新代碼沖突了, 圖解如下:

      接下來(lái),有兩種方式處理沖突: 放棄本地修改或 解決沖突后提交本地修改

      3.1 放棄本地修改

      放棄本地修改意味著將遠(yuǎn)程倉(cāng)庫(kù)的代碼完全覆蓋本地倉(cāng)庫(kù)以及本地工作區(qū)間, 如果對(duì)git的指令不熟悉那大可以將本地工程完全刪除,然后再重新拷貝一次(`git clone`)。

      當(dāng)然, git如此強(qiáng)大沒必要用這么原始的方法,可以讓本地倉(cāng)庫(kù)代碼覆蓋本地修改,然后更新遠(yuǎn)程倉(cāng)庫(kù)代碼; 

      本地倉(cāng)庫(kù)代碼完全覆蓋本地工作區(qū)間,具體指令如下:

      git checkout head .

      (注意: 別遺漏 "head" 后的 " ." )

      然后更新遠(yuǎn)程倉(cāng)庫(kù)的代碼就不會(huì)出現(xiàn)沖突了:

      git pull

      原理圖如下:

      3.2 解決沖突后提交本地修改

      覆蓋本地代碼解決沖突方法適合不太懂git的菜鳥, 像我這種git老鳥(其實(shí)并不是(¬_¬))當(dāng)然用更高級(jí)的git指令解決沖突。

      細(xì)心的同學(xué)或許已發(fā)現(xiàn),緩存區(qū) 除了開始出現(xiàn)外,后續(xù)提交代碼、更新代碼篇章都在打醬油;終于,這次沖突解決事件, 它將會(huì)是主角!

      解決沖突后提交本地修改的思路大概如下:

      將本地修改的代碼放在緩存區(qū), 然后從遠(yuǎn)程倉(cāng)庫(kù)拉取最新代碼,拉取成功后再?gòu)?strong>緩存區(qū)將修改的代碼取出, 這樣最新代碼跟本地修改的代碼就會(huì)混雜在一起, 手工解決沖突后, 提交解決沖突后的代碼。

      原理圖:

      對(duì)應(yīng)到我們實(shí)際項(xiàng)目中, 進(jìn)入 copyTestGit/testGit 執(zhí)行指令`git pull`出現(xiàn) (重回到上述沖突場(chǎng)景)

      error: Your local changes to the following files would be overwritten by merge:
              README.md
      Please, commit your changes or stash them before you can merge.
      Aborting

      將本地修改放入緩存區(qū)(成功后本地工作區(qū)間的代碼跟本地倉(cāng)庫(kù)代碼會(huì)同步), 具體指令:

      git stash 

      遠(yuǎn)程倉(cāng)庫(kù)獲取最新代碼,具體指令:

      git pull

      然后, 取出本地修改的代碼, 具體指令:

      git stash pop

      然后, git 自動(dòng)合并沖突失敗, 沖突的代碼就很清晰的展現(xiàn)在我們面前了:

      (小廣告:3.2欄更多細(xì)節(jié)請(qǐng)移步本人另一博文git 代碼沖突處理

      手工解決沖突:

      告訴git, 這個(gè)文件(README.md)的沖突 已經(jīng)解決:

      git add README.md

      提交代碼(細(xì)節(jié)參考前述流程):

      git commit -am '終于解決沖突啦!'
      git push origin master

      于是本地有沖突的代碼就提交成功啦!

      后記:

      以上很多git指令適合在無(wú)圖形化界面的linux中使用(例如:阿里云服務(wù)器操作git), 實(shí)際開發(fā)中當(dāng)然是用圖形化界面解決!

      解決沖突之覆蓋本地代碼對(duì)應(yīng)的是: 工程目錄下tortoiseGit(git 小烏龜) “Revert” :

      解決沖突之解決沖突后提交本地修改對(duì)應(yīng)的是: 手工合并沖突代碼后,工程目錄下tortoiseGit(git 小烏龜) “resolve” :

      參考文章:

      1.Git版本控制與工作流

      2.圖解 Git 管理項(xiàng)目代碼

      3.如何在window上把你的項(xiàng)目提交到github

      4.Git遠(yuǎn)程操作詳解

      5.Git 少用 Pull 多用 Fetch 和 Merge

      6.Git教程推薦一(廖雪峰)

      7.Git教程推薦二(云溪)

      8.Mac OS X Git安裝教程

      9.git-ssh 配置和使用

      10.github設(shè)置添加SSH

      11.生成多個(gè)git ssh密鑰

      12.ssh-agent 使用指南

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多