天天看點

Git入門及常用指令

1、git與github介紹

git與github介紹

Git是什麼

Git是一個開源的[分布式][版本控制系統],用于靈活高效地處理任何或小或大的項目

版本控制器

CVS/SVN/Git

SVN

用戶端/伺服器

GIT

用戶端/代碼托管網站(例如:github)

注1:類似的代碼托管網站還有:github/碼雲/阿裡雲Code源碼管理

注2:類似的技術GitLab,但它與GitHub又有一定的差別

GitLab和GitHub一樣屬于第三方基于Git開發的作品,免費且開源。與Github類似,可以注冊使用者,任意送出你的代碼,添加SSHKey等等。

不同的是,GitLab是可以部署到自己的伺服器上,資料庫等一切資訊都掌握在自己手上,适合團隊内部協作開發,

你總不可能把團隊内部的智慧總放在别人的伺服器上吧?簡單來說可把GitLab看作個人版的GitHub。

Git與SVN差別(重點記錄1/2/3點)

1、去中心化

GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的差別。

2、git倉庫的任何一個拷貝都可以獨立作為一個伺服器來使用

3、在Git中檔案有四種狀态:

未跟蹤(untrack):表示檔案為新增加的

已修改(modified):表示修改了檔案,但還沒儲存到git倉庫中。

已暫存(staged):表示對一個已修改檔案的目前版本做了标記,使之包含在下次送出的快照中

已送出(committed):表示檔案已儲存在git倉庫中。

4、其它

GIT沒有一個全局的版本号,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征。

GIT的内容完整性要優于SVN:GIT的内容存儲使用的是SHA-1雜湊演算法。這能確定代碼内容的完整性,確定在遇到磁盤故障和網絡問題時降低對版本庫的破壞

5、直接記錄快照,而非差異

GIT把内容按中繼資料方式存儲,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隐藏在一個類似.svn,.cvs等的檔案夾裡。

直接記錄快照,而非差異

6、直接記錄快照,而非差異

GIT分支和SVN的分支不同,分支在SVN中一點不特别,就是版本庫中的另外的一個目錄。

Git入門及常用指令

Github 的簡單使用

登入github網站

公庫javaxx_pub

Git入門及常用指令

私庫:javaxx

Git入門及常用指令

建立檔案夾

建立檔案

可建立檔案以及檔案夾用/分開自動添加前面内容為檔案夾名

Git入門及常用指令

删除

首先選擇(點選)你想要删除的庫,點選setting

Git入門及常用指令
Git入門及常用指令

然後滾輪滑到最下面,一點要填對庫名,否則沒得庫可以删除。

Git入門及常用指令

Git下載下傳安裝

下載下傳位址:

https://git-scm.com/downloads

下載下傳完成之後:

Git入門及常用指令

建立開始菜單目錄名稱,預設git,不需要修改

Git入門及常用指令

項目儲存名 不需修改 預設就行

Git入門及常用指令

選擇git使用的編輯器

Git入門及常用指令
Git入門及常用指令
Git入門及常用指令

行末換行符轉換,使用預設值

Git入門及常用指令
Git入門及常用指令
Git入門及常用指令
Git入門及常用指令

Install 安裝

Git入門及常用指令
Git入門及常用指令

檢測安裝成功,任意視窗或桌面都可以右鍵,出現下面兩個選項即可

Git入門及常用指令

Git常用指令

Git配置帳号和郵箱(本機)

Git配置帳号和郵箱(本機)

一般剛安裝Git都要配置使用者名和密碼,因為你送出代碼到本地倉庫(上傳代碼到遠端倉庫)時會用到,

如果沒有沒有配置,在你送出時它會提醒你的。但是,如果僅僅克隆(即下載下傳)公有項目,你甚至不需要注冊——剛剛我們建立的賬戶是為了以後

fork 其它項目,以及推送我們自己的修改。

指令行配置

0.“Git bash here”打開指令視窗

1.檢視git的配置清單

git config --list

注1:如果沒有配置東西,應該是空的。照着下面步驟配置完成後,你可以再試一下該指令,就會出現一系列配置資訊

2.設定使用者名/郵箱/密碼

git config --global user.name “username”

git config --global user.email “email”

git config --global user.password “password”

咱不需要密碼,到時候用ssh key

git config --global user.name “javaxiaoxu”

git config --global user.email “[email protected]”

Git入門及常用指令

注1:全局變量

–global 表示全局的,即目前使用者都有效,該配置會出現在 ~/.gitconfig 檔案中,~表示目前使用者的目錄,

比如我的是:C:\Users\lenovo.gitconfig,打開該檔案你會發現如下圖所示的内容:

Git入門及常用指令

注2:局部變量

git config user.name “username”

git config user.email “email”

局部是隻對目前倉庫起效的,它的配置資訊會在目前倉庫根目錄/.git/config檔案下

注意:局部變量覆寫全局變量!!!和程式設計語言裡面的變量關系是一樣的。

注3:删除某個全局配置項

git config --global --unset user.name

Git指令使用場景

git檔案狀态與工作區域(重點)

git的檔案狀态是其git核心内容,了解後對後續的操作有莫大的幫助,不同的檔案狀态又存儲在不同的工作區域中。

1.檔案狀态

git中的檔案有以下幾種狀态

未跟蹤(untrack):表示檔案為新增加的

已修改(modified):表示修改了檔案,但還沒儲存到git倉庫中。

已暫存(staged):表示對一個已修改檔案的目前版本做了标記,使之包含在下次送出的快照中

已送出(committed):表示檔案已儲存在git倉庫中。

2.工作區域

按照本地計算機與遠端計算機劃分,工作區域有以下幾種

1)本地計算機

Working Directory(工作目錄):即正在編輯的檔案狀态。檔案狀态為未跟蹤(untrack)和已修改(modified)在此區域内。

Staging Area(暫存區):儲存了下次将送出的檔案清單資訊。檔案狀态為已暫存(staged)在此區域内。

Repository(本地倉庫):送出到本地倉庫的檔案。

2)遠端計算機

Repository(遠端倉庫):已送出到遠端計算機内的檔案。

Git入門及常用指令

常用指令(重點)

git status :展示工作區及暫存區域中不同狀态的檔案。
   git add :将内容從工作目錄添加到暫存區。
   git commit :所有通過 git add 暫存的檔案送出到本地倉庫。
   git push :将本地倉庫的記錄送出到遠端倉庫。
   git reset HEAD <file> :從暫存區移除指定檔案。
   git checkout -- <file> :從本地倉庫恢複指定檔案。
   git pull :拉取遠端倉庫的資料。
   git init
           

實踐操作:使用git送出檔案至遠端倉庫(重點)

首先明确大緻流程:

1.取得項目的 Git 倉庫

第一種是從github現有倉庫(遠端)克隆出新的倉庫(本地)

第二種是在工作目錄中初始化新的倉庫(本地),然後再與一個Github上的倉庫(遠端)關聯

2.在本地的克隆庫上進行你所需要的改動,修改檔案内容,添加檔案等;

3.add,commit,push三部曲。

從github現有倉庫(遠端)克隆出新的倉庫(本地)

具體步驟:

1.取得項目的Git倉庫(從github現有倉庫克隆)

## 此處url改為自己倉庫的位址

$ git clone https://github.com/javaxiaoxu/javaxx_pub.git

注1:此指令,會在目前目錄下建立一個名為test224_pub的目錄,其中包含一個 .git 的目錄,用于儲存下載下傳下來的所有版本記錄。

如果進入這個建立的 test224_pub目錄,你會看到項目中的所有檔案已經在裡邊了,準備好後續的開發和使用。

注2:克隆倉庫的指令格式為 git clone [url],Git支援多種協定,包括https,但通過ssh支援的原生git協定速度最快

git clone [email protected]:fsliurujie/test.git --SSH協定

git clone git://github.com/fsliurujie/test.git --GIT協定

git clone https://github.com/fsliurujie/test.git --HTTPS協定

提問:那平時使用哪個協定最好呢???

注3:你熟悉其他的 VCS 比如 Subversion,你可能已經注意到這裡使用的是 clone 而不是 checkout。這是個非常重要的差别,

Git 收取的是項目曆史的所有資料(每一個檔案的每一個版本),伺服器上有的資料克隆之後本地也都有了。實際上,

即便伺服器的磁盤發生故障,用任何一個克隆出來的用戶端都可以重建伺服器上的倉庫,回到當初克隆時的狀态

注4:如果希望在克隆的時候,自己定義要建立的項目目錄名稱,可以在上面的指令末尾指定新的名字

git clone https://github.com/javaxiaoxu/javaxx_pub.git mytest1

注5:如何檢視.git目錄(預設為隐藏檔案夾)

window菜單:“檢視”->“選項”->選擇,頁籤“檢視”->勾中“顯示隐藏的檔案、檔案夾和驅動器”

2.檢視初始狀态

git clone 一個倉庫後,運作 git status

注1:另外一種檢視git倉庫狀态的方式

進入test1目錄,用ls -ah指令如果指令竄顯示.git目錄,就表示已經克隆成功,并且該目錄已經是git可以管理的倉庫了

Git入門及常用指令

3:添加一個檔案

在此倉庫中source目錄下添加一個xxx.txt檔案t,運作 git status

注1:可以看到檔案上方有個 “Untracked files”,表示這個檔案“未跟蹤”

4.新建立的檔案添加到“暫存區”

執行 git add source/add.txt ,将會把新建立的add.txt送出到“暫存區”,執行後運作 git status

注1:檔案上方有說明使用 git reset HEAD 可從暫存區移除指定檔案。

Git入門及常用指令

5.“暫存區”的内容送出到“本地倉庫”

執行 git commit,将“暫存區”的内容送出到“本地倉庫”,執行後運作 git status:

注1:如果沒有配置帳号或密碼,會出現以下提示
      *** Please tell me who you are.
 注2:git commit 時出現:please enter the commit message for your changes,
      預設會啟用 shell 的環境變量 $EDITOR 所指定的軟體,一般都是 vim(沒錯啦,就是linux課程使用過滴) 或 emacs,

      即詢問你是否要添加“送出說明”
      要輸入“送出說明”的話就需要
      1.按鍵盤字母 i 進入insert模式
      2.修改最上面那行黃色合并資訊,可以不修改
      3.按鍵盤左上角"Esc"
      4.輸入":wq",注意是冒号+wq,按Enter鍵即可

      也可以使用 -m 參數後跟“送出說明”方式,在一行指令中送出更新。
      git commit -m “送出說明”
      另外,送出說明在團隊合作中是非常重要的一點,要盡量寫的簡潔而語意清晰
           
Git入門及常用指令
Git入門及常用指令

下面這個是檔案被修改時候以及直接送出注釋的情況

git commit -am “被修改的檔案,跳過暫存區直接放入本地倉庫注釋說明”

6.“本地倉庫”的内容送出到“遠端倉庫”

執行 git push,将“本地倉庫”的内容送出到“遠端倉庫”,執行後運作 git status

提示:可以看到送出後git狀态又回到初始化狀态。

注意:這裡要輸入github網站的使用者名(郵箱、或者登入賬号javaxiaoxu)、密碼

工作目錄中初始化新的倉庫(本地),然後再與一個Github上的倉庫(遠端)關聯

1.取得項目的Git倉庫(在工作目錄中初始化新的倉庫)

要對現有的某個項目開始用 Git 管理,隻需到此項目所在的目錄,例如:

E:\InstallPath\git_repository\javaxx\javaxx_pub,

執行:git init

2.同上

3.同上

4.同上

5.同上

6.“本地倉庫”的内容送出到“遠端倉庫”

執行 git push,将“本地倉庫”的内容送出到“遠端倉庫”,會報出如下錯誤

fatal: No configured push destination.

Either specify the URL from the command-line or configure a remote repository using

這是,因為本地倉庫并未與任何一個遠端倉庫關聯,是以第一次送出時必須提供遠端倉庫的URL,具體操作如下:

在github先建倉庫test3,目前,在GitHub上的這個倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,

## 也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的内容推送到GitHub倉庫。
 1.打開浏覽器,登陸github後,建立一個倉庫test3(目前在GitHub上的這個倉庫還是空的),它的位址為:
   https://github.com/lixiao12/test224_pub2.git

   注1:在GitHub首頁建立test3倉庫,注意不要添加README.md等任何檔案

 2.将本地倉庫的目前分支與遠端倉庫相關聯 
   git remote add originhttps://github.com/javaxiaoxu/javaxx_pub2.git
   
   注1:文法:git remote add <name> <url>
        遠端庫的名字就是origin,這是Git預設的叫法,也可以改成别的,但是origin這個名字一看就知道是遠端庫
        
   注2:https://github.com/javaxiaoxu/javaxx_pub2.git改成自己倉庫對應的URL
   
   注3:補充指令,如果url打錯了,可以通過如下指令修改遠端倉庫關聯
        git remote set-url origin https://github.com/javaxiaoxu/javaxx_pub2.git

 3.将本地代碼庫的某一分支(eg:master)推送到遠端的代碼庫
   git push -u origin master
   注1:把本地庫的内容推送到遠端,用git push指令,實際上是把目前分支master推送到遠端
        由于遠端庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支内容推送的遠端新的master分支,
        還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化指令。
   注2:補充指令,檢視git倉庫的遠端代碼庫的位址:git remote -v
   注3:再次添加檔案b.txt,依次add/commit/push操作,則與之前沒有差別了  
           
Git入門及常用指令

使用git從遠端倉庫pull(拉)至本地倉庫(重點)

git pull

Git入門及常用指令

Git沖突

1、先從遠端倉庫pull代碼至本地,再修改沖突代碼, git pull

注1:git status檢視倉庫狀态,會顯示紅色的錯誤提示消息“ both modified: 沖突.txt”

2、打開 沖突.txt,手動修改沖突部分的代碼

Git入門及常用指令

3.依次add/commit/push代碼至遠端倉庫

commit執行完成,重新檢視倉庫狀态git status,紅色的錯誤提示消息“ both modified: 沖突.txt”

已經沒有,表示沖突已解決

Git入門及常用指令

Over~~~~~~~~~~~~~~~~·