git版本控制

shellhtml

1.什麼是shell?node

  在計算機中shell俗稱殼,用來區別Kernel(核),是指"提供使用者使用界面的軟件",(命令解析器),它相似於DOS下的command和後來的cmd.exe,linux

用來接收用戶命令,而後調用相應的應用程序.git

2shell分類github

   1.圖形界面shell:  經過提供有好的可視化界面,調用相應的應用程序,如:windows系列操做系統,Linux系統上的圖形化應用程序GNOME,KDE等;shell

     2.命令行shell  :  經過鍵盤輸入特定的命令的方式,調用相應的應用程序,如windows系統的cmd.exe,Windows  PoweShell,linux系統的Bourne shell,Bourne Again shell(bash)等;數據庫

1.3  認識bash和這個shellwindows

       在window系統下使用bash,須要一個軟件,這個軟件模擬集成了bash大部分命令;bash

        各個shell的功能都差很少,Linux默認使用bash,服務器

   1.  bash命令格式

    命令  [-options][參數],   tar  zxvf  demo.tar.gz

   查看幫助:  命令  --help

  2  bash 常見命令

     pwd 查看當前目錄

     cd   切換目錄

     ls   查看當前目錄下內容   ls  -al

     mkdir 建立目錄  mkdir  wjx

    touch  建立文件    touch  index.html

    cat  查看文件所有內容   cat  index.html

    more  less  查看文件  more/etc/passwd/ ,less/etc/passwd

    rm  刪除文件    rm index.html ,  rm -rf  blog   遞歸刪除

   rmdir  刪除文件夾,只能刪除空文件夾,不經常使用

   mv   移動文件或者重命名  如:  mv index.html   ./demo/index.html

    cp  複製文件  cp index.html  ./demo/index.html

    head  查看文件前幾行    head  -5  index.html

    tail   查看文件後幾行   -n -f  如  tail index.html   , tail -f -n  5 index.html

    tab   自動補全  連an兩次會將全部匹配內容顯示出來

    history  查看操做歷史

     ssh  遠程登陸  如:  ssh root@gitlab.study.com

    >和  >>重定向    如:  echo  hello world! > README.md,  >覆蓋 >>追加

     wget  下載 , 如  wget https://modejs.org/dist/v4.4.0/node-v4.4.0tar.gz

    tar 解壓縮,如 tar zxvf node-v4.4.0.tar.gz

    curl  網絡請求,如 curl  http://www.baidu.com

   whoami   查看當前用戶

   '|'  管道符能夠將多個命令連接使用,上一次(命令)的執行結果會當成下一次的執行參數;

    grep 匹配內容,通常結合管道符使用

  1.4 vi編輯器

  如Windows下的記事本,vi編輯器是Linux下的標配,經過它,咱們能夠建立文件,編輯文件,他是一個隨着系統一塊兒安裝的文本編輯軟件;

  1,三種模式

    vi 編輯器提供了三種模式,  分別是 :命令模式 , 插入模式 ,底行模式;每種模式下用戶所能進行的操做是不同的;

3種模式的切換以下圖所示:

2.使用編輯器

                                         git使用

1.安裝

Window安裝

http://git-scm.com/download/win下載Git客戶端軟件

Linux安裝

CentOS發行版:sudo yum install git

Ubuntu發行版:sudo apt-get install git

Mac安裝

打開Terminal直接輸入git命令,會自動提示,按提示引導安裝便可。

git三種狀態 已提交,已修改,已暫存;

 git三個工做區域:Git倉庫,工做目錄,暫存區域,

    Git倉庫目錄是git用來保存項目的元數據和對象數據庫的地方,這是git最重要的部分,從其餘計算機克隆倉庫時,拷貝的就是這裏的數據;

   工做目錄是對項目的某個版本獨立提取出來的內容,這些從git倉庫的壓縮數據庫提取出來的文件,放在磁盤上供你使用和修改;

  暫存區域是一個文件,保存了下次將要提交的文件信息列表,通常在git倉庫目錄中;

基本的Git工做流程以下:

    一、在工做目錄中修改文件。

    二、暫存文件,將文件的快照放入暫存區域。

    三、提交文件,找到暫存區域的文件,將快照永久性存儲到Git倉庫目錄。

•           Git本地倉庫

Git本地倉庫指的是開發者開發設備中的倉庫

•                    Git基礎

命令行方式:任意目錄(建議開發目錄)右鍵 > Git Bash Here

1、配置用戶

  配置用戶的意義在於記錄開發者信息,以便在版本控制記錄開發者的操做行爲,如lion於2016-08-24解決了一個bug。

git config --global user.name "自已的名字"

git config --global user.email "自已的郵箱地址"

--global 配置當前用戶全部倉庫

--system 配置當前計算機上全部用戶的全部倉庫

注:配置用戶只須要執行1次,能夠重複使用。

2、初始化倉庫

要用git進行版本控制,須要將現有的項目初始化爲一個倉庫,或者將一個已有的使用git進行版本控制的倉庫克隆到本地;

a) git init

git init只是建立了一個名爲.git的隱藏目錄,這個目錄就是存儲咱們歷史版本的倉庫,ls -al 能夠查看。

b) 假如公司已有項目用了Git,那咱們就利用克隆

git clone 倉庫地址

執行完這個命令,會在當前目錄下生成一個Monment目錄(默認和倉庫名稱相同),這個即是已有一個使用Git管理的項目。

3、查看文件狀態

初始化倉庫後即可以進行開發了,進入到剛剛建立好並初始爲倉庫的目錄,添加咱們開發須要的文件。

經過git status能夠檢測當前倉庫文件的狀態;

注:git會忽略空的目錄

4、添加文件到暫存區

假設通過一段時間的開發後,須要把已開發的部分存起來,使用git add 添加到暫存區。

git add 文件名 「*」或-A表明全部;

放到暫存區的文件被標記成了綠色,等待提交。

注:顏色是工具給添加的,目的是增長可讀性並非git統一的。

五、撤銷更改

繼續咱們的開發

再次git status能夠再次查看倉庫狀態;

說明index.html再次被修改了,並被標記了紅色。

又通過一段時間後發現新開發的部分有Bug,想要回到以前狀態,可使用git checkout 文件名。

注:從暫存區還原原到工做區;

5、提交文件

通過一個相對較長階段開發或者一個功能開發完成了,就能夠提交到本地倉庫了,永久保存了。

git commit -m '備註信息';

將暫存區被標記成綠色的文件,所有提交到本地倉庫存儲。

這時git status查看狀態

沒有什麼可提交的,變的很乾淨

6、查看提交歷史

反反覆覆開發了不少的功能了,經過git log查看一下提交的歷史。

咱們能夠查看到一次次提交記錄

commit 81b1e4fc2ae178caedf4575596377a80a6f1e73f

表明一次提交的惟一ID,通常稱爲SHA值。傻?

注:按鍵盤q鍵退出。

7、再次檢測倉庫文件狀態

隔了好些天后,繼續開發

git status 查看狀態

又提示有修改,等待從新添加到暫存區。

8、從新添加暫存區而後提交

九、再次查看歷史

git log 可查到全部提交歷史

這時能夠查看到更多提交歷史。

這時關掉全部目錄甚相當機!

10、恢復上一次提交的狀態

經過SHA值能夠回到以前某一次的提交(時光倒流)

git reset --hard c888a614e072e2這樣便回到了支付功能的狀態

git log再次查看發現最後一次提交成了支付功能了

•                    Git分支

 

在咱們的現實開發中,需求每每是五花八門的,同時開發個需求的狀況十分常見,好比當你正在專一開發一個功能時,忽然有一個緊急的BUG須要你來修復,這個時候咱們固然是但願在可以保存當前任務進度,再去修改這個BUG,等這個BUG修復完成後再繼續咱們的任務。如何實現呢?

經過Git建立分支來解決實際開發中相似的問題。

在Git的使用過程當中一次提交稱爲歷史記錄(版本),而且會生成一個惟一的字符串,

這個串能夠表明某一個歷史版本(實際使用只取前面幾位就能夠),

值得注意的是全部的提交(commit)實際上都是在分支(branch)的基礎上進行的。

當咱們在初始化倉庫的時候(其實是產生第1次提交時),Git會默認幫咱們建立了一個master的分支,而且有指針(HEAD)指到了末端。

指針(HEAD)用來標明當前處於哪一個分支的哪一個版本,如上圖指的處於master分支的最後1個版本。

咱們也能夠建立自已的分支;

1、建立分支

git branch hotfix

新的分支會在當前分支原有歷史版本的結點上進行建立,我稱其爲子分支;

新建的子分支會繼承父分支的全部提交歷史。

二、切換分支

git checkout hotfix      HEAD如今又指向了hotfix的末端。

3、再次提交操做

修改bug後,提交;

此次的提交歷史版本就會記錄在hotfix這個分支上了,而且HEAD伴隨hotfix在移動。

4、當咱們再次切回到master

當咱們切換回master後,HEAD指向了master分支的末端,而且咱們觀察發現咱們的文件內容仍是原來的「模樣」

5、繼續以前的開發

總結:當咱們git checkout branchname時,HEAD會自動指向對應分支的末端,工做目錄中的源碼也會隨之發生改變。

這個時候咱們就在hotfix這個分支上修復了這個BUG,而咱們原來在master分支上的操做並未受到影響。

思考一個問題:

如今master這個分支上是否包含了hotfix的修復呢?

實際上從上圖能夠看出這時的master分支並無包含有hotfix的修復。

6、合併(融合)分支

這時master會有兩個父結點了,master便包含了hotfix裏的修復了;

7、刪除分支

git branch -d hotfix

這時用來修復BUG建立的hotfix分支已經沒有用處了,咱們能夠將它刪除。

•           Git遠程(共享)倉庫

 

   經過上面學習咱們能夠很好的管理本地版本控制了,但是若是咱們下班回到家裏忽然來了靈感受得有部分代碼能夠優化,若是能接着公司電腦上的代碼繼續寫該有多好呀!另外一種情形,假設項目比較大,不一樣的功能模塊由不一樣的開發人員完成,不一樣模塊兒之間又不免會依賴關係,這時若是咱們的代碼互相合並(融合)該有多好呀!全部模塊開發完畢後,須要整合到一塊兒,要能作到準確無誤該有多好呀!

藉助一個遠程倉庫,你們能夠共享代碼、歷史版本等數據,即可以解決以上遇到的全部問題,在學習遠程倉庫前咱們先來學習git clone path這個命令。

3、建立共享倉庫

Git要求共享倉庫是一個以.git結尾的目錄。

mkdir repo.git 建立以.git結尾目錄

cd repo.git 進入這個目錄 

git init --bare 初始化一個共享倉庫,也叫裸倉庫 注意選項--bare  

這樣咱們就建好了一個共享的倉庫,但這時這個倉庫是一個空的倉庫,而且不容許在這個倉庫中進行任何修改。

  4、向共享倉庫共享(同步)內容 

將自已開發的項目同步到這個目錄中,其它開發者就能夠共享你開發的項目了。

一、進入到yike目錄

二、git push ../repo.git master

這樣便把yike中的項目同步進了repo.git中。

5、從共享倉庫裏取出內容

一、新建立一個目錄(模擬另外一個開發者)

二、git clone ./repo.git demo

經過repo.git共享倉庫,咱們輕鬆獲得了一個yike的副本

6、經過demo倉庫向repo.git共享內容

進入到demo裏,咱們作一些修改

cd demo

git push ../repo.git master

7、在360倉庫從repo.git獲取共享的內容

cd yike

git pull ../repo.git master

奇蹟彷佛發生了,咱們輕鬆的將demo倉庫裏的內容,經過repo.git共享給了yike倉庫。

驚喜不斷,問題也老是不斷,咱們發現咱們這個共享的倉庫只是放到了本地的,其它人是沒有辦法從咱們這個共享倉庫共享內容的!!!

咱們把這個共享的倉庫放到一臺遠程服務器上,問題不就解決了嗎?

•           gitHubgitLab

若是咱們熟悉服務器的話,咱們徹底能夠將上述的步驟在咱們的遠程服務器上進行操做,而後再作一些登陸權限的設置,就可很是完美的搭建一個共享服務器了。其實爲了更好的管理咱們的倉庫,一些第三方機構開發出了Web版倉庫管理程序,經過Web界面形式管理倉庫。----------------gitHub

1、註冊帳號並完善資料

2、建立共享倉庫   右上角 New respository

3、填寫倉庫資料

4、共享倉庫

遠程地址特別長,咱們能夠給他起一個別名

git remote add origin git@github.com:Botue/repo.git

這樣origin 就表明 git@github.com:Botue/repo.git

當咱們經過git clone 從共享倉庫獲內容時,會自動幫咱們添加origin到對應的倉庫地址,例如:git clone git@github.com:Botue/repo.git 會自動添加origin 對應 git@github.com:Botue/repo.git

5、生成密鑰

ssh-keygen -t rsa 而後一路回車,這裏會在當前用戶生成了一個.ssh的文件夾

將id_rsa.pub公鑰的內容複製

打開gitHub的我的中心

打到SSH keys

到此咱們即可以經過gitHub 提供的Web界面來管理咱們的倉庫了。

咱們發現經過gitHub管理倉庫實在是太方便了,但是隻能無償使用公開倉庫,自已公司的代碼固然不能公開了,但是私有倉庫又是須要交「保護費」的,無耐國人仍是比較喜歡免費的,網絡界老是有不少雷峯的,好比gitLab!!!

•           命令彙總

git config配置本地倉庫

經常使用git config --global user.name、git config --global user.email

git config --list查看配置詳情

git init 初始一個倉庫,添加--bare能夠初始化一個共享(裸)倉庫

git status 能夠查看當前倉庫的狀態

git add「文件」 將工做區中的文件添加到暫存區中,其中file但是一個單獨的文件,也能夠是一個目錄、「*」、-A

git commit -m '備註信息' 將暫存區的文件,提交到本地倉庫

git log 能夠查看本地倉庫的提交歷史

git branch查看分支

git branch「分支名稱」 建立一個新的分支

git checkout「分支名稱」 切換分支

git checkout -b deeveloper 建立並切到developer分支

git merge「分支名稱」 合併分支

git branch -d 「分支名稱」 刪除分支

git clone 「倉庫地址」獲取已有倉庫的副本

git push origin 「本地分支名稱:遠程分支名稱」將本地分支推送至遠程倉庫,

git push origin hotfix(一般的寫法)至關於

otfixgit push origin hotfix:h

git push origin hotfix:newfeature

相關文章
相關標籤/搜索