內容:html
1.Git介紹與安裝與原理git
2.Git基本操做github
3.分支管理bash
4.遠程倉庫app
5.多人協做ssh
6.github使用 - 開源項目測試
參考: fetch
http://www.cnblogs.com/alex3714/articles/5930846.html網站
http://www.javashuo.com/article/p-wmvyyqjp-co.html加密
注:本節主要以git命令操做爲主
1.Git介紹與安裝
(1)關於Git
git是一個用於幫助用戶實現版本控制的軟件
git的做用: 版本控制
(2)Git安裝
最先Git是在Linux上開發的,很長一段時間內,Git也只能在Linux和Unix系統上跑。不過,慢慢地有人把它移植到了Windows上。如今,Git能夠在Linux、Unix、Mac和Windows這幾大平臺上正常運行
Linux上安裝:
1 sudo apt-get install git
Windows or Mac:
下載安裝包本身安裝:https://git-scm.com/downloads
後面的例子以Windows系統爲例,Windows系統成功安裝Git後,右鍵點擊文件夾或桌面選項中將會出現兩個Git開頭的選項。選擇Git Bash Here,打開的窗口就是寫Git命令的地方,以下所示:
(3)Git原理
Git把管理的文件分爲了兩個區域四個狀態:
工做區:當前開發程序所在目錄稱爲工做區,即:工做開發都是在該目錄,該區域的文件會有狀態的變化且狀態由git自動檢測,若是程序中文件作任何操做(增、刪、改),文件狀態均會被檢測到,可使用 【git status】命令查看
版本庫:工做區檢測到有文件發生變化,那麼意味着較上一個版本以後對程序進行了修改,修改完成以後,能夠當作下一版本進行提交,那麼就是執行 【git add .】 將全部文件提交到暫存區,而後再執行【git commit -m '又一個版本'】提交到版本庫的分支便可,以後可使用【git log】命令查看版本記錄
上述圖片中經常使用命令:
2.Git基本操做
(1)建立倉庫 -> git init
什麼是版本庫呢?版本庫又名倉庫,英文名repository,你能夠簡單理解成一個目錄,這個目錄裏面的全部文件均可以被Git管理起來,每一個文件的修改、刪除,Git都能跟蹤,以便任什麼時候刻均可以追蹤歷史,或者在未來某個時刻能夠「還原」
因此,建立一個版本庫很是簡單,首先,選擇一個合適的地方,建立一個空目錄,建了空目錄而後在此目錄下執行git init 目錄便可建立倉庫:
如上所示瞬間Git就把倉庫建好了,並且告訴你是一個空的倉庫(empty Git repository)
(2)添加文件 -> git add
在文件夾中新建一個文件後經過git add 添加到倉庫中:
注:git add . -> 一次性添加全部文件
(3)提交代碼 -> git commit
接着使用git commit命令將文件提交到倉庫中:
(4)代碼修改並提交 -> git add 和 git commit
修改文件中的內容,運行git status命令查看以下:
雖然Git告訴咱們test.txt被修改了,但若是能看看具體修改了什麼內容,天然是很好的。查看具體修改內容可使用git diff命令:
輸出中+號綠色顯示的就是修改或新增的內容,-號紅色顯示的就是去掉或被修改的內容
知道了對源文件做了什麼修改後,再把它提交到倉庫就放心多了,再次提交到倉庫先使用git add再使用git commit:
(5)代碼回滾 -> git log 和 git reflog 和 git reset
在實際工做中Git倉庫中的歷史記錄,能夠用git log
命令查看:
git log
命令依次顯示從最近到最遠的提交日誌,上面那一大串數字和字符的混合體是版本號,是一個SHA1計算出來的一個很是大的數字,用十六進制表示
接下來咱們要開始回滾要把第二次提交回滾到第一次提交,使用git reset命令,後面帶上--hard參數以及要回退到的版本號:
回滾卻是完成了,若是想要在回到第二次提交的版本怎麼辦呢?不能像以往經過【git log】來查看記錄再回滾了,再回去須要這麼搞:
(6)撤銷修改 -> git checkout 和 git reset
人都是犯錯的,有時候在文件中可能寫錯了一些東西須要咱們去撤銷修改,Git中撤銷修改的命令是git checkout -- file(固然沒添加的時候通常都是手動撤銷修改)
git checkout -- file
命令中的--
很重要,沒有--
,就變成了「切換到另外一個分支」的命令,咱們在後面的分支管理中會再次遇到git checkout
命令
加入你git add文件到了暫存區,慶幸的是,在commit
以前,你發現了這個問題。用git status
查看一下,修改只是添加到了暫存區,尚未提交
此時能夠用命令git reset HEAD file
把暫存區的修改撤銷掉,從新放回工做區:
git reset
命令既能夠回退版本,也能夠把暫存區的修改回退到工做區。當咱們用HEAD
時,表示最新的版本
(7)刪除操做 -> git rm 和 git checkout
在Git中,刪除也是一個修改操做,假如在文件夾中刪除了一個文件,這個時候,Git知道你刪除了文件
所以,工做區和版本庫就不一致了,git status
命令會馬上告訴你哪些文件被刪除:
此時有兩種選擇:
git rm
刪掉,而且git commit提交刪除
第一種選擇(刪除版本庫中的):
第二種選擇(撤銷工做區中的刪除):
git checkout本質上
是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」
3.分支管理
(1)什麼是分支
branch稱爲分支,默認僅有一個名爲master的分支。通常開發新功能流程爲:開發新功能時會在分支dev上進行,開發完畢後再合併到master分支
(2)分支操做
branch相關經常使用命令:
注:git merge 時也可能會出現衝突,解決衝突的方式上述stash相同,即:找到衝突文件,手動修改衝突並提交,此處再也不敖述
實例:
依然使用上述的庫,新建一個文件test.txt(在前面刪除了):
新建dev分支並切換到dev分支:
在dev分支上修改文本內容修改完後提交到dev分支上而後切換到主分支上:
切換到主分支後查看文件內容:
接着在把dev分支合併到主分支上:
主分支上的文件內容:
(3)補充 - stash
stash用於將工做區發生變化的全部文件獲取臨時存儲在「某個地方」,將工做區還原當前版本未操做前的狀態;stash還能夠將臨時存儲在「某個地方」的文件再次拿回到工做區
stash相關經常使用命令:
注:執行 git stash pop 命令時,可能會遇到衝突,由於在緊急修復bug的代碼和經過stash存儲在「某個地方」的代碼會有重合部分,因此執行 git stash pop 時候就會出現衝突,有衝突解決衝突便可
4.遠程倉庫
基於GitHub實現代碼託管,須要如下步驟:
(1)自行註冊github,並進行相關設置
因爲你的本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的,因此,須要一點設置:
第1步:建立SSH Key
在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個文件,若是已經有了,可直接跳到下一步
若是沒有,隨便哪一個位置打開Shell(Windows下打開Git Bash),建立SSH Key:
1
|
$
ssh
-keygen -t rsa -C
"youremail@example.com"
|
把郵件地址換成你本身的郵件地址,而後一路回車,使用默認值便可,因爲這個Key也不是用於軍事目的,因此也無需設置密碼
一切順利的話可在用戶主目錄裏找到.ssh
目錄,裏面有id_rsa
和id_rsa.pub
兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa
是私鑰,不能泄露出去,id_rsa.pub
是公鑰,能夠放心地告訴任何人
第2步:登錄GitHub 添加ssh key
打開「Account settings」,「SSH Keys」頁面
而後,點「New SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub
文件的內容:
點「Add Key」,而後就能夠添加成功了
(2)完成上述操做後,點擊new repository建立新倉庫
(3)在上面點擊create repository以後顯示以下
詳細解釋以下:
(4)把本地文件提交到github網站上的倉庫
push完了以後就能夠去github上查看,固然也能夠從github中的倉庫上把某個分支pull下來繼續開發,使用git pull origin 分支名
注:push和pull以前必須配置了ssh不然不能使用!
(5)克隆遠程倉庫
使用git clone命令能夠克隆遠程倉庫(隨便克隆),也就是下載遠程倉庫中的代碼,步驟以下:
先隨便進入一個倉庫而後點擊右上角的clone or download,而後複製連接
複製連接以後,使用git clone 連接 便可克隆該倉庫
上述內容可整理成以下一張圖:
久而久之,將Git和GitHub結合使用作到避免電腦損壞形成數據丟失以及多地開發的問題,上文執行過程當中執行 【git pull origin 分支】命令等同於【git fetch origin 分支】+ 【git merge origin/分支】,而且在執行過程當中可能會出現衝突,緣由是因爲本地代碼和獲取的最新代碼有重合部分,那麼就須要本身手動解決衝忽然後再繼續開發
另外,git rebase能夠保持提交記錄的整潔
5.多人協做
1 (1)容許他人操做程序 2 - 合做者(在github上容許別人) 3 - 在github上建立組織 4 5 (2)分支 6 - master 7 - dev 8 - xdb 9 - zhh 10 11 (3)規則 12 - 一塊兒合併 13 - 合併時間:1/2 14 15 大概總結:我的在本身的分支上開發,功能開發完了把github上的dev拉下來而後把本身的分支合併到dev分支上,測試沒問題合併到master分支上 16 合併的時候一塊兒合併,小功能完結以後就合併(大概一兩天) 17 18 19 問題: 20 $ git push origin dev 21 To https://github.com/WuPeiqi/dbhot.git 22 ! [rejected] dev -> dev (fetch first) 23 error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git' 24 hint: Updates were rejected because the remote contains work that you do 25 hint: not have locally. This is usually caused by another repository pushing 26 hint: to the same ref. You may want to first integrate the remote changes 27 hint: (e.g., 'git pull ...') before pushing again. 28 hint: See the 'Note about fast-forwards' in 'git push --help' for details. 29 30 (4)作代碼review 31 如何作代碼review? 32 - 建立review分支(在上面的合併到dev以前進行) 33 誰來鎖代碼review? 34 - 組長 35 - 帶你的人
6.github使用 - 開源項目
(1)關於開源項目
咱們一直用GitHub做爲免費的遠程倉庫,若是是我的的開源項目,放到GitHub上是徹底沒有問題的
其實GitHub仍是一個開源協做社區,經過GitHub,既可讓別人參與你的開源項目,也能夠參與別人的開源項目
可是在GitHub上,利用Git極其強大的克隆和分支功能,咱們能夠自由的參加各類開源項目
(2)如何參與開源項目
訪問項目主頁點fork克隆項目倉庫(必定要從本身的帳號下clone倉庫,這樣你才能推送修改)
若是你想修復項目的一個bug,或者新增一個功能,馬上就能夠開始幹,幹完後,往本身的倉庫推送
若是你但願別人能接受你的修改,你就能夠在GitHub上發起一個pull request(對方是否接受你的pull request就不必定了。)
小結
在GitHub上,能夠任意Fork開源倉庫
本身擁有Fork後的倉庫的讀寫權限
能夠推送pull request給官方倉庫來貢獻代碼(別人能夠贊成也能夠不一樣意)