1. 程式人生 > >git架構圖解

git架構圖解

  圖比較大,如果看不清楚請下載我資源,原創的收1分,望理解~~

  下面開始對圖詳解,假設你是圖中的開發者1,紅線代表你可以操作的,流程中的虛線代表可以有,但是往往不用的。講解的順序圖中紅圈已經標明。

1git --bare init

  --bare代表只儲存變化不儲存實際檔案,作為中心伺服器一般都是這樣初始化的。初始化後會預設建立一個master分支(怎麼建立其他分支參考下面的git push)。這裡一個有趣的問題來了,不是說git是分散式的麼,任何一個庫都是中心庫,那麼為何還有中心伺服器?中心伺服器有什麼不同?弄一箇中心伺服器的好處就不多說了,簡單解釋下中心伺服器的不同之處。我們

init一個git庫後,要想其他人能訪問,必須得共享出去。共享的方式有好多種,需要依賴其他軟體如gitosis等。具體請查閱這篇文章。這樣別人就能通過clonepullpushfetch命令跟你打交道了。如果開發者2也安裝了釋出工具,那麼同一個專案你可以跟兩個遠端庫互動。這種情況很少遇到,一般都是大家通過中心伺服器來間接互動。

2-1git clone [-b branchName] url

  首次參與專案需要先clone下來,-b引數可以指定分支名,不指定預設使用master分支。

  這時候你本地會有一個專案的拷貝。這時候你可以檢視一些資訊:

1)git remote show 檢視所有遠端庫,你會發現輸出origin

origin就代表你剛才clone下來的遠端庫。如果開發者2安裝了釋出軟體,你可以使用“git remote add dota 開發者2url”來新增一個遠端庫且你把他命名為dota,這樣你這個專案就可以跟兩個遠端庫打交道了。對應的還有git remote rm dotagit remote rename dota dota2git remote set-url dota url2

2)git remote show origin 檢視遠端庫origin的詳細資訊。

3)git branch [-r -a] 檢視分支,不帶引數是檢視本地分支,-r檢視遠端的,-a檢視所有。其中前面帶*

號的代表你當前工作目錄所處的分支,remotes代表遠端庫,remotes\origin代表遠端庫中的originremotes\origin\master代表遠端庫中的origin中的master分支。HEAD那個不懂幹嘛

* master

  remotes/origin/HEAD -> origin/master

  remotes/origin/master

2-2git pull origin branch1

從遠端origin拉取branch1分支的內容然後合併到當前所處的本地分支。直接git pull的話預設遠端庫是orgin,預設遠端庫的分支是master

2-3git fetch origin branch1或者git fetch origin branch1:tmp

  從遠端origin拉取branch1分支的內容到本地origin/branch1分支裡面,如果本地沒有這個分支就建立。更清晰點的應該使用git fetch origin branch1:tmp直接指明本地分支用tmp這個名字。直接git fetch是什麼效果還沒試過。由此可見git fetchgit pull都是從遠端拉取分支到本地,不同的是git pull拉取後馬上自動合併。

3git push origin master:branch1

  把本地的master分支提交到遠端originbranch1分支上,如果遠端沒有branch1分支,則建立,所以遠端分支的建立方法應該如此。對應的遠端分支的刪除則是git push origin :branch1,命令中本地分支名留空則能刪除遠端branch1分支了。值得指出的是,遠端分支不需要指明全稱,例如你git branch -a看到有一個remotes/origin/dir1/branch1那麼你只需要寫上dir1/branch1即可。下面來最討厭的預設情況。

git push origin master(本地master到遠端master

git push(哥不幹了)

4git branch -b branchnew branchold

  這個是本地分支的建立方法之一(另一種方法參考git checkout),以branchold為模板,建立branchnew分支,這個branchold既可以是本地的也可以是遠端的,如果是遠端分支的記得輸入全名,例如remotes/origin/master如果沒用指明branchold,則預設使用HEAD所指向的提交建立分支。

本地分支的刪除使用git branch -d branchname。如果該分支有改動且沒有合併到其他分支上,會報錯。你可以使用-D強行幹掉。

5git checkout -b branchnew branchold

  該命令的本意是切換本地分支,可以使用最簡單語法git checkout branchname,如果分支不存在則報錯。而git checkout -b branchnew brancholdbranchnew存在則切換,不存在則以branchold為模版建立一個新分支,然後切換到新分支上。這是建立本地分支的第二個方法。

6:其實6可以當不存在,如圖如果你是開發者1,那麼工作目錄就是branchA,你用pullfetch以及即將介紹的merge處理分支的時候,如果branchA被更新了,那麼就相當於你的工作目錄被更新了。分開是為了下面的介紹。

7git merge branch1 branch2 branch3......

  把branch1branch2branch3等合併到當前分支。當然,實際中當然是一個一個來了,要不處理衝突可能會嚇死你。

8和9git addgit rm、git resetgit commit

  到了這裡,需要解釋下圖中黃色底的那些文字的概念了。

  如果你在branchA上工作,其實branchA還可以細分為三塊。

  work tree:你當前在修改的專案,你能看到的檔案。

  index file:又稱staged,當你使用git add file1 file2......系統會在索引檔案中記錄你打算提交的東西(新添的檔案和修改的檔案都使用git add,別糾結這個了,刪除的檔案使用git rm)。

  commit:真正的branchA分支體。使用git commit -m “msg”可以提交索引檔案中記錄的提交內容。如果你之前沒有使用git add或者git rm把檔案修改標記到索引檔案中,則提交失敗或者提交不全。有一種情況例外,-a引數可以直接提交所有被git管理的檔案,不需要使用git add新增到索引檔案。至於-m則是必須的。

    git add可以指明一個目錄,而git rm則需要一個一個檔案來指定,想快捷只能用git commit -a來搞。

如果一個檔案被你add或者rm到index file裡面了,你想取消怎麼辦呢?git reset直接重置index file,git reset filename則取消某個檔案在index file的登記。

  如果你修改了一個檔案,想還原怎麼辦呢?git checkout -- filename,記住--和filename之間有空格。

  如果你想還原所有的檔案到某個版本怎麼辦呢?git reset --hard HEAD,--和hard之間沒有空格,HEAD意義我就不說了,你可以用commit的id替代,通過git log可以看到各個commit的id。

10git tag tagname

  標籤是什麼?其實沒那麼複雜,跟分支不是一個概念的。只是相當於你在當前分支的當前版本用一些字元標記一下,一般標籤內容都是專案版本號。開發到一定程度標記一下,代表到此為止版本1.0.1完成了出來了。

  本地標籤的建立 git tag tagname或者git tag -a v1.1.1 -m ‘my v1.1.1’

  本地標籤的刪除 git tag -d tagname

  本地標籤的檢視 git tag -l ‘1.4.2*’

  使用git push的時候預設是不提交標籤的,所以當你打了標籤要使用git push origin -tags來單獨提交標籤。某個版本打標籤要在commit之後。上述建立標籤的-a引數一定要加上-m輸入描述。或者直接-s替代-a不需要-m,描述自動幫你加上。

  遠端標籤刪除使用 git push origin :refs/tags/0.1.3

  標籤詳細檢視使用 git show v1.1.1

11git diff

  這玩意太博大精深了,不做詳解,列出常用的。

  master分支的某個版本號某個檔案與當前該檔案比較:

  git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./socket_helper.cpp

  兩個tag(專案版本)之間相差哪些檔案,做補丁包常用:

  git diff tag1 tag2 --stat

  太多了,我研究不過來,改天吧。

待寫問題:衝突識別和解決

相關推薦

git架構圖解

  圖比較大,如果看不清楚請下載我資源,原創的收1分,望理解~~!   下面開始對圖詳解,假設你是圖中的開發者1,紅線代表你可以操作的,流程中的虛線代表可以有,但是往往不用的。講解的順序圖中紅圈已經標明。 1:git --bare init   --bare代表只儲存變化不儲存實際檔案,作為中心伺服器一般

git 命令圖解

交互 lib set 同義詞 資源 status 唯一標識 添加 OS git 命令圖解 初始化版本庫 git config user.name "lsgx" git config user.email "[email protected]" git config c

SparkStreaming原始碼執行架構圖解

Spark Streaming基本原理:是將流資料分成小的時間片段(幾秒),以類似批處理方式來處理這部分小資料。 處理流程: Spark Streaming把實時輸入資料流以時間片Δt (如1秒)為單位切分成塊 Spark Streaming會把每塊資料作為一個RDD,並

IntelliJ IDEA + GitHub(git) 詳細圖解 如何實現專案的版本控制和管理(on win 7 64 bit)

在IntelliJ IDEA 編輯器裡面使用GitHub,把專案放到GitHub伺服器上,實現版本管理的目的。 具體遇到並解決了下面問題。1."Cannot run program "git.exe": CreateProcess error=2, 系統找不到指定的檔案

SourceTree進行開發Git專案圖解

1、從Git伺服器上獲取專案 2、建立新分支,提交我的修改專案 3、合併程式碼,釋出新版本 4、修復已釋出的版本的bug 5、使用SourceTree將bitbucket的遠端倉庫回滾到某一次提交 1、從Git伺服器上獲取專案 2、提交我的修改專

2018年醫療大資料系統演進架構圖解

    海量的醫療大資料來自於各個業務資訊子系統,資料的標準化程度低,在完成資料收集之後,隨後就面向後續的資料的清洗和加工步驟。如何把這些海量資料按照統一的標準進行清洗,是很多行業和企業現在面對的最大困境。阿里資料中臺為的資料ODS 層設計包含了三個特性:其一是資料同步功能,

Eclipse和MyEclipse安裝和使用git(egit)圖解筆記

Eclipse、MyEclipse使用git外掛(egit)圖解 在開發Java、JavaEE等相關程式時,我們會用到Eclipse或者MyEclipse,同時使用到git作為版本控制軟體,所以我們需要在這些IDE上整合git外掛,而egit正是Eclipse基金會開發外掛

Scrapy爬蟲架構圖解

這就是整個Scrapy的架構圖了; Scrapy Engine: 這是引擎,負責Spiders、ItemPipeline、Downloader、Scheduler中間的通訊,訊號、資料傳遞等等!(像不像人的身體?) Scheduler(排程器): 它負責接

[k8s]kube-dns架構圖解

kubedns  DNS Policy Kubernetes 目前在 Pod 定義中支援兩個 DNS 策略:Default和ClusterFirst,dnsPolicy預設為ClusterFirst: 如果dnsPolicy設定為Default,那

MongoDB架構圖解

本文圖片來自Ricky Ho的博文MongoDB構架(MongoDB Architecture),這是個一聽就感覺很寬泛的話題,但是作者在文章中確實對MongoDB由內至外的架構進行了剖析。本文截取了其文章中的幾張重點架構示意圖片進行簡單描述。希望對大家有用。 Mo

git原理圖解

開發十年,就只剩下這套架構體系了! >>>   

git架構設計

開發十年,就只剩下這套架構體系了! >>>   

MySQL基礎篇(05):邏輯架構圖解和InnoDB儲存引擎詳解

> 本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/mysql-data-base) || [GitEE·點這裡](https://github.com/cicadasmile/mysql-data-base) # 一、MySQL邏輯架構 ##

Hbase詳細架構圖解

[TOC](Hbase詳細架構圖解) ![Hbase架構圖](https://img-blog.csdnimg.cn/20200330102942226.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0

微服務學習與思考(03):微服務總體架構圖解

前面微服務2篇文章: - [微服務學習與思考(01):什麼是微服務?微服務的優勢和劣勢](https://www.cnblogs.com/jiujuan/p/13280473.html) - [微服務學習與思考(02):微服務實施前有哪些問題需要思考?](https://www.cnblogs.com/jiu

linux運維、架構之路-git版本管理

nbsp font 同步 class ges 之路 blog git服務器 工作目錄 一、常見版本管理系統 1、SVN 集中式的版本控制系統,只有一個中央數據倉庫,如果中央數據倉庫掛了或者不能訪問,所有的使用者無法使用svn,無法進行提交或者備份文件 2、Gi

圖解git中的最常用命令

pick 綠色 分享 SM 範圍 包括 增加 push 完全 圖解git中的最常用命令 Git命令參考手冊(文本版) git init # 初始化本地git倉庫(創建新倉庫

圖解大型互聯網網站系統架構的演進過程(轉載)

增加 數據傳輸 反向代理 空間 互聯 ref 北京 例如 文件 https://blog.csdn.net/javaxuexi123/article/details/79028020 前言 一個成熟的大型網站(如淘寶,京東等)的系統架構並不是開始設計就具備完整的高性能,高可

圖解資料中心水系統標準和架構(大全)

依照TIA-942標準。資料中心水系統能夠分為四個標準,各自是T1、T2、T3和T4。 一、T1:無備用級。全部裝置和管路均無冗餘。N+0配置,冷機、冷卻塔、水泵和末端只能滿足實際需求,沒有備份和冗餘,不論什麼裝置的故障都會影響系統的工作;

圖解:傳統架構到分散式服務化架構架構演進

前言 從計算機在中國進入,到網際網路時代再到現在的移動網際網路時代和正在向我們走來的大資料時代和AI時代,專案架構也隨著時代的改變在不斷的演化升級,從單一應用架構到現在的分散式服務化架構,經歷了很大的發展和改變。下面就是利用圖片給大家講解發展過程。 分析:剛開始網際網路因為電腦的普及不夠廣泛,網際網路使用