軟件構造——Git學習

什麼是版本控制

在學習工具之前,首先要了解這些工具是來做什麼的?對,版本控制!什麼是版本控制?

What is “version control”, and why should you care? Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. For the examples in this book, you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer.

總之,版本控制可以幫助我們在工作過程中記錄一個項目的變化過程,幫助我們查看歷史,進行比較等。還有很重要的一點,如果自己丟失了文件,可以很容易的進行恢復!!!

使用github

什麼是github?

GitHub是一個代碼託管平臺,用於版本控制和協作。有了它,我們可以很方便地進行團隊協作。
之前沒有系統的學習關於github的相關操作,直到lab3遇到了不會進行的操作,才下定決心來學習一下。

新建倉庫

要進行版本控制,首先要新建一個倉庫。倉庫通常用來管理單一的工程。在倉庫裏面可以有文件夾、文件、圖片、視頻文件、電子表格和數據集。總之就是項目所需的所有文件類型
建議包括一個README文件,或者是一個介紹倉庫信息的文件,這樣在他人或者自己事後查看的時候,可以方便的瞭解倉庫文件的有關信息
在github新建倉庫,具體方法是點擊頭像左側的箭頭,如圖所示:
在這裏插入圖片描述
之後進行倉庫的相關設置,點擊創建倉庫即可新建倉庫:
(在實驗裏面並沒有用到這些步驟)
在這裏插入圖片描述

創建分支

創建分支允許我們可以同時創建一個工程的不同版本,不同分支之間互不干擾。
倉庫默認是master分支。

  1. 進入新建的倉庫
  2. 單擊文件列表頂部的下拉列表
  3. 輸入新建的分支的名字
  4. 選擇藍色的“Create branch”
    即可新建分支。

修改、提交

點擊響應文件,之後進行修改。例如下面的例子:
在這裏插入圖片描述

pull操作

當某一分支做出修改之後,就可以使用pull操作來將提出自己的修改,請求將自己的修改貢獻到倉庫,將修改合併到倉庫中。Pull請求顯示來自兩個分支的內容的差異。更改、添加和刪除以綠色和紅色顯示。

  1. 點擊Pull Request,之後點擊New pull request
  2. 在pull之前可以查看一下修改的內容是不是自己希望的,通過在Example Comparision中選擇自己的分支和另一分支進行比較,查看有變化的部分是不是自己希望的,如果是,則進行3
  3. 點擊Create Pull Requst進行提交

使用Git管理本地倉庫

什麼是Git?

教程說理解了什麼是Git就可以更好的使用它 😄

大多數其他系統將信息存儲爲基於文件的更改列表。這些系統將它們存儲的信息視爲一組文件,以及隨着時間的推移對每個文件所做的更改。
在這裏插入圖片描述
但是存儲數據的方式和上面提到的不同。Git認爲它的數據更像是微型文件系統的一系列快照。在Git中,每次提交或保存項目狀態時,Git都會拍下所有文件在該時刻的樣子,並存儲對該快照的引用。爲了提高效率,如果文件沒有更改,Git就不會再次存儲該文件,只是提供一個鏈接,指向它已經存儲的相同文件。
在這裏插入圖片描述
在查閱官網資料的時候,瞭解到Git的安全性問題:不經過Git就無法修改任何文件的內容,所以是很安全的。

Git中文件的三種狀態

這是使用Git的基礎知識,在使用Git不多的經驗中,我也可以體會到Git的各種功能基本都是提供了使文件在這三種狀態之間轉換的功能。
modified:已經修改了文件,但是沒有提交到數據庫
staged:已經在當前版本中標記了一個修改後的文件,以進入下一個提交快照
committed:到達這個狀態就可以放心了,數據已經被安全的存儲到了本地的倉庫中
借Git官網的圖來展示一下:
在這裏插入圖片描述

安裝Git

直接到官網下載安裝即可

Git使用

** 首先要知道怎麼查看官方幫助**

git help <verb>
git <verb> --help
man git-<verb>

終於到了最實用的Git命令環節:
** 新建一個Git倉庫**
可以將一個沒有在版本控制下的本地文件目錄變成一個Git倉庫。

git init

可以克隆一個已經存在的倉庫,下面這個命令會新建一個叫libgit2的目錄,並且在它裏面初始化一個.git目錄,下拉被複制倉庫的所有數據,並且檢出最新版本的副本。

git clone https://github.com/libgit2/libgit2
git clone https://github.com/libgit2/libgit2 mylibgit
這個命令類似上面的命令,不同之處僅在於創建的目錄名字是mylibgit,也就是說,利用這個命令,可以自己指定倉庫的名字。

將變化記錄到倉庫
盜圖,這個圖片展示了工作目錄下文件的各種狀態:
(untracked表示還沒有納入版本管理的文件)
在這裏插入圖片描述
跟蹤新文件(將文件從untracked轉換成tracked

 git add 文件名
 這個“文件名”也可以是一個目錄,這樣,就會將一個目錄下所有的文件都添加進來

如果運行“git add A”之後修改了A文件,那麼提交的時候提交的是修改前的A文件,如果想要使A文件保持最新狀態,修改之後需要再次運行“git add A”,也就是說Git對文件的階段設置完全是和運行命令時保持一致。
提交

git commit
該命令將提交所有使用了 git add XXX 命令操作過後的文件

git commit -m "這裏是一些信息"
該命令和上面的命令作用是一樣的,僅僅是多了一些提交的相關信息

git commit -a -m '跳過staged area來提交文件'
使用該命令允許文件不經過staged階段而提交,這個命令會使Git在執行提交之前自動對每個已經被跟蹤的文件執行add命令

查看提交記錄

git log
使用該命令會列出所有向該倉庫提交的記錄

git log -p
使用該命令可以顯示每次提交中引入的差異

git log -p -4
最後的數字限制展示的條目數目,數字是多少,就將展示的條目限制到幾個以內

查看工作目錄下各文件的狀態

git status
獲得各文件的狀態

git status -s
或者
git status --short
可以看到一種表達更簡單的文件狀態表示

查看已經連接的遠程倉庫

git remote
查看已經配置的遠程服務器,如果之前克隆過一個遠程倉庫,那麼會默認顯示origin

git status -v
會顯示類似下面的內容
bakkdoor  https://github.com/bakkdoor/grit (fetch)
bakkdoor  https://github.com/bakkdoor/grit (push)
cho45     https://github.com/cho45/grit (fetch)
cho45     https://github.com/cho45/grit (push)
defunkt   https://github.com/defunkt/grit (fetch)
defunkt   https://github.com/defunkt/grit (push)
koke      git://github.com/koke/grit.git (fetch)
koke      git://github.com/koke/grit.git (push)
origin    git@github.com:mojombo/grit.git (fetch)
origin    git@github.com:mojombo/grit.git (push)
可以看到,每行有兩列,第一列顯示的是輸入命令時的名字,第二列顯示的URL,括號中是相關操作

添加遠程倉庫

 git remote add 名字 url
 使用該命令之後,“名字”就代表了這個url
 例如:
 git remote pp https://github.com/schacon/ticgit
 之後使用git clone pp就是從https://github.com/schacon/ticgit中克隆

從遠程倉庫獲取數據

git fetch 名字
這個命令從“名字”代表的遠程倉庫抓取本地還沒有的數據。

查找出現錯誤的提交
最近新學了一個git命令:

git bisect <subcommand> <options>
該命令可以使用二分查找來找到出現bug的那次提交。

該命令接受不同的子命令和不同的選項取決於子命令:
git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]
	  [--no-checkout] [<bad> [<good>...]] [--] [<paths>...]
git bisect (bad|new|<term-new>) [<rev>]
git bisect (good|old|<term-old>) [<rev>...]
git bisect terms [--term-good | --term-bad]
git bisect skip [(<rev>|<range>)...]
git bisect reset [<commit>]
git bisect (visualize|view)
git bisect replay <logfile>
git bisect log
git bisect run <cmd>...
git bisect help

使用方法是,首先告訴它一個已知包含錯誤的“壞”提交,以及一個在引入錯誤之前已知的“好”提交。然後git bisect選擇這兩個端點之間的提交,git會詢問您所選擇的提交是“好”還是“壞”。它繼續縮小範圍,直到找到引入更改的確切提交。
可以使用這個命令查找任何改變
使用這個命令的一個例子

git bisect start
$ git bisect bad                 # 當前的版本是“壞的”
$ git bisect good v2.6.13-rc2    # 這個版本是好的

輸入這些命令(指定一個“好的”和“壞的”之後,git就會使用二分查找來找到介於“好的”和“壞的”之間的一次提交,輸出類似下面這句話的一些信息):
Bisecting: 675 revisions left to test after this (roughly 10 steps)
**之後的工作是要自己檢查這個版本是“好的”還是“壞的”,這個檢查工作git無法幫助我們完成,自己檢查得到結果之後,將結果反饋給git,具體做法是:
git bisect good或者git bisect bad
git會繼續給出類似上面給出的信息
最後,就沒有需要檢查的提交版本了,這個命令回打印出第一個錯誤提交的描述。refs/bisect/bad將會指向這次提交

git bisect reset
該命令會使指針重新指向原來的HEAD(默認是進入二分查找功能之前的HEAD),也就是退出了二分查找這個功能
加上一個可選參數之後可以靈活的改變指針指向的提交:
git bisect reset <commit>
基本的命令就是這些

Git分支相關操作
Lab3就是分支操作操作失誤,費了我好長時間😢

git branch
使用這個命令Git會列出現存的分支,當前所在分支會用綠色高亮標註,並用星號標註。

切換分支

git checkout 分支名字
這個命令切換到“分支名字”指定的分支
git chechout -b 分支名字
這個命令新建一個分支,並且切換到該分支

Git命令實在是太多了,官方文檔看的頭大,只挑出現在接觸到的這些,以後遇到新的再更

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章