Git使用

內容: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】命令查看版本記錄

上述圖片中經常使用命令:

  • git init,初始化,表示即將對當前文件夾進行版本控制。
  • git status,查看Git當前狀態,如:那些文件被修改過、那些文件還未提交到版本庫等。
  • 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 branch 分支名稱             建立分支
  • git checkout 分支名稱          切換分支
  • git branch -m 分支名稱        建立並切換到指定分支
  • git branch                             查看全部分支
  • git branch -d 分支名稱         刪除分支
  • git merge 分支名稱              將指定分支合併到當前分支

注:git merge 時也可能會出現衝突,解決衝突的方式上述stash相同,即:找到衝突文件,手動修改衝突並提交,此處再也不敖述

實例: 

依然使用上述的庫,新建一個文件test.txt(在前面刪除了):

 

 

新建dev分支並切換到dev分支:

在dev分支上修改文本內容修改完後提交到dev分支上而後切換到主分支上:

切換到主分支後查看文件內容:

接着在把dev分支合併到主分支上:

主分支上的文件內容:

 

(3)補充 - stash

stash用於將工做區發生變化的全部文件獲取臨時存儲在「某個地方」,將工做區還原當前版本未操做前的狀態;stash還能夠將臨時存儲在「某個地方」的文件再次拿回到工做區

stash相關經常使用命令:

  • git stash             將當前工做區全部修改過的內容存儲到「某個地方」,將工做區還原到當前版本未修改過的狀態
  • git stash list        查看「某個地方」存儲的全部記錄
  • git stash clear     清空「某個地方」
  • git stash pop       將第一個記錄從「某個地方」從新拿到工做區(可能有衝突)
  • git stash apply     編號, 將指定編號記錄從「某個地方」從新拿到工做區(可能有衝突) 
  • git stash drop      編號,刪除指定編號的記錄

注:執行 git stash pop 命令時,可能會遇到衝突,由於在緊急修復bug的代碼和經過stash存儲在「某個地方」的代碼會有重合部分,因此執行 git stash pop 時候就會出現衝突,有衝突解決衝突便可

 

 

4.遠程倉庫

基於GitHub實現代碼託管,須要如下步驟:

(1)自行註冊github,並進行相關設置

因爲你的本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的,因此,須要一點設置:

第1步:建立SSH Key

在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsaid_rsa.pub這兩個文件,若是已經有了,可直接跳到下一步

若是沒有,隨便哪一個位置打開Shell(Windows下打開Git Bash),建立SSH Key:

1
ssh -keygen -t rsa -C  "youremail@example.com"

把郵件地址換成你本身的郵件地址,而後一路回車,使用默認值便可,因爲這個Key也不是用於軍事目的,因此也無需設置密碼

一切順利的話可在用戶主目錄裏找到.ssh目錄,裏面有id_rsaid_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給官方倉庫來貢獻代碼(別人能夠贊成也能夠不一樣意)

相關文章
相關標籤/搜索