版本控制系統(version control system)是記錄一個或若干文件內容變化,以便未來查閱特定版本修訂狀況的系統。版本控制系統不只能夠應用於軟件源代碼的文本文件,並且能夠對任何類型的文件進行版本控制,普遍應用的如svn,git等linux
集中式的版本控制系統,只有一箇中央數據倉庫,若是中央數據倉庫掛了或者不可訪問,全部的使用者沒法使用SVN,沒法進行提交或備份文件git
分佈式的版本控制系統,在每一個使用者電腦上就有完整的數據倉庫,沒有網絡依然可使用。爲了習慣及團隊協做,會將本地數據同步到Git服務器或GitHub等代碼倉庫github
Git是分佈式的版本控制系統,咱們只要有一個原始Git版本倉庫,就能讓其餘主機克隆這個原始版本倉庫,從而使一個Git版本倉庫能夠被同時分佈到不一樣主機上,而且每臺主機的版本庫都是同樣的,沒有主次之分web
這極大的保證了數據安全性,並使得用戶可以自主選擇向Git服務器推送文件sql
官網:https://git-scm.com 數據庫
1 [root@gitlab ~]# rpm -qa centos-release 2 centos-release-7-4.1708.el7.centos.x86_64 3 [root@gitlab ~]# uname -a 4 Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 5 [root@gitlab ~]# getenforce 6 Disabled 7 [root@gitlab ~]# systemctl status firewalld.service 8 ● firewalld.service - firewalld - dynamic firewall daemon 9 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) 10 Active: inactive (dead) 11 Docs: man:firewalld(1)
1 [root@gitlab ~]# rpm -qa git # Centos系統自帶git軟件,故無需安裝 2 git-1.8.3.1-11.el7.x86_64 3 4 yum install -y git #沒有則進行安裝 apache
1 git config --global user.name "banana" #配置git使用用戶 2 git config --global user.email "XXXX@XX.com" #配置git使用郵箱 3 git config --global color.ui true #語法高亮,顯示加顏色 4 git config --list #查看全局配置
1 [root@gitlab ~]# cat .gitconfig #上述操做即對配置文件進行的編輯 2 [user] 3 name = banana 4 email = XXXX@XX.com 5 [color] 6 ui = true
用來存放全部筆記代碼等,其中目錄下具有隱藏目錄,存放歷史記錄和備份(密文存在)vim
1 mkdir git_data #建立並進入本地工做目錄 2 cd git_data/ 3 git init #初始化工做目錄
1 [root@gitlab git_data]# git status #查看git工做區的狀態信息 2 # On branch master ->當前處於主分支 3 # Initial commit ->最初的提交 4 nothing to commit (create/copy files and use "git add" to track) ->無文件要提交
01.建立文件windows
1 touch README centos
02.查看git狀態
1 [root@gitlab git_data]# git status 2 # On branch master ->位於分支 master 3 # Untracked files: ->未跟蹤的文件 4 # (use "git add <file>..." to include in what will be committed) ->使用"git add <file>."以包含要提交的內容 5 # README 6 nothing added to commit but untracked files present (use "git add" to track) ->提交爲空,可是存在還沒有跟蹤的文件(使用"git add"創建跟蹤) 注意:git默認不提交空目錄
03.添加到暫存區域[add後接*/file]
1 git add README
04.提交暫存區域文件至git本地倉庫
1 git commit -m 'first commit' 2 # -m後接註釋信息,內容關於本次提交的說明,方便本身或他人查看
04.1簡便方法
1 git commit -a -m "註釋信息" 2 #若不加-m添加說明信息,後面會自動進入編輯模式,仍需添加說明的信息。 3 #-a表示直接添加文件(即本地倉庫的原有文件後來通過改變時,咱們就可使用-a直接在倉庫裏面進行修改)
05.再次查看git狀態
1 [root@gitlab git_data]# git status 2 # On branch master ->位於分支master 3 nothing to commit, working directory clean ->無文件要提交,乾淨的工做區
1 [root@gitlab git_data]# tree .git/ #存儲全部歷史版本信息即配置文件,是經過git init生成的目錄 2 .git/ 3 ├── branches 4 ├── config 5 ├── description 6 ├── HEAD 7 ├── hooks 8 │ ├── applypatch-msg.sample 9 │ ├── commit-msg.sample 10 │ ├── post-update.sample 11 │ ├── pre-applypatch.sample 12 │ ├── pre-commit.sample 13 │ ├── prepare-commit-msg.sample 14 │ ├── pre-push.sample 15 │ ├── pre-rebase.sample 16 │ └── update.sample 17 ├── index 18 ├── info 19 │ └── exclude 20 ├── objects 21 │ ├── e6 22 │ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 #服務器只存儲加密文件信息 23 │ ├── info 24 │ └── pack 25 └── refs 26 ├── heads 27 └── tags
總結提交數據/文件分爲兩步驟三區域:
在工做目錄git_data建立"README"數據文件;使用git add將文件提交到暫存區域(臨時存放可撤銷操做);將暫存區域的文件統一提交到Git倉庫中
咱們能夠簡單的把工做目錄理解成是一個被Git服務程序管理的目錄,Git會時刻追蹤目錄內文件的改動。在安裝好Git服務程序後,默認就會建立一個master分支,可供咱們直接提交數據
01. 未添加到暫存區的數據->直接使用rm命令刪除便可
02.已添加到暫存區的數據
1 git rm --cached database 2 #將文件從git暫存區域的追蹤列表移除,並不刪除當前工做目錄內的數據文件->只刪除緩存 3 git rm -f database 4 #將文件數據從git暫存區和工做目錄一塊兒刪除->永久刪除
01.未添加到暫存區的數據->直接mv/rename更名便可
02.已添加到暫存區數據
1 git mv README NOTICE # README修改前/NOTICE修改後;最後進行提交git倉庫 2 注意:也可mv修更名稱→刪除git倉庫的文件快照git rm '*.txt'→將新的文件添加進去→提交git倉庫
1 git log #查看提交歷史記錄 2 git log -2 #查看最近幾條記錄 3 git log -p -1 #-p顯示每次提交的內容差別,例如僅查看最近一次差別 4 git log --stat -2 #--stat簡要顯示數據增改行數(可以看到提交中修改過的內容,對文件添加或移動的行數,並在最後列出全部增減行的概要信息) 5 git log --pretty=oneline #--pretty根據不一樣的格式展現提交的歷史信息 6 git log --pretty=fuller -2 #以更詳細的模式輸出提交的歷史記錄 7 git log --pretty=fomat:"%h %cn" #查看當前全部提交記錄的簡短SHA-1哈希字串與提交着的姓名
使用format參數來指定具體的輸出格式
1 %s 提交說明 2 %cd 提交日期 3 %an 做者的名字 4 %cn 提交者的姓名 5 %ce 提交者的電子郵件 6 %H 提交對象的完整SHA-1哈希字串 7 %h 提交對象的簡短SHA-1哈希字串 8 %T 樹對象的完整SHA-1哈希字串 9 %t 樹對象的簡短SHA-1哈希字串 10 %P 父對象的完整SHA-1哈希字串 11 %p 父對象的簡短SHA-1哈希字串 12 %ad 做者的修訂時間
Git服務程序中有一個版本指針HEAD,當用戶申請還原數據時,將HEAD指針指向到某個特定的提交版本。但Git爲避免歷史記錄衝突用SHA-1算出十六進制的哈希字串來區分提交版本。默認HEAD指針會指向到最近一次提交記錄,上一個提交版本即HEAD^,上上一個版本即HEAD^^ (HEAD~5簡化表示往上數第五個提交版本)
1 git reset --hard HEAD^ #還原歷史提交版本上一次 2 git reset --hard 3de15d4 #找到歷史還原點的SHA-1值後,就能夠還原(值未寫全時系統會自動匹配)
即還原到歷史數據後想再次撤銷更改,可是git log已經找不到這個版本了
1 git reflog #查看將來歷史更新點
1 git tag v1.0 #當前提交內容打一個標籤(方便快速回滾),每次提交均可以打個tag 2 git tag #查看當前全部的標籤 3 git show v1.0 #查看當前1.0版本的詳細信息 4 git tag v1.2 -m "version 1.2 release is test" 5 #對當前版本(最新)打標記,用於commit提交以後接着進行打標記(-a指定標籤名,-m爲說明信息) 6 git tag -d v1.0 #咱們爲同一個提交版本設置了兩次標籤,刪除以前的v1.0
1 [root@gitlab git_data]# git reset --hard 0bdf2e7 2 HEAD is now at 0bdf2e7 modified README file 3 [root@gitlab git_data]# git reset --hard V20171130 4 HEAD is now at a66370a add oldboy dir
在實際的項目開發中儘可能保證master分支穩定,僅用於發佈新版本,平時不要直接修改裏面的數據文件。而開發都在dev分支進行修改,即每一個人從dev分支建立本身我的分支,開發完合併到dev分支,最後合併到master分支
1 git branch linux #建立分支 2 git branch #查看分支狀況,當前分支前有*號 3 git checkout linux #Switched to branch 'linux' 切換分支 4 git checkout --<file> #一鍵還原,直接將git倉庫的文件覆蓋當前文件[危險]
需求:把linux的工做成果合併到master分支上
1 git checkout master #切換到master分支 2 git merge linux #合併Linux分支至master 3 git branch -d linux #確認合併完成後,建議刪除分支
注意:系統默認不編輯空分支
注意:只有同目錄同文件同行纔會形成合並衝突的狀況,只要有一點不一樣就可以進行合併
01.準備:
1 cd git_data 2 echo 'master code' >>README 3 git commit -a -m 'this master branch commit' 4 git checkout linux 5 cat README 6 7 echo 'linux code' >>README 8 git commit -a -m 'this linux branch second commit' 9 git checkout master
02.現象:
1 [root@gitlab git_data]# git merge linux 2 Auto-merging README ->自動合併 README 3 CONFLICT (content):Merge conflict in README ->衝突(內容):合併衝突於 READM 4 Automatic merge failed; fix conflicts and then commit the result. 5 ->自動合併失敗;修正衝忽然後提交修正的結果
03.解決:人工選擇想要的內容,同時修改master和linux分支同文件並提交,最後merge
1 [root@gitlab git_data]# vim README 2 this is linux branch hello world 3 master code 4 linux code 5 [root@gitlab git_data]# git commit -a -m '解決合併衝突' 6 [master 19cb918] 解決合併衝突 7 [root@gitlab git_data]# git merge linux 8 Already up-to-date.
因爲以前已合併了linux分支,故如今看到它在列表中,在這個列表中分支名字前沒*號的分支一般可用git branch -d刪除且不會失去任何東西
1 [root@gitlab git_data]# git branch --no-merged #查看全部包含未合併工做的分支 2 testing 3 [root@gitlab git_data]# git branch -d testing ->刪除分支 4 error: The branch 'testing' is not fully merged. ->分支'testing'未進行合併 5 If you are sure you want to delete it, run 'git branch -D testing'. ->若肯定想刪除它,即便用-D強制刪除
1 軟件下載地址https://github.com/git-for-windows/git/releases/tag/v2.10.0.windows.1/Git-2.10.0-64-bit.exe
用於直接管理windows。安裝方法默認下一步→桌面右鍵"Git Bash Here"→命令行
1 shine@shine MINGW64 ~/Desktop 2 $ pwd 3 /c/Users/shine/Desktop 4 shine@shine MINGW64 ~/Desktop 5 $ mkdir git_data 6 shine@shine MINGW64 ~/Desktop 7 $ cd git_data 8 shine@shine MINGW64 ~/Desktop/git_data 9 $ git init 10 Initialized empty Git repository in C:/Users/shine/Desktop/git_data/.git/
01.桌面右鍵"Git Gui Here"→"打開文件"
02.定義倉庫的路徑"git_data"→添加用戶信息(以下)
1 shine@shine MINGW64 ~/Desktop/git_data 2 $ git config --global user.email "XXXXX@XX.com" 3 shine@shine MINGW64 ~/Desktop/git_data 4 $ git config --global user.name "banana"
03.軟件使用
至此,Git的安裝使用完成
交互數據:
• 使用GitHub或者碼雲等公共代碼倉庫
• 使用GitLab私有倉庫
1 官方安裝文檔 https://about.gitlab.com/installation/ 2 國內軟件鏡像站 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
1 mkdir -p /application/tools 2 cd /application/tools 3 rz -E #上傳gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm 4 5 yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm 6 gitlab-ctl reconfigure #初始化,僅執行一次 7 注意:gitlab默認開機自啓,無需修改;開機不自啓會致使軟件服務沒法啓動
1 http://10.0.0.63
命令行測試:
1 ps -ef 2 netstat -lntup 3 gitlab-ctl status 4 注意:軟件安裝默認在/opt下,其數據庫爲postgresql;當該機器有apache服務需手動關閉
注意:建立密碼默認即爲8位,生產環境太過簡單不可用;帳戶默認root
提示:git自己沒有任何權限控制,由於git就是爲了開發者共同編輯代碼而出現,若是沒有權限,也會致使信息泄露,因而出現web界面
01.建立新項目
說明:一個目錄初始化完就是一個項目,不能再進行修改,只能進行從新建立
02.進行網頁編輯
03.經過密鑰進行認證
1 ssh-keygen #生成密鑰對(一路回車) 2 cat /root/.ssh/id_rsa.pub #查看公鑰id_rsa.pub值並添加以下:
04.鏈接推送測試
1 ssh git@10.0.0.63 2 git clone git@10.0.0.63:root/shine.git 3 ls /root 4 #在哪一個目錄克隆的就默認存在於那個目錄(想切換到別的目錄需提早切換再git clone)
1 cd shine #這裏名稱與上文相同 2 touch README.md 3 git add README.md 4 git commit -m "add README"
1 [root@gitlab shine]# git push -u origin master #把本地代碼向遠端倉庫(gitlab網頁)推送 2 Counting objects: 3, done. 3 Writing objects: 100% (3/3), 208 bytes | 0 bytes/s, done. 4 Total 3 (delta 0), reused 0 (delta 0) 5 To git@10.0.0.63:root/shine.git 6 * [new branch] master -> master 7 Branch master set up to track remote branch master from origin.
刷新頁面查看,即下圖
05.建立文件測試
1 cd shine/ 2 git pull #將代碼拉取到本地(須要在git的工做目錄中進行操做)
至此,GitLab的安裝使用完成
Github是Git版本庫的託管服務,是目前全球最大的公網倉庫,擁有上百萬的開發者用戶,也是軟件開發和尋找資源的最佳途徑。不只能夠託管各類Git版本倉庫,還擁有更美觀的Web界面。代碼可被任何人克隆,使開發者爲開源項貢獻代碼變得容易
01.註冊GitHub
1 瀏覽器訪問github官網https://github.com/
02.填寫我的用戶名等信息→默認下一步→跳過描述
03.建立項目
說明:建立新的項目以前要現驗證郵箱
04.添加git服務器上生成的公鑰id_rsa.pub
1 [root@gitlab ~]# cat .ssh/id_rsa.pub
05.準備工做已經完畢→建立一個新的倉庫
06.根據如下信息建立代碼倉庫→推送測試
1 mkdir -p banana 2 cd banana/ 3 echo "# test" >> README.md 4 git init 5 git add README.md 6 git commit -m "first commit" 7 git remote add origin git@github.com:banana-tong/test.git
推送測試
1 [root@gitlab banana]# git push -u origin master 2 The authenticity of host 'github.com (192.30.255.113)' can't be established. 3 RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. 4 RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. 5 Are you sure you want to continue connecting (yes/no)? yes 6 Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts. 7 Counting objects: 3, done. 8 Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done. 9 Total 3 (delta 0), reused 0 (delta 0) 10 To git@github.com:banana-tong/test.git 11 * [new branch] master -> master 12 Branch master set up to track remote branch master from origin.
07.刷新界面便可以發現推送上去的README.md文件
08.此時可建立新文件→命令行git pull拉取進行測試
至此,GitHub的安裝使用完成
1 add #添加文件內容至索引 2 branch #列出、建立或刪除分支 3 checkout #檢出一個分支或路徑到工做區 4 clone #克隆一個版本庫到一個新目錄 5 commit #記錄變動到版本庫 6 init #建立一個空的 Git 版本庫或從新初始化一個已存在的版本庫 7 log #顯示提交日誌 8 merge #合併兩個或更多開發歷史 9 mv #移動或重命名一個文件、目錄或符號連接 10 pull #獲取併合並另外的版本庫或一個本地分支 11 push #更新遠程引用和相關的對象 12 rm #從工做區和索引中刪除文件 13 show #顯示各類類型的對象 14 status #顯示工做區狀態 15 tag #建立、列出、刪除或校驗一個GPG簽名的 tag 對象
下節想跟你們一同探討一下有關代碼上線問題,若有不妥望海涵
此筆記是本人學習摘記整理而成,此爲初稿(尚有諸多不完善之處),原創做品容許轉載,轉載時請務必以超連接形式標明文章原始出處,做者信息和本聲明,不然將追究法律責任。http://www.cnblogs.com/bananaaa/
此處感謝神奇海螺爲本文章提供的聲明