最近需要使用python做unity自动更新打包操作,因为我们的项目资源都是使用git仓库做版本控制管理,所以在做自动更新打包操作的时候,首先就是先重置更新本地的仓库并且同步git上的最新版本资源。
本来我想只要每次打包的时候,使用命令去拉取git最新的版本就可以了,但是如果你本地的版本跟git上的版本差异比较大,或者有冲突的时候就会更新失败,这时候就不能直接使用 git pull 去拉取了,而是要先重置强制舍弃掉本地的所有修改,再然后去拉取git上的最新资源。根据这个想法我写了一个脚本
#!/bin/sh
# 脚本目录 先把项目更新下来
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT=$1 #项目的git名字
PRO_BRANCH=$2 #项目分支
BASE_GIT_URL="http://10.1.0.103:3000/global"
#项目git地址
PRO_GIT_URL="${BASE_GIT_URL}/${PROJECT}.git"
#你的项目路径
DIR_PROJ="${DIR}/Build/${PROJECT}/workspace"
echo '更新项目开始......'
if [ ! -x "$DIR_PROJ/.git" ]; then
if [ -x "$DIR_PROJ" ]; then
echo '$DIR_PROJ已经存在,先删除'
rm -r "$DIR_PROJ"
fi
echo "git控制不存在,checkount.....${PRO_GIT_URL}"
git clone $PRO_GIT_URL "${DIR_PROJ}"
cd "${DIR_PROJ}"
echo "${DIR_PROJ}"
git checkout "origin/${PRO_BRANCH}"
else
echo 'git控制已经存在, 更新资源'
cd "${DIR_PROJ}"
#git reset --hard
git checkout . && git clean -df
git pull
git checkout "origin/${PRO_BRANCH}"
fi
echo '更新项目结束......'
在测试的时候发现了一个新的问题就是当项目存在的时候去运行shell脚本更新的时候,报了一个错误,让我制定分支去更新具体报错
更新项目开始......
git控制已经存在, 更新资源
HEAD is now at 9ab776d bowenk bowenk
You are not currently on a branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
HEAD is now at 9ab776d... bowenk bowenk
更新项目结束......
所以后面去网上找了个方法试下点击这里去看看吧
网上很多人都是说用这个方法可以,但是我不知道我哪里写错了就是不行,既然这样我就用了个很丑的方法,既然让我指定个分支去让就指定吧,master分支是肯定会存在的,所以为我直接 git checkout master 然后再git pull 。
测试了下 每次都会更新到最新的资源,而且还不会报错了,最后贴上完整的shell脚本,希望大家多多指教。
#!/bin/sh
# 脚本目录 先把项目更新下来
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# STYLE_NAME=$1 #类型名字
PROJECT=$1 #项目的git名字
PRO_BRANCH=$2 #项目分支
BASE_GIT_URL="http://10.1.0.103:3000/global"
#项目git地址
PRO_GIT_URL="${BASE_GIT_URL}/${PROJECT}.git"
#你的项目路径
DIR_PROJ="${DIR}/Build/${PROJECT}/workspace"
echo '更新项目开始......'
if [ ! -x "$DIR_PROJ/.git" ]; then
if [ -x "$DIR_PROJ" ]; then
echo '$DIR_PROJ已经存在,先删除'
rm -r "$DIR_PROJ"
fi
echo "git控制不存在,checkount.....${PRO_GIT_URL}"
git clone $PRO_GIT_URL "${DIR_PROJ}"
cd "${DIR_PROJ}"
git checkout "origin/${PRO_BRANCH}"
else
echo 'git控制已经存在, 更新资源'
cd "${DIR_PROJ}"
git reset --hard
git checkout . && git clean -df
git checkout master
git pull
git checkout "origin/${PRO_BRANCH}"
fi
echo '更新项目结束......'