Mac下git的環境搭建和基本使用

shaa3747發表於2018-05-13

前言

本文將介紹git的基本概念、環境搭建、日常使用,主要針對剛接觸git,或接觸不久,或好久沒用忘記的同學們,當然是基於mac環境的,window系統也是大同小異!本文將從以下幾個模組介紹,希望能幫助到你們:

注:git可以管理圖片、文件、程式碼等資源,為描述方便,本文以程式碼舉例描述,其他資源使用同理;本文描述力求生動形象,所以部分細節可能模糊一點,暫且忽略即可~
  • Git的基本介紹
  • Git下載及安裝
  • Git基本配置
  • 生成金鑰並關聯倉庫
  • 日常使用場景

Git的基本介紹

  • 是什麼?
    一個管理程式碼的工具;
    我們可以通過它把本地倉庫的程式碼提交至遠端倉庫;
    我們可以隨意切換到曾經修改過的某一版本;
    它可以將你的一份程式碼衍生成多個分支,每個分支都可以修改;
    而且可以將某一分支的改動合併到另一個分支;
    本地倉庫同一時間只能對應某一遠端倉庫的分支

  • 涉及概念
    遠端倉庫:服務端存放程式碼的地方,如github、碼雲,或公司的gitlab,本文以github為主
    本地倉庫:當前電腦中的倉庫,會與遠端倉庫建立連線,可往遠端倉庫上傳或下拉程式碼
    金鑰:本地倉庫與遠端倉庫建立連線的鑰匙,本地存放私鑰,遠端存放公鑰,配對才能建立連線
    遠端分支:遠端倉庫可以建立多個分支(預設只有一個master分支),多個分支可以隨意切換、各自修改
    本地分支:本地倉庫也可以建立多個分支(預設只有一個master分支),本地分支一般會與一個遠端分支關聯,當然可以切換

  • 使用流程
    為便於理解,粗略介紹一般使用流程,後面會詳細介紹各個步驟和其他使用場景
    1、下載安裝並配置git環境
    2、生成金鑰對:一個公鑰,一個私鑰
    3、建立一個遠端倉庫,如在github上註冊賬號,並建立一個倉庫,上傳公鑰
    4、在本地克隆一份遠端倉庫,作為本地倉庫
    5、本地倉庫作改動,然後提交至遠端倉庫

Git的下載及安裝

點選Git,然後選擇下載安裝包
Mac下是不需要主動配置環境變數的(系統已經預設配置),所以可以直接通過以下命令來檢視版本號

 git version

若能顯示如下說明安裝完成

 git version 2.15.1 (Apple Git-101)

若提示

 xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install.
 Choose an option in the dialog to download the command line developer tools   

或者

 xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist, 
 use `xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command 
 line developer tools (or see `man xcode-select`)

說明你的mac沒有安裝 xcode,一般使用者也不需要去官網下載全部xcode環境,使用以下命令部分安裝即可

 xcode-select --install // 點選安裝,單獨安裝CommandLineTools   
 sudo xcode-select --switch /Library/Developer/CommandLineTools

安裝後再次執行上述檢視version命令,正常顯示說明安裝完成

Git基本配置

可以通過以下指令檢視當前git的config配置

git config --list

通過以下指令配置使用者名稱和郵箱,git提交時會需要這些資訊

git config --global user.name "your_name"  
git config --global user.email "your_email@gmail.com"
git config core.ignorecase false // 本地倉庫檔案是否大小寫敏感,建議配置(不配置也沒關係)

到此,git環境已經安裝配置完成

生成金鑰並關聯倉庫

1、先檢視本地是否有金鑰對,有的話就不用建立了,如果是第一次安裝肯定是沒有的,開啟終端,執行以下命令

cd ~/.ssh 

金鑰生成後會存放在.ssh檔案下,若此檔案存在並ls後顯示如下內容,說明你建立過,直接關聯倉庫即可,否則繼續生成

id_rsa  id_rsa.pub known_hosts

2、通過以下命令生成金鑰對

ssh-keygen -t rsa -C "your_email@youremail.com" // 這裡是你自己的郵箱啊親!不敢太實在了

建立過程中,會詢問你金鑰儲存位置,直接enter就好,會讓你設定密碼,可直接enter,也可輸入密碼(輸密碼時是不顯示輸入進度的,直接按鍵盤就好了,別傻傻的等),最後顯示一個矩形方框就說明建立成功了

3、上傳金鑰
私鑰就存在本地即可,公鑰需要上傳至遠端倉庫,這樣才能讓本地倉庫和遠端倉庫建立連線;同步驟1,cd到.ssh檔案,ls出上述三個檔案,然後複製公鑰id_rsa.pub內容,如下

xxxdeMBP:~ liyang$ cd ~/.ssh
xxxdeMBP:.ssh liyang$ ls
id_rsa      id_rsa.pub  known_hosts
xxxdeMBP:.ssh liyang$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRIqBw5EEyfmXX6NJ3gZB7SOFC1ATsiSPgVb8kchYNvM7qS8h/WJeFPVcY+5Uyx
SlQ/aGH1UtnLJVrTUryO5iOFN+VKSwsJPFUxxx61TQ5pV5v/HK3FzXe8+2F5ZFrGmeWr7oaWXDS4gS8DWQpY5mzPRY6MsHZ4o2tUw
+5toqlgdR/tVnhOwVa4tZ7HuUbQ4twpt2YuFFix9TAnvLXPReTt3gaFrswLePYRFVniK2pSUAnAnxPugTDH1dFlucuFFREUSy+/kB
YlXdayo8+SkdonoDVG9sHAMb6YyJtpnY/PC28NcBWphcWqI/1yPhqTSFIBo6xxx4LWN3W4t79Un9Z xxyaxx@xxx.com

複製上述四行公鑰,上傳至github:登入賬號、點選頭像、選擇Settings、選擇SSH and GPG keys,然後new一個ssh key,名稱隨便起

4、建立本地倉庫
遠端倉庫建立好之後,複製倉庫地址,然後在本地克隆一個(若你設定過密碼,會要求你輸入密碼,輸入即可),如下

git clone git@github.com:YourCount/GitTest.git // clone後面的連線替換成你自己的

至此,本地倉庫和遠端倉庫都已建立好並建立連線,我們可以使用git來管理程式碼了

日常使用場景

注:雖然目前有不少人性化的gui工具,但我們不應該過於依賴圖形介面,切身經歷,這玩意用久了你就廢了!所以趕緊學用命令列操作吧同學們~

檢視分支

我們通常會關心:本地有哪些分支、遠端有哪些分支、本地分支目前與哪個遠端分支有關聯等,大家在檢視時可能發現自己的遠端和本地都只有一個分支,這個沒有關係,等看完建立分支再回來試用即可

檢視本地分支
git branch

執行上述命令後,在我本地顯示如下,說明我本地有4個分支,當前程式碼所屬的分支是master分支

* master
  v1
  v2
  v3
檢視所有分支
git branch -a

執行上述命令後,我本地顯示如下,說明我共有6個分支,2個遠端分支,4個本地分支

* master
  v1
  v2
  v3
  remotes/origin/master
  remotes/origin/remote_branch_1

執行以下命令可檢視所有分支及其最近一條提交記錄

git branch -av
* master                         5dd8070 測試push
  v1                             5dd8070 測試push
  v2                             5dd8070 測試push
  v3                             5dd8070 測試push
  remotes/origin/master          5dd8070 測試push
  remotes/origin/remote_branch_1 5dd8070 測試push
檢視本地分支與遠端關聯分支
git branch -avv

執行如上命令時,顯示如下,說明我本地分支是master,關聯與遠端分支origin/master。剩下的只有v4與遠端分支有關聯,其他分支都沒有關聯遠端分支

  a                              5dd8070 測試push
  b                              5dd8070 測試push
* master                         5dd8070 [origin/master] 測試push
  v1                             5dd8070 測試push
  v2                             5dd8070 測試push
  v3                             5dd8070 測試push
  v4                             5dd8070 [origin/master] 測試push
  remotes/origin/master          5dd8070 測試push
  remotes/origin/remote_branch_1 5dd8070 測試push
檢視遠端分支直接的關係
git remote show origin
* remote origin
  Fetch URL: git@github.com:xxxx/GitTest.git
  Push  URL: git@github.com:xxxx/GitTest.git
  HEAD branch: master
  Remote branches:
    master          tracked
    remote_branch_1 tracked
  Local branches configured for 'git pull':
    master merges with remote master
    v4     merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

提交程式碼到本地倉庫

本地倉庫和遠端倉庫一樣,也有分支啊、版本啊的概念。所以你本地修改了程式碼,需要先commit到本地倉庫,然後才將commit記錄push到遠端倉庫,這裡我們先說怎麼commit到本地倉庫

檢視本地倉庫狀態

執行以下命令(注意,這些命令需要在本地倉庫的根目錄執行,後面的也是)

 git stauts 

若顯示如下內容,說明你的本地分支是master,而且沒有改動,所以沒什麼可提交的,此時執行git diff也是什麼都沒有

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

若顯示如下內容,說明你的本地分支是master,並且修改了”a“檔案,而且沒有暫存(所有改動暫存後才能提交),此時通過git diff就可以檢視你改動的內容

Your branch is up to date with 'origin/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:   a

no changes added to commit (use "git add" and/or "git commit -a")
提交修改

上文說道,未暫存(這個概念也比較抽象,可以理解成打包或者說是收拾,東西收拾好才能給人嘛)的檔案是不能提交的,所以我們需要先把改動暫存。暫存可以執行如下兩條命令

git add a // 只暫存a檔案,如果當本修改了好多檔案但你只想提交一個,可以使用這個命令
git add . // 暫存全部檔案

當然,對應的,暫存後突然不想暫存了,或者說東西打包好了突然不想給人了,可以拆開嘛,也就是撤銷add操作,對應如下兩條命令

git reset a // 撤銷add a檔案
git reset . // 撤銷add 所有檔案

可以試驗一下,暫存後再通過git status檢視狀態,結果是不一樣的
執行如下命令,提交本次改動

git commit -m "本次修改描述資訊"

後面的描述資訊是提交時一般要備註的,提交時沒必要加雙引號。當然,若你有複雜的提交資訊,可以通過以下命令,在vim裡操作,執行後跟普通的vim操作一樣了

git commit -s

到此,我們本地倉庫已經提交完成,可以通過以下命令來查詢本地提交記錄

git log

我這裡顯示如下結果

commit af1a469deacd3092bb994458131ae82d5babf7ca (HEAD -> master)
Author: xxxxx <xxxxx@xxx.com>
Date:   Sat May 12 23:32:55 2018 +0800

    測試comit vim下的操作

commit 3e79c58a6722ca56687ce30b33e3be5c0aebeaeb
Author: xxxxx <xxxxx@xxx.com>
Date:   Sat May 12 23:29:36 2018 +0800

    測試commit操作

commit 99c36ffaafadae131ea81bt6fb90a199b365f6c9 (origin/master)
Author: xxxxx <xxxxx@xxx.com>
Date:   Fri May 11 01:36:08 2018 +0800

    新增一個檔案

簡單分析下,我這裡列了三條記錄,第三條是我之前建立檔案並push到遠端倉庫了(當然所有log的Author資訊我改了下),所以我們看到第三條括號了寫的是(origin/master)表明已經推送到遠端倉庫了;前兩條是我剛剛commi到本地的,所以顯示(HEAD -> master),我們現在需要做的就是將本地倉庫的程式碼push到遠端倉庫

提交程式碼到遠端倉庫

提交程式碼前,建議先下拉程式碼並rebase。因為我們的一份程式碼,可能多人同時修改,當多人同時修改一處程式碼時會產生分叉合併,所以為了保證分支記錄純淨(只有一條線),我們提交時先把被人提交的pull並rebase一下然後提交自己的,所以執行如下命令

git pull --rebase // push前先下拉並rebase程式碼
git push origin Head:master // 提交程式碼到遠端master分支
git push // 也可以直接這樣提交,前提是當前分支與遠端分支有關聯(當然和上面二選一)

下拉程式碼到本地倉庫

當遠端倉庫有改動時,我們需要將最新程式碼下拉至本地倉庫

git pull --rebase

管理分支

建立本地分支
git checkout -b v2 // 建立新分支v2,並將當前分支切換為v2
切換分支
git checkout v1 // 從當前分支切換為v1
建立遠端分支
git push origin v1:remote_branch_v1 
// 以本地分支v1為基準,建立遠端分支remote_branch_v1,中間":"兩邊不要有空格
刪除遠端分支
git push origin :remote_branch_v1 // push一個空的分支覆蓋掉遠端分支,就是刪除
從遠端拉取分支到本地,並建立關係
git checkout -b v4 origin/master // v4本地原來不存在,master遠端原來存在
直接推送程式碼到關聯的遠端分支

有時候我們直接通過git push來推送程式碼時,發現它提示如下

fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:remote_branch_v1

To push to the branch of the same name on the remote, use

    git push origin local_v1

這時候我們執行如下命令,就可以將直接通過git push將程式碼推送到與本地分支關聯的遠端分支了

git config --global push.default upstream

撤銷操作

人生沒有後悔藥,但是git有,而且很強大

git checkout . // 程式碼改動後,撤銷所有改動
git reset a // git add a 後,撤銷對a的add
git reset . // git add . 後,撤銷add所有
git reset HEAD~1 // 已經commit,在當前分支回退1條commit,當然2就是2條;回退後修改內容還在本地
git revert HEAD~1 //已經push,回滾這條記錄,需要注意的是執行完後需要繼續執行以下三行才可以,因為遠端會保留revert記錄
    git add .
    git commit -a
    git push

總結

至此,git的基本使用已經講完了,瞭解完這些應該夠應付平時的學習工作了。當然,git還有許多其他騷操作(merge、合程式碼之類的)大家可以用的時候查,或者我以後有時間補充。水平有限,有什麼錯誤歡迎指正,謝謝~

相關文章