由於工作的變換,開始接觸git,所以把git進行了初步的學習和整理。此系列的內容基本都是來自網路上各個網友的經驗
總結和分享,個人也僅僅用於學習習記錄,方便日後檢視,如有侵權望告知。
1、版本控制和git。
上乙個工作用的是svn,自己也沒有系統的學習過,就直接熟悉常用命令開始上手工作,雖然也不耽誤什麼,但這種學
過程,先從入門了解和常用命令學起。
版本控制系統vcs(version control system),是一種記錄若干檔案變化,以便將來查閱特定版本修改記錄的系統。對
於程式設計開發人員來說,我們常使用版本控制系統來對程式源**進行版本管理。但實際上,我們可以對任何型別的檔案進
行版本控制。個人通俗的說,就是記錄你所有的提交修改,在你需要的時候可以找到你的修改進行一系列的如回退、重寫
修改等等的操作。
版本控制系統根據實現方式又分為如下三種:
本地版本控制系統 :採用某種簡單的本地資料庫來記錄檔案的歷次更新差異。
集中式版本控制系統:有乙個統一的集中管理的版本控制管理伺服器,儲存所有檔案的修改版本,而協同工作的人們都
通過客戶端連線到這台伺服器,然後進行檔案的獲取或者修改完後的提交。
git就是一種分布式的版本控制系統。
和控制的地方,通過倉庫你可以把本地**的修改提交到倉庫裡用來記錄,也可以從倉庫裡面進行恢復某些提交,檢視提
交歷史等等的操作。而svn由於本地沒有**倉庫所以只能聯網向伺服器中的**倉庫進行提交。而對於git這種分布式的
會拷貝下來**倉庫,那麼就可以實現本地的提交、修改、查詢歷史記錄等等的操作,那麼如何在本地怎麼實現同步那?別
擔心等你需要的時候你把你的修改push到伺服器端,這樣就完成了同步。
還有一點其實分布式版本控制系統沒有伺服器和客戶端之分的,因為拷貝的時候是拷貝的完整的**倉庫,誰都可以進 行
版本管理。從上圖也可以看出,客戶端a、b也可以需向推送更新,甚至伺服器也可以從a、b上推送更新。那麼這個
圖中的伺服器又是怎麼回事那?其實這是我們人為規定的,比如大家一塊協同改某個專案的**,總的有乙個人或者說一
個客戶端來充當伺服器,大家都用它的的**來更新,當做完自己的工作的時候統一的都提交到它的版本庫中。這樣就把
它看做了我們的伺服器,來完成規範。
2、git的基本概念。
git由三部分組成:工作區、暫存區和版本庫。
工作區:就是你在電腦裡能看到的本地目錄。
暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index檔案(.git/index)中,所以我們把暫存區有時也叫作
索引(index)。
版本庫:工作區有乙個隱藏目錄.git,這個不算工作區,而是git的版本庫。版本庫中的檔案都會由 git 進行管理,當我
們對檔案進行修改、刪除、git 都可以對其進行跟蹤。通過git commit命令來加入到版本庫。
config:存放的是git的配置的一些引數設定。比如你的郵箱、使用者名稱等,呼叫git config ... 會操縱這裡。
objects: 目錄存放的是實際的檔案,當git add命令執行的時候,檔案已經被存到了objects目錄下。再執行commit的時
候還往這個目錄下生成檔案.這些物件主要是commit物件和tree物件(目錄樹)(感覺就是存放所有的物件)
index : 是乙個索引檔案。存放的是暫存區的整個目錄樹的資訊,並且為目錄樹中的每個檔案都儲存了時間戳和長度.當
git add 將某個檔案新增到暫存區的時候(注意新增進去的時間節點,你只是改工作區的目錄是不會有任何變化
的),index檔案中新增了這個檔案的基本資訊。
head:儲存了當前的分支(branch)的資訊,然後間接指向當前所在分支的最新提交。如:
ref: refs/heads/master 代表當
前處於master的分之下.
refs: 稱為引用目錄. 引用就是乙個檔案,裡面包含了乙個commit id。
.git/refs/heads目錄下儲存的是本地分支引用,比如./git/refs/heads/master檔案就是master分支的引用。
.git/refs/tags目錄儲存了tag引用。
應該還可以有各個遠端分支的引用目錄,因為看到了乙個remotes?
網路上的非常好圖:
基本的git工作流程:
1)、在本地的工作區修改某些檔案。
2)、然後對修改後的檔案進行快照,儲存到暫存區域,也就是add。
3)、提交更新,將儲存在暫存區域中的檔案快照commit到git的版本庫的對應分支中,上圖是master分支。
4)、最後把本地的版本庫中的內容更新推送到遠端的大家共用的版本庫當中。
關於git管理下的檔案狀態:
從大的方面來看分為:未跟蹤(untracked)和已跟蹤(tracked)。新建的檔案未呼叫add就處於未跟蹤狀態。而在
tracked狀態下又可分為好幾種:大體上來說有如下三種階段時的狀態:
已修改(modified) 表示修改了某個檔案,但還沒有提交儲存;
已暫存 (staged)
表示把已修改的檔案放在下次提交時要儲存的清單中了;
已提交(committed
)表示該檔案已經被安全的儲存在本地資料庫中了;
其實不止這幾種比如有new、delete等等的狀態。 最終就是對應到三個工作區域:工作區、快取區、版本庫之間來回
的跳轉。
3、git和svn的區別。
主要的區別:
1)、git是分布式版本控制,svn集中式版本控制。
就如我們上面所描述的分布式和集中式。分布式有兩個很重要的特點:a、任何時候都可以提交自己的修改來生成 一
次提交記錄,在需要的時候如有網路的時候再進行統一的push。此時可能有的人就說svn也可以啊,雖然沒網路的時
候不能提交但是也可以繼續修改,等有網再提交這不一樣嗎?其實很不一樣的,比如你改的大的bug或者需求,需要如
一兩周的時間,這期間這個bug你會有好幾個階段性的工作,用git的時候你就可以每個階段都提交,到時候統一push而
svn你只能等聯網的時候統一提交。這時候假如你發現前面某個想法是不對的,你需要再手動的小心翼翼的revert掉相
關的修改,而git直接回退到那個版本即可。在較複雜的情況下,這個是很好用的。b、沒有所謂的**伺服器,
這樣不
會出現**伺服器掛掉的時候大家都無法工作,甚至丟失資料。
git當**伺服器出現問題的時候,你可以從別的地方拷
貝資料倉儲,還可繼續進行提交等操作。
2)、分支實現的不同。對於此處的內容理解git多的分支很重要,所以後面要單獨整理。
3)、其它的一些不同參考:
另外:svn 還是 git 的工作流,都是在本地解決衝突再提交。所有的版本管理系統一樣,他們讓你手動的修改衝突,因為
畢竟無法知道產生衝突時候你到底想要那一塊的**去掉那一塊的**。
svn工作流程:在本地已有遠端**的情況下。
1、寫**,修改bug。
2、從伺服器拉回伺服器的當前版本庫,並解決伺服器版
本庫與本地**的衝突。
3、將本地**提交到伺服器。
git工作流程:
在本地已有遠端**倉庫的情況下。
1、寫**,修改bug。
2、提交到本地版本庫。
3、從伺服器拉回伺服器的當前版本庫,
並解決伺服器版本庫與本地**的衝突。
4、將遠端庫與本地**合併結果提交
到本地版本庫。
5、將本地版本庫推到伺服器。
初步認識spring spring入門
由20多個模組組成,分為 spring 核心控制反轉ioc 和 面向切面程式設計aop spring 的主要作用就是為 解耦 降低 間的耦合度。就是讓物件和物件 模 塊和模組 之間關係不是使用 關聯,而是通過配置來說明。即在spring 中說明物件 模 塊 的關係 spring 使用ioc 降低業務...
對git的初步認識
版本控制系統 vcs 版本控制系統 vcs 是軟體,幫助軟體開發人員攜手合作,他們的工作並保持完整的歷史。以下是vcs目標 允許開發人員同步工作.不要覆蓋對方的變化.維護歷史的每乙個版本.以下是常見的vcs 集中式版本控制系統 cvcs 分布式 分布式版本控制系統 dvcs 在這個教程,我們將介紹集...
儲存入門 初步認識
開放系統的直連式儲存 direct attached storage 簡稱das 已經有近四十年的使用歷史,隨著使用者資料的不斷增長,尤其是數百 gb以上時,其在備份 恢復 擴充套件 災備等方面的問題變得日益困擾系統管理員。主要問題和不足為 直連式儲存依賴伺服器主機作業系統進行資料的 io讀寫和儲存...