GIT
GIT簡單介紹
GIT:是一款開源的分布式版本控制工具
在所有的分布式的版本控制工具中惑申,git是最快具伍、最簡單铆遭、最流行的
-
git起源
- 作者:Linux之父 ,Linux Benedict Torvalds沿猜,2005年
- 開始Linux是用Bitkeeper管理的,開發(fā)git僅僅是為了輔助Linux內(nèi)核的開發(fā)(管理源代碼),10天的時間就把git寫完了碗脊,第一次導(dǎo)入到git的代碼大約有5000萬行的代碼
-
git現(xiàn)狀
- 在國外已經(jīng)非常普及
- 越來越多的開源項目已經(jīng)轉(zhuǎn)移到git上面
- 比如:php
-
其他版本控制工具
-
CVS
- 最早的開源啼肩、免費的集中式版本控制工具
- 自身設(shè)計有問題,會造成提交文件不完整衙伶,版本庫莫名其妙的損害
-
SVN
- 修正了CVS的一些穩(wěn)定性問題祈坠,是目前用的最多的集中式版本控制工具
-
ClearCase
- 收費的集中式版本控制工具,安裝比Windows還大矢劲,運(yùn)行比蝸牛還慢
- 人傻錢多的公司赦拘,世界五百強(qiáng)
-
VSS
- 微軟的集中式版本控制工具,集成在Visual Studio中
- 這個工具很好用芬沉,比Xcode相對智能
-
-
集中式版本控制和分布式版本控制的區(qū)別
-
集中式版本控制
- 倉庫放在服務(wù)器端
- checkout獲得倉庫躺同,commit提交
- 不管有多少個終端,所有的操作都需要和服務(wù)器進(jìn)行交互
- 倉庫是集中式的放到服務(wù)器上丸逸,做任何操作都需要連接上服務(wù)器蹋艺,沒有網(wǎng)絡(luò)就不能連接了,在公司里面做開發(fā)黄刚,一般是局域網(wǎng)捎谨,只能在公司加班,在公司才能連接服務(wù)器憔维,才能提交
-
分布式版本控制
- 可以把在自己的電腦理解成服務(wù)器
- 共享倉庫放在一個遠(yuǎn)程的服務(wù)器上的
- 本地電腦上也有一個倉庫涛救,可以先把操作提交到本地的倉庫,push /pull,操作的時候可以先不用連接上服務(wù)器业扒,可以先提交到本地倉庫检吆,等有網(wǎng)絡(luò)的時候,可以一次性提交到遠(yuǎn)程的服務(wù)器上
-
- GIT和SVN對比
- 速度:在很多情況下凶赁,git的速度遠(yuǎn)遠(yuǎn)比SVN塊
- 結(jié)構(gòu):SVN是集中式管理咧栗,git是分布式管理
- 其他:
- svn使用分支比較笨拙
- git可以輕松擁有無限個分支
- svn必須要聯(lián)網(wǎng)才能正常工作
- git支持本地版本控制工作
- 舊版本的svn會在每一個目錄放置一個.svn
- git只會在根目錄擁有一個.git
- 工作流程
- SVN
- 服務(wù)器端
- 客戶端 checkout commit update
- GIT
- 共享版本庫
- 客戶端
- clone 下載到本地
- 可以在本地修改,可以在本地提交commit,把本地的版本庫提交到共享的版本庫push
- 獲得最新的共享版本庫信息pull
- SVN
- 最大的區(qū)別在于:在分布式下開發(fā)者可以本地提交虱肄,每個開發(fā)者機(jī)器上都有一個服務(wù)器的數(shù)據(jù)庫
GIT的初始化和訪問設(shè)置
- 在本地初始化一個本地的git倉庫
- 本地創(chuàng)建一個文件夾GIT
- GIT文件夾里新建文件夾
- manager
- demo初始化一個本地git倉庫
- cd 來到demo路徑
- git init
- 生成了一個.git的隱藏的文件夾
- manager
- 對該git倉庫進(jìn)行配置(用戶名和郵箱)
- 用戶名 $ git config user.name "manager"
- 郵箱 $ git config user.email "manager@126.com"
- 輸入命令行
- 打開config查看配置文件
- 配置一個全局的用戶名和郵箱
- 系統(tǒng)里面會有很多倉庫致板,使用全局的就不用每個倉庫都設(shè)置
- $ git config -- global user.name "xiaomage"
- $ git config -- global user.email "xiaomage@126.com"
- 打開.gitconfig
GIT倉庫項目初始化操作
- 項目經(jīng)理創(chuàng)建一個文件main.m
- $ touch main.m
- 查看git狀態(tài)
- $ git status
- 查看是否被git管理
- 紅色:表示該文件并沒有被git倉庫管理
- 把main.m文件 提交到git倉庫的暫緩區(qū)
- 暫緩區(qū)的概念
$ git add main.m
- 查看狀態(tài)
- $ git status
- 綠色:表示該文件已經(jīng)被添加到git的暫緩區(qū)中
- 注意:文件的更改必須要先添加到暫緩區(qū)里面,才能從暫緩區(qū)提交
- 先把main.m提交到本地的版本庫中
$ git commit - m "注釋" main.m
- master:表示當(dāng)前是主干
- 修改文件的內(nèi)容
- echo "I am Main" >>main.m
- cat main.m
- 重新查看文件狀態(tài)
$ git status
- 紅色:表示被修改modified,當(dāng)前的修改咏窿,沒有在暫緩區(qū)中
- 把本地的修改提交到暫緩區(qū)中
- $ git add main.m
- 查看文件狀態(tài)
- 把暫緩區(qū)中的修改提交到本地的版本庫中
- $ git commit - m "修改了main文件"main.m
- 一個文件被修改了斟或,一個文件被插入
- 結(jié)論:之前使用SVN的時候,只有新創(chuàng)建的文件才需要add操作集嵌,修改文件是不需要進(jìn)行add操作的萝挤,但是在git中御毅,不管是新創(chuàng)建文件,還是修改了某個文件都需要再做一次add操作怜珍,就是把修改提交到暫緩區(qū)
GIT工作原理
- 工作區(qū)(working directory)
- 倉庫文件夾里除了.git目錄以外的內(nèi)容
- 版本庫(Repository)
- .git目錄端蛆,用于存儲記錄版本信息
- 暫緩區(qū)(stage)
- 分支(master):git自動創(chuàng)建的第一個分支
- HEAD指針:用于指向當(dāng)前分支
- HEAD指向誰,誰就是當(dāng)前的分支
- git add 和git comit 原理
- git add:把文件修改或者新添加的文件添加到暫緩區(qū)
- git commit :把暫緩區(qū)的所有內(nèi)容提交到當(dāng)前分支
GIT起別名的操作
- SVN簡寫
- update - up
- status - st
- checkout - co
- commit - ci
- remove - rm
- GIT
- GIT里面沒有簡寫
- git -- help
- git提供了更加強(qiáng)大的功能酥泛,可以重命名
- $ git config alias.st "status"
- 相當(dāng)于status == st
- $ git config alias.ci "commit"
- commit == ci
- $ git config alias.ci "commit - m"
- commit - m == ci
- 別名可以隨便起今豆,但是不能有中文
- 起的別名在config配置文件里面
- 上面配置的只是當(dāng)前的倉庫,在其他的倉庫中這些簡寫是不可用的
- 全局的別名
- $ git config -- global alias.st "status"
GIT刪除文件
- cd
- ls -la
- 刪除文件
- 項目經(jīng)理需要刪除文件
- $ git rm 文件名稱1 文件名2
- 刪除操作在工作區(qū)里面進(jìn)行的
- 項目經(jīng)理需要刪除文件
- 查看文件的狀態(tài)柔袁,是綠色的
- $ git status
- 綠色:該修改已經(jīng)被提交到暫緩區(qū)里面呆躲,不需要add操作
- 把刪除操作提交奧本地的版本庫
- $ git commit- m "刪除文件"
- 一個文件被修改,一個文件被刪除
查看版本信息
- SVN
- log
- GIT查看版本信息(基本版)
- $ git log
- :表示沒有顯示完全捶索,按下箭頭就可以查看后面的信息
- 版本信息里有什么內(nèi)容
- 注釋
- 誰修改的
- 什么時候修改的
- commit bf78……后面的內(nèi)容是版本號
- 散列計算得到的插掂,sha
- 散列值是版本號
- 按住Q退出
- CIT查看版本信息(加強(qiáng)版)
- 在之前的基礎(chǔ)上還可以查看版本回退信息
- $ git reflog
- 更簡潔
- HEAD
- commit后面是注釋
- 最前面的是不完整的版本號,只有前七位
- 可以看到版本回退信息腥例,直接log是看不到的
版本回退的兩種情況
- 本地倉庫修改了內(nèi)容辅甥,但是修改還沒有提交到版本庫(相當(dāng)于取消修改)
- $ git reset -- hard HEAD
- ls - la
- echo
- cat
- git status
- git add
- git reset -- hard HEAD
- 本地倉庫修改了內(nèi)容,并且修改已經(jīng)被提交到版本庫(回退到以前的版本)
$ git reset -- hard HEAD^回退到上一個版本
$ git reset --hard HEAD^^回退到上兩個版本
$ git reset -- hard HEAD ~ N 回退到上N個版本
-
$ git reset -- hard 五位數(shù)字的版本號 指向任意的版本
- 拷貝前面五位數(shù)
創(chuàng)建共享版本庫并初始化項目(忽略操作)
- 創(chuàng)建共享版本庫
- 可以安裝在服務(wù)器端 非常復(fù)雜(后臺)
- 可以安裝在一個文件夾里面
- 安裝在U盤里面(自己查看資料)
- 把git遠(yuǎn)程倉庫院崇,托管在一些大型的網(wǎng)站上面(github/oschina)
- 在桌面創(chuàng)建一個文件夾(路徑不能有中文)肆氓, 把遠(yuǎn)程倉庫把它安裝在該文件夾中
- 先初始化一個遠(yuǎn)程倉庫
- 初始化本地和初始化遠(yuǎn)程倉庫區(qū)別?
- 初始化遠(yuǎn)程倉庫 git -- bare init
- 本地倉庫有一個.git文件底瓣,遠(yuǎn)程的共享倉庫谢揪,沒有.git文件
- 遠(yuǎn)程倉庫bare= true ;本地倉庫bare = faulse
- 創(chuàng)建一個空的文件夾(項目經(jīng)理的客戶端),項目經(jīng)理連接上共享版本庫捐凭,然后把共享版本庫下載到本地
- $ git clone 倉庫路徑
- 項目經(jīng)理配置本地倉庫
- 設(shè)置用戶名和郵箱
- $ git config user.name "manager"
- $ git config user.email "manager@qq.com"
- 打開config文件查看
- 創(chuàng)建一個忽略文件拨扶,進(jìn)行忽略處理
- 新建一個文件$ touch .gitignore,拷貝內(nèi)容到該文件中
- github- 搜索.gitignore
- 框架 找到oc的
- 拷貝內(nèi)容到創(chuàng)建的.gitignore文件中
- 查看文件狀態(tài)茁肠,把該文件添加到暫緩區(qū)
- git status
- git add .gitignore
- 把更改提交到本地的版本庫
- git commit - m"進(jìn)行忽略操作" .gitignore
- 使用Xcode創(chuàng)建一個新的項目
- 已經(jīng)有一個git倉庫了患民,不能再創(chuàng)建了
- 查看狀態(tài),內(nèi)部會自動做一次 添加操作
- 用Xcode創(chuàng)建的項目垦梆,默認(rèn)會做一次add操作
- 如果一次性添加多個文件
- $ git add .
- 如果一次性添加多個文件
- 把文件提交到本地 git commit -m "項目初始化處理"
- 把本地版本庫的內(nèi)容匹颤,提交到共享版本庫Server
- $ git push
- 共享版本庫是數(shù)據(jù)庫,是以數(shù)據(jù)源的方式存儲
- 張三連接上共享版本庫托猩,下載到本地
- git clone
- 更新 pull
- 先初始化一個遠(yuǎn)程倉庫
Xcode多人開發(fā)和沖突處理
- 項目經(jīng)理
- discard all changes 取消文件修改
- pull
- 項目經(jīng)理開始開發(fā)印蓖,提交commit到本地的版本庫
- push提交到共享的版本庫
- 張三
- pull
- push
-
沖突
- 項目經(jīng)理和張三修改了同一行代碼
- 如果提交成功了,可能就是沒有給項目經(jīng)理和張三分配用戶名和郵箱
- 解決沖突
- 張三添加了注釋京腥,提交了
- 項目經(jīng)理pull赦肃,更新獲得最新的
- 項目經(jīng)理和張三修改了同一行代碼
-
git倉庫對于靜態(tài)庫的處理
- svn對于靜態(tài)庫不識別.a文件
- git不需要手動添加,內(nèi)部會自動的做添加操作
把git遠(yuǎn)程倉庫托管在github上面
注冊github
-
創(chuàng)建一個倉庫
- 點擊加號
- 倉庫名稱repository name
- 描述信息:description
- 開源public | 私有 private(每一月幾百元)
- initialize this repository readme 要不要裝readme文件
- 選擇要忽略的文件object-c
- 協(xié)議:MIT Licence
- 點擊后面的i,可以查看協(xié)議的具體內(nèi)容
- create repository
-
初始化處理
- 連接上倉庫,把倉庫下載到本地
- clone or download
- HTTPS
- SSH:秘鑰對的方式處理的
- 公鑰放在網(wǎng)站上
- 私鑰放到電腦里
- 拷貝url,打開xcode,preperence,切換到賬號他宛,把拷貝的路徑船侧,粘貼到address上
- 用戶名和密碼是github的用戶名(郵箱)和密碼
- checkout
- next
- clone or download
- 不需要做忽略和添加操作
- 項目的初始化處理commit and push
- 連接上倉庫,把倉庫下載到本地
github刪除代碼倉庫
- commits提交的次數(shù)
- branch 分支
- releases 備份信息
- fork復(fù)制一份倉庫到本地
- pull requests 請求合并
- Wiki 公共界面,介紹框架的基本信息
- graphs 貢獻(xiàn)度
- 刪除:setting 最后面 delete this repository 需要輸入要刪除的倉庫的名稱
- 刪除操作是不可逆的
- issues github上面提問題
- new
- submit new issues
- github上提意見
- 注意:在使用別人框架的時候厅各,自己修改框架镜撩,對框架的原作者發(fā)送一個請求,請求合并自己的代碼
- 復(fù)制fork到個人賬號
- 下載clone download
- check out
- 下載下來之后就可以修改框架了
- new pull requests
- 跳轉(zhuǎn)到原作者界面队塘,請求標(biāo)題琐鲁,添加描述信息
- create pull request
- 請求合并的操作會在
創(chuàng)建項目導(dǎo)入已有項目
- 問題:顯示的都是?人灼,不能識別文件,需要手動的全部添加進(jìn)去
- cd 倉庫路徑
- git st 紅色
- git add .
- git st 綠色
- 能夠識別了
托管到github上SSH認(rèn)證
- 秘鑰對
- SSH路徑拷貝一份顾翼,認(rèn)證信息要選中SSH Keys
- Public Key
- finder - 前往 - 個人 .ssh隱藏文件 - 刪除里面的內(nèi)容
- Private Key
- 如何生成公鑰和私鑰
- settings
- SSH ahd GPG keys
- generating an ssh keys
- 命令行
- 拷貝投放,后面改成自己的郵箱
- rsa 算法
- 保存的位置:可以不輸入
- 密碼可以不輸入
- 生成秘鑰的標(biāo)識,出現(xiàn)一個正方形
- id_rsa
- id_rsa_pub拷貝一份到網(wǎng)站上
- 打開方式适贸,文本編輯灸芳,全選拷貝
- 回到設(shè)置界面,new ssh key
- 標(biāo)題可以隨便寫
- 把復(fù)制的信息粘貼到key欄
- 復(fù)制路徑拜姿,打開Xcode,偏好設(shè)置烙样,tepe:git
認(rèn)證方式:SSH 再把倉庫下載下來
github中使用tags標(biāo)簽備份
- 命令行
- cd
- 查看當(dāng)前有沒有備份信息
- git tag
- 對當(dāng)前版本進(jìn)行備份
- $ git tag - a MOMO1.0 - m"MOMO1.0"
- 把本地的提交到共享版本庫
- $ git push orgin MMO1.0
- YES
- [new tag]表示新創(chuàng)建了一個tag
- release 里面查看備份信息
OSChina
- 碼云
- 新建項目
- 項目名稱
- 項目介紹
- 項目語言
- GitIgnore
- 開源許可證
- 項目屬性:私有項目
- ReadMe
- 連接倉庫 HTTPS |SSH
- 拷貝路徑
- 偏好設(shè)置,倉庫
- 賬號的用戶名和密碼
- 同樣的方式生成秘鑰對