版本控制是一種記錄一個或若干個文件內容變化,以便未來查閱特定版本修訂狀況的系統。能夠對任何類型的文件進行版本控制。java
有了版本控制就能夠將某個文件回溯到以前的狀態,甚至將整個項目都回退到過去某個時間點的狀態。而且能夠很清晰對比出修改點,從而找出問題出現的緣由。linux
分類 | 優勢 | 缺點 |
---|---|---|
集中式版本控制系統 | * 管理方便,邏輯明確,操做簡單,上手快。 * 易於管理,集中式服務器更能保證安全性。 * 代碼一致性很是高。 * 有良好的目錄級權限控制系統。 |
* 必須聯網。若是不能鏈接到服務器上,基本上不能夠工做,若是服務器不能鏈接上,就不能提交,還原,對比等等。 * 分支的管控方式不靈活 * 對服務器性能要求高,數據庫容量常常暴增,體量大。 |
分佈式版本控制系統 | * 適合分佈式開發,每個個體均可以做爲服務器。 * 公共服務器壓力和數據量都不會太大。 * 速度快、靈活,分支之間能夠任意切換。 * 離線工做,不影響本地代碼編寫, |
* 學習週期相對而言比較長 * 代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。 |
Linux 內核項目組當時使用分佈式版本控制系統 BitKeeper 來管理和維護代碼。可是,後來開發 BitKeeper 的商業公司同 Linux 內核開源社區的合做關係結束,他們收回了 Linux 內核社區無償使用 BitKeeper 的權力。 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds)基於使用 BitKeeper 時的經驗教訓,開發出本身的版本系統,而且對新的版本控制系統作了不少改進。git
Git 與其餘版本管理系統最主要的區別就是對待數據的方式。github
大部分版本控制系統(CVS、Subversion、Perforce、Bazaar 等等)都是以文件變動列表的方式存儲信息,這類系統將它們保存的信息看做是一組基本文件和每一個文件隨時間逐步累積的差別, 而 Git 採用的是直接記錄快照的方式 。數據庫
Git
有三種狀態:windows
由此引入 Git
項目的三個工做區域的概念:安全
1. 在工做目錄中修改文件。 2. 暫存文件,將文件的快照放入暫存區域。 3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
yum install -y git
1) 安裝 homebrewruby
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2) 安裝 git服務器
brew install git
1) 先前往官網 下載安裝包
2) 一路安裝便可curl
1) 打開命令行工具
2) 配置用戶信息
git config --global user.name "你的用戶名" git config --global user.email "你的郵箱"
注:--global
選項表示全局應用。
3) 檢查配置信息,確認配置成功
git config --list
方式一:在現有目錄中初始化倉庫
1) 命令行工具進入現有目錄 2) 執行 git init 命令
方式二:從服務器克隆一個現有 Git 倉庫:
執行 git clon [url] 自定義本地倉庫名稱
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
若是本地倉庫和遠程服務器沒有鏈接,須要先創建鏈接:
git remote add origin serverUrl
將改動推送至遠端倉庫:
git push origin master
注:分支的概念咱們以後會詳細介紹,這麼只須要知道 master
表示主分支,能夠換成其餘你想要的分支。
重命名
git remote rename 原名稱 新名稱
移除
git remote rm 倉庫名稱
查看全部的提交記錄
git log
查看指定人的提交記錄
git log --author=username
查看最近 n 條記錄
git log -n
覆蓋上次提交(將暫存區的文件提交)
git commit --amend
取消暫存的文件
git reset filename
撤消對文件的修改:
git checkout -- filename
丟棄本地全部更改,以遠程倉庫爲主
git fetch origin git reset --hard origin/master
抓取
git fetch [remote-name]
查看
git remote show [remote-name]
有些命令過長致使咱們操做體驗感不好,Git 提供了別名操做可讓咱們將長命令轉爲短小的命令
git config --global alias.短命令 原來命令
例如:
git config --global alias.ci commit
以後咱們只須要使用 git ci
就能夠執行提交操做了。
有些命令記不住,能夠經過 git help
命令獲取幫助。例如,要想得到 config 命令的手冊:
git help config
分支:
每一次提交建立的點鏈接成的線叫作分支。
master 分支:
在 Git 倉庫建立的時候就會默認生成的一個 master 分支也叫主分支,其餘全部的分支都圍繞這個分支作擴展。
子分支:
在 master 分支的基礎上建立的分支叫作子分支,它是獨立存在的和主分支互不干擾。
指針:
每一根分支中都會有一個指向這個分支的指針,這個指針指向了當前版本庫中使用的提交版本,也就是指向分支線上指定的點。master 分支就有一個master指針,其餘分支的指針也有對應名稱的指針。
HEAD 指針:
指向當前版本庫使用的分支指針。
新建分支
git branch 新分支名稱
切換分支
git checkout 新分支名稱
新建、切換合併命令
git checkout -b 新分支名
切換到主分支
git checkout master
合併分支(可能存在衝突)
git merge 新分支名
查看全部分支
git branch
刪除新分支
git branch -d 新分支名稱
將分支推送遠程倉庫
git push origin
在多人協做的時候有一臺可靠的公用倉庫是一個很是實用的方案。
Git 支持如下幾種協議:
關於這幾種協議的優缺點大家能夠參考 服務器上的 Git - 協議
相比於只是單單在服務器搭建一個 Git 倉庫來講,選擇更現代,功能更全的 Git 服務器是一個更好的選擇。推薦的幾個好用的 Git 服務器:
以上幾個 Git 服務器都提供了開源版本,能夠在咱們本身的服務器上搭建。
若是不想本身搭建的話,也能夠直接採用現成的第三方託管。