版本控制之Git小結

1、版本控制

1.1 什麼是版本控制

版本控制是一種記錄一個或若干個文件內容變化,以便未來查閱特定版本修訂狀況的系統。能夠對任何類型的文件進行版本控制。java

1.2 爲何須要版本控制

有了版本控制就能夠將某個文件回溯到以前的狀態,甚至將整個項目都回退到過去某個時間點的狀態。而且能夠很清晰對比出修改點,從而找出問題出現的緣由。linux

1.3 版本控制分類

分類 優勢 缺點
集中式版本控制系統 * 管理方便,邏輯明確,操做簡單,上手快。
* 易於管理,集中式服務器更能保證安全性。
* 代碼一致性很是高。
* 有良好的目錄級權限控制系統。
* 必須聯網。若是不能鏈接到服務器上,基本上不能夠工做,若是服務器不能鏈接上,就不能提交,還原,對比等等。
* 分支的管控方式不靈活
* 對服務器性能要求高,數據庫容量常常暴增,體量大。
分佈式版本控制系統 * 適合分佈式開發,每個個體均可以做爲服務器。
* 公共服務器壓力和數據量都不會太大。
* 速度快、靈活,分支之間能夠任意切換。
* 離線工做,不影響本地代碼編寫,
* 學習週期相對而言比較長
* 代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。

2、認識 Git

2.1 Git 簡史

Linux 內核項目組當時使用分佈式版本控制系統 BitKeeper 來管理和維護代碼。可是,後來開發 BitKeeper 的商業公司同 Linux 內核開源社區的合做關係結束,他們收回了 Linux 內核社區無償使用 BitKeeper 的權力。 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds)基於使用 BitKeeper 時的經驗教訓,開發出本身的版本系統,而且對新的版本控制系統作了不少改進。git

2.2 Git 與其餘版本管理系統的主要區別

Git 與其餘版本管理系統最主要的區別就是對待數據的方式github

大部分版本控制系統(CVS、Subversion、Perforce、Bazaar 等等)都是以文件變動列表的方式存儲信息,這類系統將它們保存的信息看做是一組基本文件和每一個文件隨時間逐步累積的差別, 而 Git 採用的是直接記錄快照的方式數據庫

2.3 Git 的三種狀態

Git 有三種狀態:windows

  • 已提交(committed):數據已經安全的保存在本地數據庫中。
  • 已修改(modified):已修改表示修改了文件,但還沒保存到數據庫中。
  • 已暫存(staged):表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。

由此引入 Git 項目的三個工做區域的概念:安全

  • Git 倉庫(.git directoty)
  • 工做目錄(Working Directory)
  • 暫存區域(Staging Area)

2.4 Git 基本工做流程

1. 在工做目錄中修改文件。
2. 暫存文件,將文件的快照放入暫存區域。
3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。

3、Git 安裝

3.1 在 Linux 系統安裝

yum install -y git

3.2 在 mac 系統安裝

1) 安裝 homebrewruby

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2) 安裝 git服務器

brew install git

3.3 在 Windows 系統安裝

1) 先前往官網 下載安裝包
2) 一路安裝便可curl

3.4 初次運行 Git 的配置

1) 打開命令行工具
2) 配置用戶信息

git config --global user.name  "你的用戶名"
git config --global user.email "你的郵箱"

注:--global 選項表示全局應用。

3) 檢查配置信息,確認配置成功

git config --list

4、Git 快速入門

4.1 獲取 Git 倉庫

方式一:在現有目錄中初始化倉庫

1) 命令行工具進入現有目錄
2) 執行 git init 命令

方式二:從服務器克隆一個現有 Git 倉庫:

執行 git clon [url] 自定義本地倉庫名稱

4.2 記錄更改到倉庫

1) 檢查當前目錄狀態:git status
2) 設置忽略文件: 在 .gitignore 文件中編輯規則
3) 提出更改(將更改內容提交到暫存區)
    * 針對指定文件:   git add filename 
    * 針對全部文件:   git add *
    * 支持通配符形式: git add *.txt
4) 提交更新:    
    git commit -m "本次提交內容"
5) 跳過暫存區更新(該命令下不須要執行 git add 步驟):
    git commit -a -m "本次提交內容"
6) 移除文件(從暫存區移除):
    git rm filename
7) 對文件重命名:
    git mv filename newFilename

4.3 推送更改到遠程倉庫

  • 若是本地倉庫和遠程服務器沒有鏈接,須要先創建鏈接:

    git remote add origin serverUrl
  • 將改動推送至遠端倉庫:

    git push origin master

    注:分支的概念咱們以後會詳細介紹,這麼只須要知道 master 表示主分支,能夠換成其餘你想要的分支。

4.4 遠程倉庫重命名和移除

  • 重命名

    git remote rename 原名稱 新名稱
  • 移除

    git remote rm 倉庫名稱

4.5 查看提交記錄

  • 查看全部的提交記錄

    git log
  • 查看指定人的提交記錄

    git log --author=username
  • 查看最近 n 條記錄

    git log -n

4.6 撤消操做

  • 覆蓋上次提交(將暫存區的文件提交)

    git commit --amend
  • 取消暫存的文件

    git reset filename
  • 撤消對文件的修改:

    git checkout -- filename
  • 丟棄本地全部更改,以遠程倉庫爲主

    git fetch origin
    git reset --hard origin/master

4.7 其餘遠程倉庫操做

  • 抓取

    git fetch [remote-name]
  • 查看

    git remote show [remote-name]

4.8 別名

有些命令過長致使咱們操做體驗感不好,Git 提供了別名操做可讓咱們將長命令轉爲短小的命令

git config --global alias.短命令 原來命令

例如:

git config --global alias.ci commit

以後咱們只須要使用 git ci 就能夠執行提交操做了。

4.9 幫助

有些命令記不住,能夠經過 git help 命令獲取幫助。例如,要想得到 config 命令的手冊:

git help config

5、Git 分支

5.1 相關概念

分支:

每一次提交建立的點鏈接成的線叫作分支。

master 分支:

在 Git 倉庫建立的時候就會默認生成的一個 master 分支也叫主分支,其餘全部的分支都圍繞這個分支作擴展。

子分支:

在 master 分支的基礎上建立的分支叫作子分支,它是獨立存在的和主分支互不干擾。

指針:

每一根分支中都會有一個指向這個分支的指針,這個指針指向了當前版本庫中使用的提交版本,也就是指向分支線上指定的點。master 分支就有一個master指針,其餘分支的指針也有對應名稱的指針。

HEAD 指針:

指向當前版本庫使用的分支指針。

5.2 分支的好處

  • 多人協同工做,互不影響
  • 能夠並行開發多個新功能

5.3 分支相關命令

新建分支

git branch 新分支名稱

切換分支

git checkout 新分支名稱

新建、切換合併命令

git checkout -b 新分支名

切換到主分支

git checkout master

合併分支(可能存在衝突)

git merge 新分支名

查看全部分支

git branch

刪除新分支

git branch -d 新分支名稱

將分支推送遠程倉庫

git push origin

6、服務器上的 Git

在多人協做的時候有一臺可靠的公用倉庫是一個很是實用的方案。

6.1 協議

Git 支持如下幾種協議:

  • 本地協議(Local)
  • HTTP 協議
  • SSH(Secure Shell)協議
  • Git 協議

關於這幾種協議的優缺點大家能夠參考 服務器上的 Git - 協議

6.2 在服務器上架設 Git 倉庫

相比於只是單單在服務器搭建一個 Git 倉庫來講,選擇更現代,功能更全的 Git 服務器是一個更好的選擇。推薦的幾個好用的 Git 服務器:

  • GitLab
  • Gogs

以上幾個 Git 服務器都提供了開源版本,能夠在咱們本身的服務器上搭建。

6.3 第三方託管

若是不想本身搭建的話,也能夠直接採用現成的第三方託管。

相關文章
相關標籤/搜索