[Git] 代碼管理之 Git(一)

Git 簡介

當我們開發一個產品的時候。所有的代碼並不是一氣呵成全部一次性完成的,肯定是經過多個步驟,大項目甚至會多人好幾個月甚至幾年共同開發而成的,而這個過程中,我們的代碼要形成很多個版本,好比(圖片摘自網上)
在這裏插入圖片描述
這麼多的版本,不好管理,同時也不好知道下一個版本相對於上一個版本到底修改了哪裏。正是基於無論是文章還是軟件的管理混亂這個初衷,軟件版本管理工具橫空出世。

軟件版本管理工具主要可分爲兩類,一個是集中式版本管理,代表就是SVN
在這裏插入圖片描述
集中式軟件版本管理工具具有一臺中心服務器,軟件的最終版本存在與中心服務器上,叫做 SVN Repository,即SVN倉庫,所有的開發人員從服務器拉取代碼,修改代碼,提交代碼,中央服務器集中管理,這種管理方式比較簡單,使用起來不難容意上手,但是這樣的管理方式有一個致命的問題,就是用戶本地沒有倉庫的歷史信息,所有版本信息全部保存在中央服務器,意味着只要中央服務器宕機了,則所有的資料都隨之消失不見,雖然現在服務器的可用性增強很多,容災備份也做得很好,但是運維維護代價也很高,使用的人已經不多了(不排除一小部分一起基於開發環境的簡單而一直使用svn)

git是一種分佈式的代碼管理工具,每個授權用戶都管理着所有的版本信息,即使任意的一個用戶的信息丟失了,也可以從服務器恢復之前的版本信息,而不用擔心有歷史信息的丟失。
在這裏插入圖片描述

Git 安裝

在git的官方網站,有git的安裝詳細說明,對於Windows直接可以下載一個exe執行文件,對於Linux,有各個版本的安裝命令,安裝非常簡單,就是一句命令的事,之後在cmd窗口中執行git 命令後,如果出現相關的幫助信息則表示安裝成功。

安裝完成後就需要開始配置了,我們安裝完後的初始界面是這樣的,這裏以Windows下的Git bash爲例。新建一個文件夾,作爲庫內容存放的地方,然後在當前目錄下啓動Git bash,就可以開始配置了。
配置的目的主要是爲了設置用戶名稱和郵件地址,因爲每一次的git提交都會使用這些信息,它們將會被寫入到提交報告中,而且不可以更改的。
配置用戶名

git config --global user.name "Richard_li"

配置郵箱地址

git config --global user.email starxi***[email protected]

查看我們做的配置

git config --list

git做全局配置這裏的參數中 --global 表示全局設置,也就是說本臺計算機所發出的所有提交信息在沒有額外指定的情況下全部以這個設置爲準。如果某一個項目不想以該設置進行提交的話,可以在項目內部執行git config 然後使用不加 --global 的配置語句進行配置。

git還有很多其他的配置,可以參照git 的官方幫助文檔,或者直接命令git --help來查看文檔。英文閱讀有困難的朋友,可以看看官方提供的中文文檔

創建倉庫

首先,什麼是倉庫呢,倉庫其實就是一個由git管理的目錄,這裏目錄裏的所有的文件,所有的目錄,都會由git記錄下來,每一次修改,每一次刪除,都會在git中有記錄,這個倉庫是可以有後悔藥喫的,當你失誤刪除了文件,當你失誤修改了不應該修改的文件,都是可以回退到以前的版本的。

那爲了讓git能管理當前我們新建的文件夾,首先我們得在這個文件夾下新建一個倉庫。

新建倉庫這個概念就好比,當你新建了一個文件夾的時候,就好比是新建了一個用於當作倉庫的房子,但是即使我們知道這個房子要作爲倉庫用,但是沒有相應的管理人員,記錄系統,門禁等等設置的話,它就僅僅只是一個房子,所以新建倉庫的概念就是在已有的這個空房子的基礎上把各項用於倉庫管理的設施搭建起來。git的話會自動新建一些文件來記錄你的對當前文件夾的每一次改變。

新建一個倉庫使用的命令是

$ git init
Initialized empty Git repository in D:/Workspace/git_test/.git/

對,只需要執行這麼一條命令,git倉庫就被搭建起來並且初始化了。那執行這個命令以後,git系統到底做了些什麼呢,打開系統的顯示“隱藏的目錄”這個選項,可以看到,在當前目錄下,有一個以點開頭的名稱爲 .git 的文件夾被生成了,裏面包含了一系列的文件:
git新建倉庫的隱藏目錄
這些目錄中的文件會記錄倉庫中的文件以及目錄的所有改動,以及實現回滾等一系列功能。這個時候我們使用

git status

來查看下當前倉庫的狀態,顯示如下
初始倉庫的狀態
顯示瞭如下信息

  • 當前位於master 的分支上
  • 至今沒有過提交
  • 沒有需要提交的內容(創建或拷貝文件然後使用git add來追蹤)

向倉庫提交文件以及查看倉庫狀態

在解釋上面的一些概念之前,首先我們添加一些文件到倉庫裏來看看,如圖,我添加了五個文件到當前倉庫
往git倉庫中添加文件
然後再到bash中查看git 的狀態
添加文件後查看git狀態
之前查看git狀態時候的三句內容均在,只是多了一個 Untracked files,顧名思義,未追蹤的文件,意思就是說我們雖然把這些文件添加到了這個倉庫中,但是這個倉庫的管理系統還沒有對這些“貨物”進行登記造冊,然後下面可以很清晰地看到我剛纔添加的五個文件的文件名以紅色標記顯示出來。並且括號中溫馨地提示了把我們將要提交的文件使用 git add + 文件名的方式進行包含。那麼我們就照做:

git add test.c

這裏我只添加了一個文件,來看看效果怎麼樣。
git add一個文件後的git status
當我git add紅色標記列出的五個文件當中的一個後,可以看到Untracked files中少了那個我已經添加了的文件,而多出來了一個項目 Changes to be committed 也就是將要被提交的改動,這裏,用綠色把我剛纔git add的文件列出來了,標明瞭是new file,這裏,git將我的改動文件從工作區添加到了暫存區。

工作區與暫存區的概念:我們當前存放文件的目錄稱爲工作區,顧名思義就是我們的工作目錄,就好比我們運貨到了碼頭,然後我們通過git add我們的那些文件就是通知倉管員,我們有哪些貨物(文件)將要被造冊,然後這些貨物(文件)在正式被放入倉庫之前就被放到了倉庫門口的警備室(暫存區)等待報備。

下面我將所有的文件全部添加到暫存區,這時,除了將所有的文件名一個個地列出到git add後這種方法之外

git add LICENSE README cJSON.c cJSON.h

如果我們是想將當前所有untracked files都放置到暫存區的話,我們可以使用下面的命令

git add .

以一個點代替當前未放入暫存區的所有文件,這樣,可以將untracked files 全部放入暫存區。
所有文件放入暫存區
這樣,所有的文件就都列入到了Changes to be committed,所有的貨物放到了警備室,準備入庫造冊。一旦文件被加入到了暫存區,那就不能被更改了,即使再對文件進行了更改,放入了暫存區的文件也不會隨着你的更改而變化了,就好比貨物已經放入了警備室,你無法再次去修改貨物了,但是如果此時,我突然發現文件有錯誤,或者需要再修改或添加內容才能放入倉庫,那此時我們可以通知警備室,將貨物拿回

$ git rm --cached test.c
rm 'test.c'

我突然發現test.c文件中有一個頭文件沒有包含,這條命令就是將貨物從警備室撤回,然後系統提示 rm ‘test.c’ 文件已從警備室撤離。這時候我們就可以開始修改test.c文件,修改的內容會反應到文件本身,修改完以後重新git add到暫存區即可。
從暫存區撤回內容後
當我們把最終需要放入到倉庫中的內容全部準備好,並放入到暫存區後,接下來就是真正將貨物裝進倉庫的命令了,也就是提交文件到倉庫的命令

$ git commit test.c -m "first commit"
[master (root-commit) f7000c9] first commit
 1 file changed, 162 insertions(+)
 create mode 100644 test.c

執行commit命令即通知警衛室將暫存區的貨物存入倉庫,並登記造冊。這裏,我將test.c一個文件裝入了倉庫。後面跟帶的 -m參數是備註,表明這一次提交的理由或者任何附加的信息,即需要登記在倉庫日誌上的內容。提交完test.c這個文件後,然後再用git status 查看狀態時,發現被提交的那個文件已經從 Changes to be committed 列表中消失了。
commit文件後剩下的文件

接下來我將所有的文件全部commit進倉庫,同樣也可以使用之前便捷git add的方法,用點替代當前沒有被commit的所有文件

這裏除了用點來表示所有的文件以外,還可以使用 -a 參數來表示將當前未提交的文件全部提交

$ git commit . -m "fist commit"
[master ee44e6d] fist commit
 4 files changed, 1166 insertions(+)
 create mode 100644 LICENSE
 create mode 100644 README
 create mode 100644 cJSON.c
 create mode 100644 cJSON.h

# 下面的命令有同樣的效果
$ git commit -a -m "fist commit"

提示我4個文件更改了,一共有1166個插入。

這個插入的意思就是我們向文件中寫入內容的字節書。

接下來我們再使用git status看看狀態

$ git status
On branch master
nothing to commit, working tree clean

相比起最初,no commits yet這句話不見了,同時第三句話也由 nothing to commit, (create/copy files and use “git add” to track) 變成了 nothing to commit, working tree clean,沒有需要提交的內容,工作樹幹淨。意思就是當前工作區的所有內容全部正在被追蹤,這是正常的狀態。

當我們提交了多次後,如果想查看之前提交的記錄的話,即查看貨物的入庫記錄的話,可以使用

git log --stat

來查看提交記錄
Commit記錄
如圖,共計有兩次提交,提交人爲 Richard_li,後面附帶有我的郵箱,然後下面有提交的日期Date,之後是提交的時候寫在 -m 參數後面引號裏的內容,之後,當次提交的內容的文件更改,這裏,是按照時間的倒序進行排列的,打出git log --stat命令後,最上面的信息是最近的消息,越往下是越以前的消息,可以看到第一次提交了test.c 一個文件,第二次提交更改了cJSON.c等共四個文件。

如果想在這裏看到文件中所有的變動,即源代碼是怎麼更改的,是增加了還是刪除了,可以使用

$ git log -p

查看所有的記錄,如果你的文件是新添加的話,那這個文件中的所有內容都會被展示出來,內容太長,這裏就不貼圖片內容了。

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