Git切换分支减少重复编译

在今年的时候,项目从 SVN 转移到 gitlab进行 git托管。前期没有特别的注意,后来越来越明显。

随着后面频繁的切换分支改动 BUG,造成每次切换之后重新编译等待很久。

这是一种极度浪费时间的等待,如果解决掉这种切换分支频繁的重新编译很有必要。

为什么会重复编译

因为对于 Xcode 来说,所有的缓存文件都会存在于 DerivedData目录下面。每一个缓存文件夹都会对应一个项目的路径进行索引缓存。

我们针对同一个项目目录进行切换分支,因为对于 不同分支意味着代码不同或者是工程的配置不相同。Xcode自然需要清理掉之前分支的缓存,重新进行编译。

我也谷歌过怎么切换 Git分支不让重复的编译,但是没有找到解决的方案。最后小组里面的 俊哥提供了方案,不同的分支就 Clone 一个新的目录就可以避免。

脚本切换

我们可以针对不同的分支,Clone 一份新的工程。但是我们平时切换分支找来找去,岂不是很麻烦,我们可以用脚本解决。

脚本的逻辑

  • 设置主工程目录
  • 获取本地和网络分支
  • 获取用户选择的分支
  • 不存在就 Clone
  • 存在就打开

switch_branch脚本

#!/bin/bash
rootDir="{rootDir}"
cd $rootDir
git pull
branchNames=`git branch -a`
localBranchs=()
serverBranchs=()
# 过滤的文件夹和文件名称
filterBranchs=("GearBest" "LICENSE")
function filterBranch() {
    isFilter=0
    for filterBranchName in ${filterBranchs[@]}
    do
        isFilter=$(echo $filterBranchName | grep $1)
        if [ $isFilter ]
        then
            isFilter=1
            break
        fi
    done
    return $isFilter
}

subBranchNames=()
# 主工程名字标识
subBranchNames+=" [GearBest主工程]"
for name in ${branchNames[@]}
do
    if [ $name == "->" ]
    then
        continue
    fi
    filterBranch $name
    if [ $? == 1 ]
    then
        continue
    fi
    subName=""
    if [ "$(echo $name | grep "remotes/origin/")" != "" ]
    then
        subName=${name:15}
        serverBranchs[`expr ${#serverBranchs[@]}`]=$subName
    elif [ "$(echo $name | grep "origin/")" != "" ]
    then
        subName=${name:7}
        serverBranchs[`expr ${#serverBranchs[@]}`]=$subName
    else
        subName=$name
        localBranchs[`expr ${#localBranchs[@]}`]=$subName
    fi
    if [[ ! " ${subBranchNames[@]} " =~ " ${subName} "  && $subName != "HEAD" ]]; then
        subBranchNames[`expr ${#subBranchNames[@]}`]=$subName
    fi
done
echo "请选择需要切换分支的序号:"
index=0
for name in ${subBranchNames[@]}
do
    echo "[$index]" $name
    index=`expr $index + 1`
done
read readIndex
subBranchName=${subBranchNames[$readIndex]}
echo $subBranchName
function isLocalBranch() {
    isLocalBranch=0
    for name in ${localBranchs[@]}
    do
        if [ $name == $1 ]
        then
            isLocalBranch=1
            break
        fi
    done
    return $isLocalBranch
}
gitDir=""
if [ $subBranchName == "[GearBest主工程]" ]
then
    gitDir=$rootDir
else
    createDir() {
        if [ ! -d $1 ]
        then
        mkdir $1
        fi
    }
    # 设置缓存的目录
    path="/Users/$USER/Library/Caches/GearBest"
    createDir $path
    branch="$path/Branchs"
    createDir $branch
    branchNamePath="$branch/${subBranchName}"
    createDir $branchNamePath
    cd $branchNamePath
    # 获取分支的目录
    gitDir="$branchNamePath/GearBest2.6.0_9287"
    if [ ! -d $gitDir ]
    then
        isLocalBranch $subBranchName
        if [ $? == 0 ]
        then
            git clone --branch $subBranchName "远程分支的 git 链接"
        else
            git clone --branch $subBranchName --local $rootDir
        fi

    fi

fi

open $gitDir -a SourceTree -j
open "${gitDir}/GearBest/GearBest.xcworkspace" -a Xcode

上面的脚本一些参数 需要修改成自己自定义的

对于每个人本地的主目录是不一样的,我们可以在初始化的时候进行设置。

初始化脚本install_switch_branch.sh

#!/bin/bash

echo $PWD
PWD_Lenght=${#PWD}
# 8代表你们的工程名称长度 比如我们 GearBest长度为8
sub_lenght=`expr $PWD_Lenght - 8`
echo $sub_lenght
replace_path=${PWD:0:$sub_lenght}
echo $replace_path
chmod 777 $PWD/setupSwitchBranch/ReplaceString
cp $PWD/setupSwitchBranch/switch_branch $PWD/setupSwitchBranch/switch_branch_temp
$PWD/setupSwitchBranch/ReplaceString $PWD/setupSwitchBranch/switch_branch_temp {rootDir}=$replace_path
chmod 777 $PWD/setupSwitchBranch/switch_branch_temp
mv $PWD/setupSwitchBranch/switch_branch_temp /usr/local/bin/switch_branch
echo "执行完毕 切换分支终端执行:switch_branch"

我们把修改的工具和脚本放在 setupSwitchBranch目录下面。ReplaceString也是我们用来替换字符串的 Swift Command Line Tools,是因为 Shell很菜。

ReplaceString

这样我们让小伙伴运行在工程文件所在目录执行

bash install_switch_branch.sh

之后就可以打开终端输入 switch_branch享受切换分支之后不用重复编译快感了。

image-20181128182609438
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容