<h4>源代碼管理工具的起源</h4>
- <h5>為什么會出現(xiàn)
源代碼管理工具
替久?</h5>- 為了解決在軟件開發(fā)過程中箱锐,由源代碼引發(fā)的各種蛋疼繁瑣問題
- <h5>源代碼會引發(fā)哪些問題?</h5>
- 無法后悔:做錯了一個操作后埋同,沒有后悔藥可吃
- 版本備份:費空間州叠、費時間
- 版本混亂:因版本備份過多造成混亂,難于找回正確的想要的版本
- 代碼沖突:多人操作同一文件(團隊開發(fā)中常見問題)
- 權(quán)限控制:無法對源代碼進行精確的權(quán)限控制
- 追究責任:出現(xiàn)了嚴重的BUG凶赁,無法得知是誰干的
<h4>源代碼管理工具的作用</h4>
- 能追蹤一個項目從誕生一直到定案的過程
- 記錄一個項目的多有內(nèi)容變化
- 方便地查閱特定版本的修訂情況
- ... ...
<h4>常見的源代碼管理工具</h4>
- <h5>
CVS
</h5>- 開啟版本控制之門
- 1990年誕生咧栗,“遠古時代”的主流源代碼管理工具
- <h5>
SVN
</h5>- 全稱是Subversion惶我,集中式版本控制之王者
- 是CVS的接班人居凶,速度比CVS快,功能比CVS多且強大
- 在國內(nèi)使用率非常高(70%~90%)
- <h5>
GIT
</h5>- 一款偉大的分布式源代碼管理工具
- 目前被越來越多的開源項目使用
- 不過在國內(nèi)企業(yè)尚未大規(guī)模普及
<h4>SVN</h4>
-
<h5>SVN基本操作</h5>
$ svn checkout:將服務(wù)器代碼完整的下載到本地
$ svn commit:將本地修改的內(nèi)容提交到服務(wù)器
$ svn update:將服務(wù)器最新的代碼下載到本地
*注:Checkout只需要做一次坊夫!
- 提示:
- 每天下班前:commit一次
“可運行版本代碼”
- 每天上班前:update前一天所有代碼
- 每天下班前:commit一次
-
<h5>SVN官方基本操作</h5>
- <h5>SVN使用環(huán)境</h5>
- 想要使用SVN管理源代碼浩峡,必須得有2套環(huán)境
- <b>
服務(wù)器
</b>- 用于存儲客戶端上傳的源代碼
- 可以在
Windows
上安裝Visual SVN Server
- 大部分情況下可岂,公司的開發(fā)人員不必親自搭建SVN服務(wù)器
- <b>
客戶端
</b>- 上傳本地的源代碼到服務(wù)器,或者更新服務(wù)器的代碼到本地翰灾,保持同步
- 可以在
Mac
上使用命令行缕粹、Versions、Cornerstone纸淮、Xcode
- 開發(fā)人員就屬于客戶端這個角色
- <b>
- <h5>SVN客戶端命令行演示</h5>
一平斩、初始化項目- 1.項目經(jīng)理將服務(wù)器的已有的內(nèi)容下載到本地(演示)
$ svn checkout 服務(wù)器地址 --username=xxx --password=xxx
- 2.項目經(jīng)理初始化項目(演示)
-
$ touch main.m
:創(chuàng)建main.m -
$ svn add main.m
:將main.m添加到svn的管理之下 -
$ svn commit -m "xxx"
:將main.m上傳到服務(wù)器
-
- 3.查看文件狀態(tài)(查看文件是否在svn的管理下,或者是否進行了修改而沒有提交)
$ svn status
- 1.項目經(jīng)理將服務(wù)器的已有的內(nèi)容下載到本地(演示)
狀態(tài)說明:描述文件被添加咽块、刪除或其他修改
' ' 沒有修改
'A' 該文件已經(jīng)添加到svn的管理之下绘面,但是該文件在本地,并未提交到服務(wù)器
'C' 沖突
'D' 被刪除
'I' 被忽略
'M' 被修改
'R' 被替換
'X' 外部定義創(chuàng)建的版本目錄
'?' 文件沒有被添加到本地版本庫中侈沪,不在svn的管理之下
'!' 文件丟失或者不完整(不識別該文件)
'~' 受控文件被其他文件阻隔
'U' 更新最新的代碼到本地(本地有文件的情況下)
'G' 產(chǎn)生沖突后揭璃,更新操作去解決沖突,相當于進行合并
- 4.張三加入開發(fā)
1>將服務(wù)器所有的內(nèi)容下載到本地
$ svn checkout 服務(wù)器地址 --username=xxx --password=xxx
2>開始開發(fā)
$ touch person.h person.m
:創(chuàng)建person類
$ svn commit -m "創(chuàng)建了person類"
3>經(jīng)理更新代碼
$ svn update
:更新服務(wù)器最新的代碼(如果該文件在本地不存在亭罪,則下載瘦馍,如果本地存在,則更新)
- 5.命令行的簡寫
- svn checkout -> svn co
- svn status -> svn st
- svn commit -> svn ci
- svn update -> svn up
- 6.版本回退
$ svn revert 文件名(person.h)
:將本地新增的內(nèi)容(沒有提交到服務(wù)器)应役,刪除
$ svn update -r版本號
:先回退到某個版本情组,觀察下燥筷,該版本是否是不想要的那個版本,示范:svn update -r6
$ svn update
:更新到最新的版本
$ svn merge -r版本號(hight):版本號(low) 文件名
:示范:svn merge -r7:6 person.h(本地)
*注意:如果本地版本號低于服務(wù)器版本號院崇,那么不能提交
$ svn commit -m "回退到版本x"
(服務(wù)器) - 7.刪除文件
$ svn remove 文件名
:示范:svn remove person.m肆氓,svn remove -> svn rm(縮寫) - 8.查看版本信息
$ svn update
:更新服務(wù)器最新的內(nèi)容
$ svn log
:查看版本信息 - 9.公司常用的命令
$ svn update
:更新
$ svn commit -m "注釋"
:將本地的代碼提交到服務(wù)器
二、李四加入開發(fā)(新員工)
1>需要想項目經(jīng)理要一些東西
- 和項目經(jīng)理要服務(wù)器地址以及賬號地址
- 需求文檔:有什么需求底瓣,做什么樣的功能
- 接口文檔:詳細的記錄服務(wù)器所有的功能
- 效果圖:界面到底長什么樣子
2>將服務(wù)器已有的內(nèi)容下載到本地 -
$ svn checkout 服務(wù)器地址 --username=xxx password=xxx
3>代碼沖突(out of date
:過期/本地版本號低于服務(wù)器的版本) -
(df) diff-full
:在命令行中展示所有的不同 -
(e) edit
:在命令行中來編輯沖突 -
(mc) mine-conflict
:用我本地的代碼來覆蓋服務(wù)器的代碼 -
(tc) theirs-conflict
:用服務(wù)器的代碼來覆蓋我的代碼 -
(p) postpone
:延遲解決沖突谢揪,展示所有沖突的文件,手動解決沖突 ->$ svn resolved 文件名
(person.h)
*注意:如何避免沖突
- 1>盡量在修改文件之前捐凭,先update
- 2>如果修改公共文件键耕,最好跟同事說一聲,讓它先別修改柑营,修改完之后屈雄,讓他更新>>
- <h5>SVN圖形化界面工具</h5>
- 1.項目經(jīng)理初始化項目
- 1>項目經(jīng)理將服務(wù)器已有的內(nèi)容下載到本地
- 記住format的選擇 -> 1.7(最高)
- 2>需要忽略的文件
- xcuserdata
- xcode會默認記錄之前停留文件,下次打開依然停留在該文件官套,這個不需要共享
- xcode會默認記錄之前目錄的打開狀況酒奶,同事不需要共享
- 斷點信息,不需要進行共享
- xcuserdata
- 1>項目經(jīng)理將服務(wù)器已有的內(nèi)容下載到本地
- 2.在xcode中使用svn的注意點
- 1>如果使用到靜態(tài)庫需要特別注意奶赔,必須使用命令行將靜態(tài)庫添加到svn的管理之下
- 2>如果使用到了storyboard也需要特別注意
- 如果能使用xib惋嚎,盡量使用xib
- 如果在項目當中使用到了storyboard,盡量保證只有一個人在操作storyboard
- 3>checkout的方式
- 使用命令行
- 使用cornerstone(圖形化界面工具)
- Xcode
- 4>公司開發(fā)技巧(避免沖突)
- 盡量寫一些代碼就提交到服務(wù)器站刑,實時跟服務(wù)器的代碼保持同步
- <h5>目錄規(guī)范</h5>
- 規(guī)范項目的svn目錄結(jié)構(gòu)一般有3個文件夾
- trunk:
主干
另伍,當前開發(fā)項目的主目錄 - branches:
分支
目錄,添加非主線功能
時使用绞旅,開發(fā)測試之后摆尝,可以合并到主干項目中 - tags:
標記
目錄,通常作為重大的版本的備份
- trunk:
<h4>Git</h4>
- <h5>什么是git因悲?</h5>
- git是一款開源的分布式版本控制工具
- 在世界上所有的分布式版本控制工具中堕汞,git是最快、最簡單晃琳、最流行的
-
<h5>集中式版本控制</h5>
-
<h5>分布式版本控制</h5>
- <h5>git和svn的簡單對比</h5>
- 速度:在很多情況下讯检,git的速度遠遠比svn快
- 結(jié)構(gòu):svn是集中式管理,git是分布式管理
- 其他:
- svn使用分支比較笨拙卫旱,git可以輕松擁有無限分枝
- svn必須聯(lián)網(wǎng)才能正常工作人灼,git支持本地版本控制工作
- 就版本的svn會在每一個目錄放置一個.svn,git只會在根目錄擁有一個.git
-
<h5>svn的工作流程</h5>
- 分布式和集中式的最大區(qū)別在于:在分布式下
- 開發(fā)者可以本地提交
- 每個開發(fā)者機器上都有一個服務(wù)器的數(shù)據(jù)庫
-
<h5>git的工作流程</h5>
- <h5>git的使用</h5>
- 跟svn一樣顾翼,你可以通過命令行敲指令或者圖像界面客戶端使用git
- 在Mac上投放,比較好用的git圖形界面客戶端有
- SourceTree
- GitHub
- 下載地址:https://mac.github.com
- 不過它是專門給GitHub網(wǎng)站而設(shè)計的
- Xcode
- 幾個專用名詞的譯名:
- Workspace : 工作區(qū)
- Index/Stage : 暫存區(qū)
- Repository : 本地倉庫
- Remote : 遠程倉庫
- <h5>Git的工作原理</h5>
- 如果想了解git的工作原理,有幾個核心概念必須知道
-
工作區(qū)(Working Directory)
:倉庫文件夾里除了.git目錄
以外的內(nèi)容(項目所在的文件目錄) -
版本庫(Repository)
:工作區(qū)又一個隱藏目錄文件.git目錄
(可通過命令 ls -ah 查看隱藏文件)這就是Git的版本庫暴构,用于存儲記錄版本信息 暫緩區(qū)(stage)
-
分支(master)
:git自動創(chuàng)建的第一個分支 -
HEAD指針
:用于指向當前分枝
-
- <h5>Git的命令行演示</h5>
- 0.安裝Git
-
$ brew install git
:Mac -
$ sudo apt-get install git-core
or$ sudo apt-get install git
:Ubuntu or some linux OS
-
- 1.如果使用Git跪呈,必須給Git配置用戶名和郵箱
- 給當前的git倉庫配置用戶名和郵箱
$ git config user.name "Vincent"
$ git config user.email "vn_vincent@outlook.com"
- 給git配置全局的用戶名和郵箱
$ git config --global user.name "Vincent"
$ git config --global user.email "vn_vincent@outlook.com"
- 2.新建代碼庫
-
$ mkdir demo
:建立目錄 -
$ cd demo
:進入demo目錄 -
$ git init
:創(chuàng)建一個本地倉庫 -
$ git remote add origin gitAddress
:本地庫“關(guān)聯(lián)”遠程庫 -
$ Git remote remove origin
:取消本地目錄下關(guān)聯(lián)的遠程庫
-
-
$ git clone gitAddress
:從遠程倉庫克隆項目代碼 -
$ git clone -b C gitAddress
:從遠程倉庫克隆“指定分支C”上的代碼 -
$ git pull origin master
:把遠端“origin”節(jié)點的“master”拉回本機且進行合并
- 3.初始化項目
-
$ touch main.m
:創(chuàng)建了main.m -
$ git add main.m
:將main.m添加到暫緩區(qū)(staging area) -
$ git commit -m "初始化項目"
:將在暫緩區(qū)的所有內(nèi)容提交到本地版本庫,并清空暫緩區(qū) $ git push -u origin master
-
- 4.增加/刪除文件
-
$ git add [file]
:將制定的文件添加到暫存區(qū) -
$ git add .
:添加當前目錄下的所有文件 -
$ git add -p
:添加每個變化前取逾,都會要求確認耗绿;對于同一個文件的多處變化,可以實現(xiàn)分次提交 -
$ git add -u
:暫存修改和刪除的文件砾隅,不包括新增的文件 -
$ git add -A
:暫存所有的文件误阻,包括新增的,修改和刪除的文件晴埂。 -
$ git rm [file1] [file2] ...
:刪除工作區(qū)為難究反,并且將這次刪除放入暫存區(qū) -
$ git rm -cached [file1] [file2]
:(說法1: 刪除本地倉庫文件,但不會刪除文件)儒洛;(說法2: 停止追蹤指定文件精耐,但該文件回保留在工作區(qū)) -
$ git mv [file-original] [file-renamed]
:改名文件,并且將這個改名放入暫存區(qū)
*注意:添加的文件或者修改的文件都要通過add命令將該文件添加到暫緩區(qū)
-
- 5.代碼提交
-
$ git commit -m "first commit"
:提交暫存區(qū)刀倉庫區(qū) -
$ git commit [file1] [file2] ... -m [message]
:提交暫存區(qū)的指定文件到倉庫區(qū) -
$ git commit -a
:提交工作區(qū)自上次commit之后的變化琅锻,直接到倉庫區(qū) -
$ git commit -am
:自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交卦停,從而跳過$ git add
步驟,參數(shù) -am 也可寫成 -a -m -
$ git commit -v
:提交時顯示所有diff(擴展)消息 -
$ git commit -p
:commit文件的一部分恼蓬,適合工作量比較大的情況惊完。之后,git會對這塊修改彈出一個提示处硬,詢問你是否stage小槐,按y/n來選擇是否commit這塊修改,荷辕?可以查看其他操作的說明 -
$ git commit --amend
:最終只會有一次提交凿跳,第二次提交將代替第一次提交的結(jié)果。其使用場景:適用于提交完發(fā)現(xiàn)落掉幾個文件沒添加疮方,或者提交信息寫錯的情況 -
$ git commit --amend [file1] [file2] ...
:重做上一次commit拄显,并包括指定文件的新變化 -
$ git commit --amend -m [message]
:使用一次新的commit,代替上一次提交案站;如果代碼沒有任何新改變躬审,則用來改寫上一次commit的提交信息 -
$ git commit --amend --reset-author
:在上一次commit之后想重新更新一下時間。amend實際上修改了上一個commit蟆盐。所以如果已經(jīng)push了上一個commit承边,請盡量不要amend。如果一定要amend已經(jīng)push了的commit石挂,請確保這個commit所在的branch只有你一個人在使用(負責會給其他人帶來災難)博助,然后在amend之后使用$ git push -force
。只要多加小心痹愚,該命令貌似沒什么卵用
-
- 6.分支
-
$ git branch A
:創(chuàng)建分支 -
$ git checkout -b A
:創(chuàng)建分支A富岳,并且切換到A分支上 -
$ git checkout B
:切換到B分支上 -
$ git branch -a
:查看所有本地分支和遠程分支 -
$ git merge B
:合并指定分支B到當前分支 -
$ git branch -d B
:刪除分支 -
$ git push origin --delete B
:刪除遠程分支B -
$ git branch -dr [remote / branch]
:也是刪除遠程分支 -
$ git push origin 本地分支A : 遠程分支A
將本地分支push到遠程分支蛔糯,并且命名遠程分支為A -
$ git fetch origin
:同步遠程倉庫 -
$ git push -u origin master
:關(guān)聯(lián)后,使用該命令第一次推動master分支的所有內(nèi)容窖式,后續(xù)在推送的時候就可以省略后面三個參數(shù)蚁飒,其中u代表上游(upstream)的意思 -
$ git push --set-upstream origin A
:git提示使用此命令
-
- 7.撤銷
-
$ git checkout --文件
:恢復暫存區(qū)的指定文件到工作區(qū)(丟棄工作區(qū)的修改,包括修改后還沒有放到暫存區(qū)和增加到暫換區(qū)后又作了修改兩種情況萝喘』绰撸總之,讓該文件會到最后一次$ git commit
或$ git add
之后的狀況阁簸。注意:沒有-爬早,就變成了切換分支的命令了)
- 在還沒有add的時候
-
$ git checkout 那個路徑下的文件夾或者文件名
:(就能撤銷未添加的修改) - 如果已經(jīng)add過的文件:
-
$ git reset HEAD 那個路徑下的文件夾或者文件名
:(就能回到未添加的狀態(tài)),然后再用$ git checkout [file]
方法撤銷修改
-
- 注意:如果你把某個文件刪除了启妹,或者是新添加的文件筛严,都不會在恢復或者去掉,但是會把文件中的添加的代碼去掉
- 如果已經(jīng)commit過的文件:
-
$ git reset -hard HEAD^
:那么如果要回退到上上個版本只需把HEAD^
改成HEAD^^
以此類推饶米。那如果要回退到前100個版本的話脑漫,使用上面的方法肯定不方便,我們可以使用下面的簡單指令操作:$ git reset -hard HEAD~100
即可 - 不過還有一種比較實用的方法:
-
$ git reset -hard [你要回退的版本號]
:這樣就能直接回退到你置頂?shù)哪且淮翁峤?/li>
-
$ git reflog
:可獲取到每次提交的版本號
- 已經(jīng)push過的
- 粗暴的方法:(只需兩行命令)
-
$ git reset -hard 1243ad3(commit唯一標識)
或者$ git checkout (commit唯一標識 前7位)
-
$ git push origin HEAD -force
:(強行push)
- +7.改寫提交
$git rebase -i HEAD~~
:使用rebase -i命令選擇要修改的提交 - 預設(shè)文字編輯器會開啟從HEAD到HEAD~~的提交咙崎,如下圖顯示內(nèi)容
pick 9a54fd4 添加commit的說明
pick 0d4a808 添加pull的說明
# Rebase 326fc9f..0d4a808 onto d286baa
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
將第二行的“pick”
改為“squash”
优幸,存儲后并推出,由于合并后要提交褪猛,所以編輯器會提示您編輯這個最新的提交訊息网杆,請編輯訊息后存儲并提出,
這樣伊滋,兩個提交就合并成一個提交了碳却,請使用log命令確認歷史記錄
- 8.查看文件狀態(tài)
$ git status
- 紅色:該文件被添加或者被修改,但是沒有添加到git的暫緩區(qū)
- 綠色:該文件在暫緩區(qū)笑旺,但是沒有提交到本地版本庫
- 9.給命令行起別名
$ git config alias.st "status"
$ git config alias.ci "commit -m"
$ git config --global alias.st "status"
- 10.查看版本信息
-
$ git log
:-> 版本號是由sha1算法生成的40位哈希值 -
$ git log -p -2
:除顯示基本信息之外昼浦,還顯示每次提交的內(nèi)容差異,-2意思是僅顯示最近兩次提交筒主。特別適用于進行代碼審查关噪,或者快速瀏覽某個搭檔提交的commit所帶來的變化
-
-
$ git log --graph
:查看分支合并圖 -
$ git reflog
:-> 可以查看所有版本會退的操作(比git log功能更強大)
- 11.版本回退:
-
$ git reset --hard HEAD
:回到當前版本 -
$ git reset --hard HEAD^
:回到上一個版本 -
$ git reset --hard HEAD^^
:回到上上個版本 -
$ git reset --hard HEAD~100
:回到前100個版本 $ git reset --hard 版本號(前5位)
-
- 12.給log起別名:
$ 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 add和git commit的原理
-
$ git add
:把文件修改或者新添加的文件添加到暫緩區(qū) -
$ git commit
:把暫緩區(qū)的所有內(nèi)容提交到當前分枝
-
- <h5>Git常見問題</h5>
-
在使用git對源代碼進行push到遠程倉庫的時候可能會出錯,信息如下:
- 此時很多人會嘗試下面的命令把當前分支上傳到master分支上:
$ git push -u origin master
但是任然沒有解決問題乌妙。 - 出現(xiàn)錯誤的主要原因是github/gitlab中的某些文件不在本地代碼庫目錄中使兔,可以通過如下命令進行代碼合并【注:pull=fetch+merge】:
git pull --rebase origin master
,如上方法藤韵,即可解決err問題虐沥。
-
-
注意:git和svn不同,僅僅跟蹤文件的變動,不跟蹤目錄欲险,所以镐依,一個空目錄,如果里面沒有文件天试,即便
$ git add
這個目錄槐壳,另外在別處 checkout 的時候,是沒有這個空目錄的秋秤。- 只跟蹤文件變化,不跟蹤目錄脚翘,這么設(shè)計是有原因的灼卢。但這會帶來一些小麻煩。有時候来农,確實需要在代碼倉庫中保留某個空目錄鞋真。比如測試時需要用到的空目錄。下面來看看如何解決沃于。
-
- 目錄是空的:
- 這種情況下只需要在目錄下創(chuàng)建
.gitkeep
文件涩咖,然后在項目的.gitignore
中設(shè)置不忽略.gitkeep
就可以了 -
.gitkeep
是一個約定俗成的文件名并不會嗲來特殊規(guī)則
-
- 目錄中一定存在文件
- 這就需要首先在根目錄中設(shè)置
!.gitignore
,然后在目標目錄也創(chuàng)建一個.gitignore
文件繁莹,并在文件中設(shè)置
*
!.gitignore
git在使用中遇到的問題以及注意點:
1.由于在項目中一般為多人開發(fā)檩互,所以在使用git的時候一定要注意:
在更改項目之前,一定要記得先pull項目到最新的版本
如果本地有做項目備份咨演,在
commit->pull->push
的時候確認是否在備份分支做的操作闸昨,如果是,請注意薄风,一定要切回主分支然后merge備份分支的內(nèi)容饵较,-
<h5>Git的共享版本庫</h5>
- git服務(wù)器的搭建非常繁瑣(linux)
- 可以把代碼托管到(GitHub/GitLab/OSChina)
- 一個文件夾也可以做共享版本庫
- 一個U盤也可以做共享版本庫,詳見:把Git Repository建到U盤上去
-
1.一個文件夾作為共享版本庫
$ git init --bare
-
2.將共享版本庫的所有內(nèi)容下載到本地
$ git clone 共享版本庫地址
-
3.刪除忽略文件
-
$ touch .gitignore
-> GitHub -> 搜索“.gitignore” -> 選擇*最多的 -> 找到Object-C遭赂,復制下來
-
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
- 4.版本回退
-
$ git reset --hard HEAD^
:回到上一個版本(張三) -
$ git push -f
:強制上傳至共享版本庫 -
$ git reset --hard HEAD^
:回到上一個版本(經(jīng)理)
-
- <h5>Git的版本備份</h5>
- 1.假設(shè)Xian1.0版本開發(fā)完畢循诉,將1.0版本上傳到AppStore,對1.0版本進行備份(打上標簽)
$ git tag -a Xian1.0 -m "這是Xian1.0版本"
$ git tag
- 2.需要將標簽push到共享版本庫
$ git push origin Xian1.0
- 3.開始Xian2.0版本的開發(fā)
- 4.發(fā)現(xiàn)Xian1.0版本有bug撇他,在經(jīng)理的文件夾下面創(chuàng)建一個文件夾茄猫,用于修復bug,將共享版本庫所有內(nèi)容clon
$ git clone
- 5.將當前的代碼轉(zhuǎn)為Xian1.0標簽困肩,創(chuàng)建分枝募疮,并切換到該分枝
-
$ git checkout Xian1.0
:轉(zhuǎn)為1.0標簽 -
$ git checkout -b Xian1.1fixBug
:創(chuàng)建分枝,并切換到該分枝
-
- 6.在分支中修復bug僻弹,上傳到AppStore阿浓,將修復好的版本,打上tag蹋绽,并上傳至共享版本庫
$ git tag -a Xian1.1 -m "這是修復了1.0bug的1.1版本"
$ git push origin Xian1.1
- 7.跟當前正在開發(fā)的2.0版本進行合并
- source Control -> pull -> Xian1.1fixBug
- 8.刪除分支
-
$ git branch
:查看當前在哪個分支 -
$ git branch -r
:查看本地版本庫的分支 -
$ git branch -d Xian1.1fixBug
:刪除本地分支 -
$ git branch -r -d origin/Xian1.1fixBug
:刪除本地版本庫分支 $ git push origin --delete Xian1.1fixBug
-