重點 (二十) : 源代碼:git

簡介

什么是git?

git是一款開源的分布式版本控制工具

在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的

git的起源

作者是Linux之父:Linus
Benedict Torvalds

當初開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼)

git的現(xiàn)狀

在國外已經(jīng)非常普及,國內(nèi)并未普及(在慢慢普及)

越來越多的開源項目已經(jīng)轉(zhuǎn)移到git

其他版本控制工具

CVS

最早的開源、免費的集中式版本控制工具

自身設(shè)計有問題,會造成提交文件不完整,版本庫莫名其妙損壞的情況

SVN

修正了CVS的一些穩(wěn)定性問題,是目前用得最多的集中式版本庫控制工具

ClearCase

收費的集中式版本控制工具,安裝比Windows還大,運行比蝸牛還慢

能用ClearCase的一般是世界500強,他們有個共同的特點是財大氣粗或者人傻錢多

VSS

微軟的集中式版本控制工具,集成在Visual Studio中

由于它反人類的設(shè)計,連微軟自己都不好意思用了

1.png

2.png

git和SVN的簡單對比

速度

在很多情況下,git的速度遠遠比SVN快

結(jié)構(gòu)

SVN是集中式管理,git是分布式管理

其他

SVN使用分支比較笨拙,git可以輕松擁有無限個分支

SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作

舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git

3.png

4.png

使用git
跟SVN一樣,你可以通過命令行敲指令或者圖形界面客戶端使用git

在Mac上,比較好用的git圖形界面客戶端有
SourceTree
下載地址:http://www.sourcetreeapp.com/download/

GitHub
下載地址:https://mac.github.com
不過它是專門為GitHub網(wǎng)站而設(shè)計的

Xcode

5.png

git常用指令

git help :git指令幫助手冊

查看其他指令的做法:git help 其他指令

git config :git的配置信息相關(guān)(修改的是.git/config文件)

配置用戶名:git config “user.name”用戶名(用于跟蹤修改記錄)

配置郵箱:git config “user.email”郵箱(用于多人開發(fā)間的溝通)

查看配置信息:git config –l

編輯配置信息:git config –e(用vim編輯,:wq是退出vim編輯器)

設(shè)置指令的別名:git config alias.別名 原指令名稱

設(shè)置帶參數(shù)指令的別名:git config alias.別名“原指令名稱 參數(shù)”

將此設(shè)置應(yīng)用到整個系統(tǒng)中:git config ––gloabal

git常用指令

git status :查文件的狀態(tài)

查看某個文件的狀態(tài):git status 文件名

查看當前路徑所有文件的狀態(tài):git status

git log :查看文件的修改日志

查看某個文件的修改日志:git log 文件名

查看當前路徑所有文件的修改日志:git log

用一行的方式查看簡單的日志信息:git log ––pretty=oneline

查看最近的N次修改:git log –N(N是一個整數(shù))

git diff :查看文件最新改動的地方

查看某個文件的最新改動的地方:git diff 文件名

查看當前路徑所有文件最新改動的地方:git diff

git常用指令

git init :初始化一個空的本地倉庫,生成一個.git目錄,用于維護版本信息

在當前路徑初始化倉庫:git init

在其他路徑初始化倉庫:git init 倉庫路徑

git add :將工作區(qū)的文件保存到暫緩區(qū)

保存某個文件到暫緩區(qū):git add 文件名

保存當前路徑的所有文件到暫緩區(qū):git add .(注意,最后是一個點 . )

git commit :將暫緩區(qū)的文件提交到當前分支

提交某個文件到分支:git commit -m ”注釋” 文件名

保存當前路徑的所有文件到分支:git commit -m ”注釋”

git reset :版本回退(建議加上––hard參數(shù),git支持無限次后悔)

回退到上一個版本:git reset ––hard HEAD^

回退到上上一個版本:git reset ––hard HEAD^^

回退到上N個版本:git reset ––hard HEAD~N(N是一個整數(shù))

回退到任意一個版本:git reset ––hard 版本號(版本號用7位即可)

git reflog :查看分支引用記錄(能夠查看所有的版本號)

git rm:刪除文件(刪完之后要進行commit操作,才能同步到版本庫)

git clone:下載遠程倉庫到本地

下載遠程倉庫到當前路徑:git clone 倉庫的URL

下載遠程倉庫到特定路徑:git clone 倉庫的URL 存放倉庫的路徑

git pull:下載遠程倉庫的最新信息到本地倉庫

git push:將本地的倉庫信息推送到遠程倉庫

工作原理

如果想了解git的工作原理,有幾個核心概念必須知道

工作區(qū)(Working Directory):倉庫文件夾里除.git目錄以外的內(nèi)容

版本庫(Repository):.git目錄,用于存儲記錄版本信息

暫緩區(qū)(stage)

分支(master):git自動創(chuàng)建的第一個分支

HEAD指針:用于指向當前分支

git add和git commit的原理

git add :把文件修改添加到暫存區(qū)

git commit :把暫存區(qū)的所有內(nèi)容提交到當前分支

遠程倉庫

如果是多人團隊開發(fā),最好還是搭建一個遠程倉庫

搭建遠程倉庫的途徑

自己搭建一個git服務(wù)器:費時費力

在GitHub上托管項目:公開項目免費、私有項目收費,很多第三方開源項目

在oschina上托管項目:完全免費,在國內(nèi)訪問速度快(推薦使用)

1.png

2.png

搭建GitHub遠程倉庫 – 配置SSH Key


3.png

搭建GitHub遠程倉庫– 配置SSH Key

在Mac上生成SSH
Key(在終端輸入下面指令)

cd
~/.ssh

ssh-keygen -t rsa -C "你的郵箱地址”

然后一直敲回車

然后就會在~/.ssh目錄下生成SSK Key的秘鑰對

id_rsa :私鑰,不可泄露

id_rsa.pub :公鑰,可以公開(將這個文件的內(nèi)容粘貼到GitHub上)

利用cat指令可以查看文件的內(nèi)容

cat id_rsa.pub

1.png

2.png

3.png

4.png

5.png

6.png

7.png

*******************筆記*********************


一. 掌握 - git 概述

  1. git 簡介?
    1.什么是git?

git是一款開源的分布式版本控制工具
在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的

2.git的起源?

作者是Linux之父:Linus Benedict Torvalds
當初開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼)

3.git的現(xiàn)狀?

在國外已經(jīng)非常普及,國內(nèi)并未普及(在慢慢普及)
越來越多的開源項目已經(jīng)轉(zhuǎn)移到git

  1. 常見的源代碼管理工具有哪些?

CVS

  • 開啟版本控制之門
  • 1990年誕生,“遠古時代”的主流源代碼管理工具

SVN

  • 全稱是Subversion,集中式版本控制之王者
  • 是CVS的接班人,速度比CVS快,功能比CVS多且強大
  • 在國內(nèi)軟件企業(yè)中使用最為普遍(70%-90%)

ClearCase

  • 收費的集中式版本控制工具,安裝比Windows還大,運行比蝸牛還慢
  • 能用ClearCase的一般是世界500強,他們有個共同的特點是財大氣粗或者人傻錢多

VSS

  • 微軟的集中式版本控制工具,集成在Visual Studio中
  1. git 和 svn的簡單對比

速度
在很多情況下,git的速度遠遠比SVN快

結(jié)構(gòu)
SVN是集中式管理,git是分布式管理

其他
SVN使用分支比較笨拙,git可以輕松擁有無限個分支
SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作
舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git

  1. SVN工作流程和GIT工作流程對比
  • svn checkout —— git clone
    svn 只下載代碼, git 會連同代碼倉庫一起下載下來

  • svn commit —— git commit
    svn 是提交到服務(wù)器,git 中是提交到本地倉庫,需要使用push才能提交到服務(wù)器

  • svn update - git pull
    都是從服務(wù)器下載最新被修改的代碼
    分布式和集中式最大的區(qū)別在于:在分布式下,本地有個代碼倉庫,開發(fā)者可以在本地提交; 而集中式版本控制, 只有在服務(wù)器才有一個代碼倉庫, 只能在服務(wù)器進行統(tǒng)一管理

  1. git工作原理
    1.概念理解
  • 工作區(qū)

與.git文件夾同級的其他文件夾或者子文件夾

  • 版本控制庫

暫緩區(qū)
分支(Git不像SVN那樣有主干和分支的概念. 僅僅存在分支,其中master分支為默認被創(chuàng)建的分支,類似于SVN中的主干)
切換分支:通過控制HEAD指針指向不同的分支,就可以切換*
操作原則: 所有新添加/刪除/修改的文件 必須先添加到暫緩區(qū),然后才能提交到HEAD指向的當前分支中

  1. git使用環(huán)境
    1.單人開發(fā)只需要一個本地庫
    原因:不需要與他人共享代碼,只負責(zé)管理自己代碼即可;例如提交代碼,刪除代碼,版本控制等等

2.多人開發(fā)時需要一個共享版本庫
共享版本庫的形式:
本地共享庫:文件夾/U盤/硬盤
遠程共享庫:自己搭建git服務(wù)器/ 托管到第三方平臺(例如github, oschina)

3.客戶端使用環(huán)境 無論是單人開發(fā)還是多人開發(fā),客戶端都可以使用命令行或者圖形界面使用git

SourceTree

GitHub

Xcode

  • 雖然集成較好,但是只能做一些常用的簡單操作,復(fù)雜操作還要使用命令行
  1. 學(xué)習(xí)網(wǎng)站
    http://backlogtool.com/git-guide/cn/intro/intro1_1.html

二. 掌握 - Git命令行演練-個人開發(fā)

  1. 如何學(xué)習(xí)git指令

git help [子命令]
和學(xué)習(xí)SVN指令是一樣的,只不過git是通過使用指南的形式展示給用戶看(不能編輯的vim編輯器),使用q退出vim編輯器,按空格進入下一頁,ctrl + B 回到上一頁; /關(guān)鍵字 進行搜索

  1. 初始化一個本地倉庫

原因: 管理本地代碼,修改上傳,版本回退
命令: git init

  1. 配置倉庫

告訴git你是誰?(方便以后管理自己的代碼)
原因: 追蹤修改記錄
命令: git config user.name “Edison”

告訴git怎樣聯(lián)系你?
原因: 多人合作開發(fā)時, 溝通交流
命令: git config user.email "shunzi@qq.com"

查看配置信息(.git -> config打開)
命令: git config -l
? 全局的配置:git config --global user.name edison
? git config --global user.email 350106106@qq.com

  1. 個人開發(fā)演練

創(chuàng)建文件并提交
命令:
touch main.c
git add .

git commit -m “注釋”

修改文件并提交
命令:
git add .
git commit -m “注釋”
刪除文件并提交
命令:
git rm person.h
git commit -m “注釋”
日志查看
命令:
git log
git reflog
版本回退

命令:
git reset —-hard HEAD 重置到當前版本
git reset —-hard HEAD^^ 重置到上上個版本
git reset ——hard HEAD~2 重置到往上2個版本
git reset —-hard 七位版本號 重置到指定版本::

  1. 備注補充
    1.文件狀態(tài)(git status)

顏色含義
紅色: 代表被添加或者修改的文件沒有被添加到暫緩區(qū)
綠色: 代表文件在暫緩區(qū),等待提交
版本號的含義
版本號是一個由SHA1生成的40位哈希值
這樣做的目的是保證版本號的唯一

2.vim編輯器的使用:

8.png

命令模式:等待編輯命令輸入;所有輸入的內(nèi)容都被當做命令來執(zhí)行
插入模式:輸入的所有內(nèi)容都被顯示,并被當做文件內(nèi)容處理
命令行模式:執(zhí)行待定命令(保存文件并退出vim : wq ; 強制退出不保存: q! )

3.日志查看配置
命令如下:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

4.配置別名
git config alias.st “status”
git config alias.ci “commit -m”

5.--global的作用
可以進行全局配置,所有的版本庫共享此配置
查看全局配置(桌面前往->個人->.gitconfig
** 個人電腦上建議使用全局配置**

三. 掌握 - Git命令行演練-團隊開發(fā)
團隊開發(fā)必須有一個共享庫,這樣成員之間才可以進行協(xié)作開發(fā)

  1. 共享庫分類

本地共享庫(只能在本地面對面操作)

  • 電腦文件夾/U盤/移動硬盤

遠程共享庫(可通過網(wǎng)絡(luò)遠程操作)

  • 自己搭建Git服務(wù)器(不建議)
  • 在Github上托管項目(** 建議**)
    Github網(wǎng)址(https://github.com); 公開項目免費, 私有項目收費
  • 在OSChina上托管項目(** 推薦**)
    OSChina網(wǎng)址(https://git.oschina.net) 安全免費,在國內(nèi)訪問速度快
  1. 搭建本地共享庫
    原因: 多人合作開發(fā),代碼共享
    命令: git init —-bare

  2. 經(jīng)理初始化項目到本地共享庫
    命令: git clone 本地代碼倉庫地址

  3. 演示多人開發(fā)

創(chuàng)建文件夾manager, niuda
命令:
mkdir manager
mkdir niuda
分別進入到兩個文件夾從共享庫clone項目到本地
命令:
git clone 本地代碼倉庫地址
git clone 本地代碼倉庫地址
演練新增文件同步
命令:
touch person.h
git add .
git commit -m “創(chuàng)建person.h”
git push
git pull
演練修改文件同步
命令:
git add .
git commit -m “注釋”
git push
git pull
演練刪除文件同步
命令:
git rm filename
git commit -m “注釋”
git push
git pull
演練沖突解決
命令:
git pull

演練忽略文件
命令:
touch .gitignore
open .gitignore 加入忽略文件名
git add .
git commit -m “注釋”
.gitignore文件配置規(guī)則
http://www.cnblogs.com/ha iq/archive/2012/12/26/2833746.html

  1. 備注筆記

關(guān)于忽略文件
在真實開發(fā)中,配置.gitignore文件 , 去github里面搜索gitignore 選擇OC版本的,拷貝到本地倉庫即可,記得添加到本地版本庫

常見問題
fetch first 代表當前文件過期,需要從遠程共享庫更新
git pull

四. 掌握 - Git-XCode演練-團隊開發(fā)

  1. 搭建本地共享版本庫
    命令: git init —-bare

  2. 經(jīng)理初始化項目到共享版本庫
    ** 注意: 添加忽略文件, 不然Xcode有可能會把沒必要的文件提交**
    ** 必須在使用Xcode之前把忽略文件添加進來, 因為Xcode創(chuàng)建工程時, 默認直接把所有文件添加到暫緩區(qū), 加進去之后忽略文件對其就無效了**

  3. 牛大,牛二使用Xcode 克隆項目

  4. 演練添加文件同步

  5. 演練修改文件同步

  6. 演練刪除文件同步

  7. 演練沖突

五. 了解 - github的使用

  1. 托管項目到github-HTTPS驗證
    1.打開github網(wǎng)站:[https://www.github.com]
    2.注冊賬號(OneShunzi)
    3.點擊創(chuàng)建新倉庫[https://github.com/new]
    4.填入項目名稱,描述等信息
    5.創(chuàng)建完成
    6.可根據(jù)生成的版本庫地址進行克隆下來進行操作

  2. 托管項目到github-SSH驗證
    1.點擊”個人” -> setting -> SSH keys -> Add SSH key
    2.將生成的公鑰添加進來即可.(以下是生成公鑰私鑰方法) [https://help.github.com/articles/generating-ssh-keys/]

  3. 怎樣將其他著名框架添加到我們的代碼倉庫?
    1.搜索到對應(yīng)的框架
    2.點擊fork
    3.當項目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進行操作

** 注意:
你可以針對此框架進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響.
如果想向原作者提建議,可以直接使用,pull request操作.
提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿搜索到對應(yīng)的框架

六. 了解 - OSChina的使用

  1. 托管項目到OSChina
    1.打開oschina網(wǎng)站:[https://git.oschina.net]
    2.注冊賬號(OneShunzi)
    3.點擊創(chuàng)建新倉庫[https://git.oschina.net/projects/new]
    4.填入項目名稱,描述等信息
    5.創(chuàng)建完成
    6.可根據(jù)生成的版本庫地址進行克隆下來進行操作

  2. 怎樣加入合作伙伴?
    1.點擊”管理”->項目成員管理->選擇成員權(quán)限進行創(chuàng)建
    2.或者直接只用SSH(以下是生成公鑰私鑰方法)

部署公鑰允許以只讀的方式訪問項目,主要用于項目在生產(chǎn)服務(wù)器的部署上,免去HTTP方式每次操作都要輸入密碼和
普通SSH方式擔(dān)心不小心修改項目代碼的麻煩。
[https://help.github.com/articles/generating-ssh-keys/]

  1. 怎樣將其他著名框架添加到我們的代碼倉庫?
    1.搜索到對應(yīng)的框架
    2.點擊fork
    3.當項目被移到自己代碼倉庫中,就可以根據(jù)地址克隆下來進行操作
    ** 注意:
    你可以針對此框架進行任意修改,但是僅僅作用在你的本地倉庫中的副本,對原作者項目沒有任何影響.
    如果想向原作者提建議,可以直接使用,pull request操作.
    提交完成后,原作者可以在pull request中看到你的提交.至于是否采納,就是原作者的意愿

七. 了解 - 新人服務(wù)器搭建
1.新人服務(wù)器搭建概念原因?
概念: 搭建一個臨時共享版本庫, 供新人專用
原因: 防止新人剛到時,搞亂服務(wù)器上的項目
2.新建一個文件夾,newBee,作為新人服務(wù)器
3.進入文件夾 使用git init —-bare 初始化倉庫
4.經(jīng)理打開自己項目所在文件夾,執(zhí)行PULL ,更新到最新
5.然后source control ->項目master -> configure 項目

選擇Remotes 選項 代表當前所連的遠程服務(wù)器地址
點擊+號 添加 將newBee文件路徑作為另外一個遠程服務(wù)器地址 file:// 協(xié)議開頭 結(jié)尾以/結(jié)尾
Done
6.經(jīng)理將最新代碼提交到新人遠程倉庫
7.經(jīng)理分配新人服務(wù)器地址給新人
8.新人各種折騰
9.經(jīng)理建立文件夾,從新人服務(wù)器下載代碼檢查
10.圖解:

1.png

八. 了解- Git版本備份/分支管理

在git中不是通過拷貝代碼來解決備份和開啟分支的 git
直接打標簽, 通過控制head指向,來回到任一版本

1.版本備份

1.建立共享庫

創(chuàng)建文件夾shareWeibo

進入文件夾后,初始化共享庫

git init ——bare

2.經(jīng)理克隆項目后開發(fā)完1.0版本,打標簽后,上傳共享庫

創(chuàng)建manager文件夾

進入文件夾后

git
clone 共享庫絕對路徑

進入工作區(qū),配置姓名,郵箱

git config user.name
“manager”

git config user.email
manager@qq.com

經(jīng)理創(chuàng)建文件,并修改部分代碼,提交代碼,上傳到共享庫,完成v1.0版本

touch main.c

open
main.c:: 打開后寫入abc

git add .

git
commit -m “完成1.0版本開發(fā)”

git push

經(jīng)理給此版本打標簽,并將標簽上傳到共享庫

git tag
-a v1.0 -m “標記1.0版本”

git push origin v1.0

經(jīng)理繼續(xù)開發(fā)2.0版本......并提交

git add .

git
commit -m “2.0部分功能”

git push

  1. 已發(fā)布版本bug修復(fù)

在以上步驟基礎(chǔ)上做以下操作

1.牛大克隆項目,根據(jù)1.0版本創(chuàng)建分支,修復(fù)bug

創(chuàng)建niuda文件夾

進入文件夾后

git
clone 共享庫絕對路徑

進入工作區(qū),配置姓名,郵箱

git config user.name
“niuda”

git config user.email
niuda@qq.com

根據(jù)v1.0版本建立新分支v1.0fixbug并切換到此分支

git checkout v1.0 -b
v1.0fixbug::

修復(fù)bug后提交到本地版本庫

注意此處提交到的是HEAD指向的分支-v1.0fixbug

git add .

git
commit -m “修復(fù)bug”

2.牛大修復(fù)bug后,打標簽v1.1作版本備份,并上傳共享庫

git tag
-a v1.1 -m “1.1版本備份”

git push origin v1.1

3.牛大上傳整個分支到共享版本庫

git push origin
v1.0fixbug

———至此,分支修復(fù)bug結(jié)束,下面經(jīng)理要合并分支———

1.經(jīng)理從共享庫更新代碼到本地庫

git pull

2.經(jīng)理查看當前服務(wù)器都有哪些分支

git branch -r

3.經(jīng)理切換到master分支后,將v1.0fixbug分支合并過來

git checkout master

git
merge origin/v1.0fixbug -m “合并分支”

4.經(jīng)理合并完成后提交到共享庫

git add .

git
commit -m “合并分支”

git push

5.合并完成后,可以刪除共享庫的分支

git branch -r -d
origin/v1.0fixbug

6.查看版本標簽,至此結(jié)束!!

git tag

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,852評論 9 163
  • 今天是2016年2月22日,轉(zhuǎn)眼間我已經(jīng)畢業(yè)將近三年,換了三份工作,搬了四個地方,然而戀愛經(jīng)歷還是零,不知道從什么...
    靜靜Lee閱讀 473評論 0 0
  • 楔子:每個人都有他的瓶子,有人在瓶子中央,有人貼著瓶壁,他們活著。哲學(xué)家生來是敲瓶子的人。然而,漂往冥河誰不需要個...
    崔鈺懿閱讀 618評論 0 2
  • 我們活在浩瀚的宇宙里,漫天飄灑的宇宙塵埃和星河光塵,我們是比這些更渺小的存在。 這是《小時代》里周崇光的經(jīng)典語錄。...
    山城里的夏菇?jīng)?/span>閱讀 305評論 0 0

友情鏈接更多精彩內(nèi)容