git的基本介紹和使用

2021-09-08 04:42:03 字數 4661 閱讀 9438

前言:從事ios開發一年多以來,一直使用svn管理源**。對svn的特點和弊端已經深有體會。前些天雙十二前後,專案工期緊張到爆,起早貪黑的加班,可謂披星戴月,這還不止,回到家中還要瘋狂的敲**。那麼問題來了,公司svn伺服器是內網伺服器,在家裡無法訪問,提交/更新**就成了問題。跟技術總監(筆者公司為初創型小公司,直接和技術總監對話)溝通後,技術總監同意了把svn伺服器改為外網伺服器。但是,這並不是好的解決辦法,畢竟svn伺服器掛到外網上,從安全性上總是說不過去。於是乎,git成了我心中取代svn的上上策。昨天上班開會就跟cto提出使用git管理**的建議,他也愉快的答應了。

git是一款開源的分布式版本管理工具,git的誕生也是相當傳奇的,由linux之父-linus benedict torvalds開發而來,當初linus benedict torvalds僅僅是為了輔助linux核心的開發才一併開發了這個至今為止世界上最快的、最簡單的版本管理工具。關於這個傳奇的故事,筆者就不在此贅述。

目前,git雖然很流行,但也僅僅是在國外。在國內,多數公司還在使用svn進行版本控制,不過不用擔心,據筆者所知,已經有很多大公司(像bat這樣的網際網路公司)開始由svn轉向git。並且,越來越多的開源專案已經轉移到git,很多開源**上的**就是git來管理的,所以git取代svn是大勢所趨的。

前面已經說過,git是一款開源的分布式版本管理工具。相對於分布式,還有一種集中式,集中式版本管理工具的傑出代表就是svn。關於svn的詳細介紹,讀者可以檢視筆者之前寫過的幾篇文章:  

如下兩張圖,可以概括分布式和集中式管理工具的架構,圖(1)為分布式版本管理工具架構,圖(2)為集中式管理工具架構。

圖(1)

圖(2)

這裡筆者想象出來乙個比較容易理解的例子,可以概括出分布式和集中式的區別:像bat這樣的大公司,員工層級架構比較複雜,每個技術部門都設有技術負責人(cto),而每個部門內部又根據分工設有技術經理、主管、組長等等,一般情況下,員工只需要向自己的直屬上級匯報工作即可,這樣工作起來,效率比較高。而像筆者這樣的初創型小公司,部門內部角色就沒有那麼複雜了,技術部門每個員工都可以向cto直接反應問題,cto要處理來自n個技術人員反應的問題,效率比較低。bat這樣的大公司的員工各層級架構就像是分布式一樣,而後者就像是集中式一樣。

從圖(2)可以看出,集中式管理系統的**統一的由一台伺服器集中管理。其他系統如果想得到**,必須從這一台伺服器上拷貝。同樣,其他系統想要提交**,也只能向這台伺服器提交。這台伺服器起到了乙個集中管理所有**的作用,當然如果svn伺服器出現故障,那麼後果不開設想。

從圖(1)可以看出,分布式管理系統的**可以由自己本地伺服器來管理。因為每個系統本地都有乙個本地**倉庫(相當於遠端**倉庫在本地的備份),本地系統可以先把**提交到本地**倉庫,然後再由本地**倉庫提交到共享版本庫(在這裡,共享版本庫相當於集中式管理系統的遠端**倉庫)這樣在本地系統和共享版本庫之間新增了一層本地**倉庫,開發人員直接和本地**倉庫打交道,減輕了對共享版本庫的壓力,並且也降低了開發人員因為誤操作而導致對遠端**倉庫的汙染。

正是因為二者的這個差別,通過分布式,我們可以在沒有網路的情況下,先把**提交到本地**倉庫,速度之快不言而喻,待到有網路時再提交到共享版本庫。而如果通過集中式,我們不能夠在沒有網路的情況下把**提交到遠端**倉庫,即便是有網路,頻繁的傳輸對svn的壓力比較大,並且每次傳輸都要受限於網路速度。

git的工作原理還是比較簡單的,當我們建立了本地**倉庫後,會在本地**倉庫的根目錄中生成乙個.git的隱藏檔案。.git為乙個檔案目錄,又叫做版本庫。在本地**倉庫資料夾中,除.git目錄之外的所有與.git同級的目錄及其子目錄都叫做工作區。

工作區(working directory):倉庫資料夾裡除.git目錄以外的內容

版本庫(repository):.git目錄,用於儲存記錄版本資訊

暫緩區(stage)

分支(master):git自動建立的第乙個分支

head指標:用於指向當前分支

git add和git commit的原理

git add :把檔案修改或者新新增的檔案新增到暫存區

git commit :把暫存區的所有內容提交到當前分支

下面一幅神圖就可以解釋git add 和 git commit的原理:

我們修改或者新新增的檔案起初是處於工作區,通過git add命令可以把工作區的檔案移動到版本庫中的暫緩區(stage)。

處在暫緩區(stage)的**可以通過git commit -m 「提交的注釋」 提交到版本庫中的分支(master)。

處在分支(master)中的**可以通過git push命令push到共享版本庫。

注意:只有分支中的檔案才可以push到共享版本庫。

1.初始化乙個**倉庫

git init

2.如果使用git必須給git配置乙個使用者名稱和郵箱

給當前的git倉庫配置乙個使用者名稱和郵箱

git config user.name 「ws」

git config user.email 「[email protected]

配置乙個全域性的使用者名稱和郵箱

git config --global user.name 「ws」

git config --global user.email 「[email protected]

3.初始化專案

touch main.m : 建立了main.m

git add main.m : 將新新增的檔案或者修改的檔案新增到暫存區

git commit -m 「初始化專案」

git add . : 將所有沒有被新增到暫存區或者**倉庫的檔案新增到暫存區

注意:無論是新新增的檔案或者修改的檔案,都需要先通過add命令新增到暫存區中,之後再通過commit命令新增到本地倉庫中

4.檢視檔案的狀態 git status

紅色 : 新建立的檔案或者被修改的檔案,沒有被新增到暫存區

綠色 : 表示檔案在暫存區,但是沒有被新增到本地倉庫中

5.給命令起別名

git config alias.st 「status」

git config alias.ci 「commit -m」

git config --global alias.st 「status」

6.git刪除檔案

git rm 檔名

7.檢視版本號

git log

git reflog

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」

git lg

8.git的版本號是由sha1演算法生成40位的雜湊值

9.版本回退

git reset --hard head : 回退到當前的版本

git reset --hard head^ : 回退到上乙個版本

git reset --hard head^^ : 回退到上上個版本

git reset --hard head~100 : 回退到前100版本

git reset --hard 版本號(前5位)

真實的git伺服器的搭建是非常繁瑣且複雜的,並且git伺服器只能搭建在linux系統上。筆者對git伺服器的搭建不做介紹,日後有時間再加以補充。在此僅對共享版本庫的搭建進行詳細介紹。

1.建立共享版本庫資料夾,然後終端進入該資料夾下執行以下命令建立乙個空的共享版本庫

git init --bare

git clone 位址

3.新增需要忽略的檔案

touch .gitignore

git add .gitignore

git commit -m 「新增了需要忽略的檔案」

4.專案經理初始化專案

git commit -m 「初始化專案」—>提交到本地**倉庫

5.將專案push遠端倉庫中

git push origin

6.當源**管理是使用git,並且在xcode進行多人開發的操作

注意:當使用git,專案中用到了靜態庫就不需要通過命令列進行新增

1.1.0版本開發完成,之後對1.0版本進行備份

git tag -a weibo1.0 -m 「這個是1.0版本」 : 給某乙個版本打上標籤(weibo1.0是標籤名稱)

git tag : 檢視所有的標籤

2.需要將1.0版本的標籤,push到伺服器

git push origin weibo1.0

3.繼續開發2.0版本

4.發現1.0版本有bug,從標籤裡面clone 1.0版本,從標籤建立乙個fixbug分支,在分支中修復bug

git clone 共享版本庫

git checkout weibo1.0(標籤的名稱)

git checkout -b weibo1.1fixbug(分支名稱)

git tag -a weibo1.1 -m 「這個是修復了1.0版本bug的1.1版本」

git tag

git push origin weibo1.1

將子分支中**合併到主分支,pull—>weibo1.1fixbug—>push master—>其它同事更新

6.刪除分支

git branch -r(r是遠端倉庫的意思,這個命令可以檢視遠端倉庫中的分支)

git branch -r -d 分支名稱

git介紹和使用

開啟git bash git config global user.name git config global user.email git有乙個系統級的配置檔案 git config system l 或者 git config l 檔案在 安裝git的目錄下的etc gitconfig中 gi...

Git(一)基本介紹和安裝

git 定義 分布式版本控制系統 提下github,是基於git的 託管 同樣對專案進行版本控制,注意私有庫需要付費 跟svn cvs比較 相同點 版本控制軟體 不同點 svn是集中式的版本控制,版本庫放在 伺服器 通常操作使用聯網來比對內容 git是分布式的版本控制,各自電腦會存放完整版本 只推送...

miniconda的介紹和基本使用

conda 是一種通用包管理系統,旨在構建和管理任何語言和任何型別的軟體。舉個例子 包管理與pip的使用類似,環境管理則允許使用者方便地安裝不同版本的python並可以快速切換。anaconda 則是乙個打包的集合,裡面預裝好了conda 某個版本的python 眾多packages 科學計算工具等...