iOS開發(fā)中的源代碼管理工具

<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的基本操作.png
    • $ svn checkout:將服務(wù)器代碼完整的下載到本地
    • $ svn commit:將本地修改的內(nèi)容提交到服務(wù)器
    • $ svn update:將服務(wù)器最新的代碼下載到本地
    • *注:Checkout只需要做一次坊夫!
  • 提示:
    • 每天下班前:commit一次“可運行版本代碼”
    • 每天上班前:update前一天所有代碼
  • <h5>SVN官方基本操作</h5>


    svn官方基本操作示意圖.png
  • <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ā)人員就屬于客戶端這個角色

  • <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
狀態(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會默認記錄之前目錄的打開狀況酒奶,同事不需要共享
        • 斷點信息,不需要進行共享
  • 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:標記目錄,通常作為重大的版本的備份

<h4>Git</h4>

  • <h5>什么是git因悲?</h5>
    • git是一款開源的分布式版本控制工具
    • 在世界上所有的分布式版本控制工具中堕汞,git是最快、最簡單晃琳、最流行的
  • <h5>集中式版本控制</h5>


    集中式版本控制.png
  • <h5>分布式版本控制</h5>


    分布式版本控制.png
  • <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>


    SVN的工作流程.png

  • 分布式和集中式的最大區(qū)別在于:在分布式下
    • 開發(fā)者可以本地提交
    • 每個開發(fā)者機器上都有一個服務(wù)器的數(shù)據(jù)庫

  • <h5>git的工作流程</h5>


    git的工作流程.png
  • <h5>git的使用</h5>
  • 跟svn一樣顾翼,你可以通過命令行敲指令或者圖像界面客戶端使用git
  • 在Mac上投放,比較好用的git圖形界面客戶端有
  • 幾個專用名詞的譯名:
    • 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.改寫提交
    本地端的歷史記錄狀態(tài).png

    $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命令確認歷史記錄

修改后master分支內(nèi)容.png



  • 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到遠程倉庫的時候可能會出錯,信息如下:


      Snip20170505_1.png
    • 此時很多人會嘗試下面的命令把當前分支上傳到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è)計是有原因的灼卢。但這會帶來一些小麻煩。有時候来农,確實需要在代碼倉庫中保留某個空目錄鞋真。比如測試時需要用到的空目錄。下面來看看如何解決沃于。
      1. 目錄是空的:
      • 這種情況下只需要在目錄下創(chuàng)建 .gitkeep 文件涩咖,然后在項目的 .gitignore 中設(shè)置不忽略 .gitkeep就可以了
      • .gitkeep是一個約定俗成的文件名并不會嗲來特殊規(guī)則
      1. 目錄中一定存在文件
      • 這就需要首先在根目錄中設(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芭毙,一起剝皮案震驚了整個濱河市筋蓖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌退敦,老刑警劉巖粘咖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侈百,居然都是意外死亡瓮下,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門钝域,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讽坏,“玉大人,你說我怎么就攤上這事例证÷肺兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵织咧,是天一觀的道長胀葱。 經(jīng)常有香客問我,道長笙蒙,這世上最難降的妖魔是什么抵屿? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮捅位,結(jié)果婚禮上晌该,老公的妹妹穿的比我還像新娘。我一直安慰自己绿渣,他們只是感情好朝群,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著中符,像睡著了一般姜胖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淀散,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天右莱,我揣著相機與錄音,去河邊找鬼档插。 笑死慢蜓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的郭膛。 我是一名探鬼主播晨抡,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耘柱?” 一聲冷哼從身側(cè)響起如捅,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎调煎,沒想到半個月后镜遣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡士袄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年悲关,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娄柳。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡寓辱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出西土,到底是詐尸還是另有隱情讶舰,我是刑警寧澤鞍盗,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布需了,位于F島的核電站,受9級特大地震影響般甲,放射性物質(zhì)發(fā)生泄漏肋乍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一敷存、第九天 我趴在偏房一處隱蔽的房頂上張望墓造。 院中可真熱鬧,春花似錦锚烦、人聲如沸觅闽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛉拙。三九已至,卻和暖如春彻亲,著一層夾襖步出監(jiān)牢的瞬間孕锄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工苞尝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留畸肆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓宙址,卻偏偏與公主長得像轴脐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容