git的使用

一、前言

作爲一個軟件開發人員,不可能不知道Git。Git作爲一個複雜的版本控制系統,命令之多,即使經常使用,一些命令也記不住,一般只記住幾個常用的命令,不是所有使用Git命令行都是高效的。本教程不講Git命令,而是先讓你用上git,再去學習git。本教程應該稱作TortoiseGit入門指南。因爲下面要藉助一個圖形化的軟件,TortoiseGit來操作git。用GUI(圖形界面)再談CLI(命令行),我相信這會更容易讓人接受。

二、關於版本控制

什麼是版本控制?我爲什麼要關心它呢?
版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統。
我們僅對保存着軟件源代碼的文本文件作版本控制管理,但實際上,你可以對任何類型的文件進行版本控制。


而且還可以查看歷史版本、文件誰進行提交修改刪除的、也就是你對文件的一舉一動都在公司的控制範圍內
我見過有的優秀的互聯網公司,他們所有的員工都會使用版本管理系統(svn\git),他們所有的文檔、文件、資料都可以在上面找到
最關鍵的是他還具有權限的說法,你具有對應的權限才能進行對應的操作

三、Git的簡介

3.1 Git的介紹

我們在公司進行研發的時候,對公司來說我們程序員寫的代碼是最寶貴的財富
那麼我們研發的時候如果電腦突然一些事件,導致代碼丟失就造成了大量的損失
所以自然而然就出現文件的版本關係管理工具
目前市面上使用最多的是svn和git


3.2 Git 與 SVN 區別

Git 不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。
如果你是一個具有使用 SVN 背景的人,你需要做一定的思想轉換,來適應 Git 提供的一些概念和特徵。
Git 與 SVN 區別點:
    1、Git 是分佈式的,SVN 不是:這是 Git 和其它非分佈式的版本控制系統,例如 SVN,CVS 等,最核心的區別。
    2、Git 把內容按元數據方式存儲,而 SVN 是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似 .svn、.cvs 等的文件夾裏。
    3、Git 分支和 SVN 的分支不同:分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄。
    4、Git 沒有一個全局的版本號,而 SVN 有:目前爲止這是跟 SVN 相比 Git 缺少的最大的一個特徵。
    5、Git 的內容完整性要優於 SVN:Git 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

3.3 什麼是分支

幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味着你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。在很多版本控制系統中,這是個昂貴的過程,常常需要創建一個源代碼目錄的完整副本,對大型項目來說會花費很長時間。

我們可以這麼理解分支,比如我們做一款通用的用戶管理系統,
那麼A公司看見這個軟件系統很喜歡,但是要求額外添加一個小功能,這個功能是針對A公司獨有的功能,
b公司也喜歡這個系統,但是要求刪除系統的其中功能。

而我們這個時候針對A,B都研發好了系統
這個時候我們發現主系統有bug需要修復怎麼辦,在主系統我們修復了這個bug,我們可以合併分支,其他的分支也有自然把bug修復了


突然c公司喜歡這個系統,提出建議,而a,b也很喜歡,那麼c寫好了後,合併master分支之後,a、b也可以有這個。

在這裏面A,B,C和主系統都稱爲分支,主系統的被稱爲主分支

分支不影響其他分支

四、軟件介紹

4.1 git服務器介紹

git的服務器一般搭建在專門的git服務器上,我們可以簡單的理解爲一臺電腦上,而很多公司的git服務器是內網的這點需要注意
除了直接搭建在內網的git服務器其實也可以搭建在外網上,主要看你們所在的公司運維那邊如何搭建服務器了
另外除了公司自己的git服務器以外,我們還有一種選擇是免費的git服務器

目前市面上面試的git服務器最出名的有2個,GitHub和碼雲

GitHub國外的優秀網站,很多人都把自己的代碼放在GitHub中,所以有的時候你下載別人的代碼時候你會發現是GitHub上的
[https://github.com/](https://github.com/)

碼雲是國內的代碼託管服務器,也是很優秀的,但是在改版之後,公司合作的人數控制在5個以內
[https://gitee.com/](https://gitee.com/)

4.2 git、TortoiseGit、TortoiseGit-LanguagePack

Git是一個開源的分佈式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理,我們需要敲命令的方式管理我們的文件。
TortoiseGit是一個開放的GIT版本控制系統的源客戶端,可以解放我們的命令,通過圖形化的方式直接管理。

TortoiseGit-LanguagePack是我們的語音包

git的下載地址
[https://git-for-windows.github.io/](https://git-for-windows.github.io/)
TortoiseGit和語音包下載地址
[http://tortoisegit.org/download/](https://git-for-windows.github.io/)

image
image

4.3 Git 工作區、暫存區和版本庫

 我們先來理解下Git 工作區、暫存區和版本庫概念

    工作區:就是你在電腦裏能看到的目錄。
    暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
    版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關係:

在這裏插入圖片描述

 圖中左側爲工作區,右側爲版本庫。在版本庫中標記爲 "index" 的區域是暫存區(stage, index),標記爲 "master" 的是 master 分支所代表的目錄樹。
工作區就是我們本地電腦的文件夾
暫存區可以理解爲一個緩存區
版本庫中的master就是服務器中的內容
 圖中左側爲工作區,右側爲版本庫。在版本庫中標記爲 "index" 的區域是暫存區(stage, index),標記爲 "master" 的是 master 分支所代表的目錄樹。

圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"遊標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。

圖中的 objects 標識的區域爲 Git 的對象庫,實際位於 ".git/objects" 目錄下,裏面包含了創建的各種對象及內容。

當對工作區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。

當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。

當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。

當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工作區則不做出改變。

當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。

當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因爲不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

五、git如何使用

5.1 clone克隆

克隆就是將服務器的文件下載到本地電腦中

在這裏插入圖片描述
在這裏插入圖片描述

剛到公司的時候,公司會給你git的3個東西:url地址,賬號,密碼
url:公司給的地址
目錄:本地工作區的文件夾
分支:克隆的是哪個分支,默認master主分支

5.2 添加

在這裏插入圖片描述

當我們在工作區添加一個文件的時候,這個時候服務器並不知道這個文件,僅僅是本地有這個文件
所以我們會看見有一個小問號,有的電腦沒有這個問號也無所謂

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

我們點擊文件,會看見有一個添加選項,這個時候要注意,其實git版本庫(服務器)中其實並沒有這個文件,僅僅是告訴暫存區我們要添加文件,並且告訴其文件名,當我們點擊提交(commit)到master的時候,這個纔是真正的讓git版本庫獲取到了這個文件,最後不要忘記推送到服務器中

5.3 修改

在這裏插入圖片描述
在這裏插入圖片描述

當我們這個時候修改1.txt的時候,文件會警告,告訴我們和git版本庫中的文件不一致了,這個時候我們點擊同步到master就OK了

5.4 刪除、重命名

同添加修改一樣

5.5 同步

在這裏插入圖片描述

將git版本庫最新的代碼更新到本地的工作區中

5.6 查看歷史版本、查看日誌

5.7 切換分支

5.8 合併分支

如果要將t1->master
那麼首先需要當前分支爲master,然後點擊合併(merge),選擇t1分支,這個時候我們會發現t1的文件到master了。
但是這個時候我們需要注意,只是本地的工作區master合併到了t1,這個時候我們需要推送到git版本庫中

5.9 代碼衝突

在這裏插入圖片描述

當其他在我們之前提交了代碼,我們會發現無法提交上去,因爲本地的工作區的版本太低了,所以這個時候我們需要先獲取本地的代碼,也就是同步,然後解決衝突的地方。
衝突的情況一般分爲這3中情況

 1. 其他人寫的代碼和你寫的代碼功能相互互補影響,碰見這種情況就需要你把倆個人的代碼同時的保留
 2. 其他人寫的代碼和你寫的代碼功能有重複部分,這個時候需要你去判斷誰寫的更好,如果對方寫的好,就把自己寫的代碼刪除,然後調用別人寫的代碼;如果自己寫的好,叫上對方和對方討論一下

其實爲了發生這種情況,一般出現衝突的都是公共類部分,
這個時候如果你去修改公共類的話,提前在你們的研發小羣裏面問題有人去改沒,如果有的話就先寫其他的功能
注意:工具類的代碼一般不要去修改,公司裏面技術高超的人多了,根本輪不到你去改,所以不要隨意去修改,凡事做事多思考

5.10 Git 生成 RSA加密

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

首先需要在git GUI上根據RSA生成公鑰和私鑰,公鑰放在碼雲上,私鑰放在TortoiseGit上

保存密碼方式如下,需要setting中填寫自己的名字,Email地址,並在.gitconfig中 [credential] 中設置helper = store

六、Git命令

在這裏插入圖片描述

七、其他幫助

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