查看本地分支:git branch -t
合并本地两个分支:git merge branchOne branchTwo
切换分支:git checkout branchName
将本地指定分支推送到远程指定仓库指定分支: git push 远程仓库地址 本地指定分支:远程指定分支[……]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
function base64_encode (str) { // 编码,配合encodeURIComponent使用 var c1, c2, c3; var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var i = 0, len = str.length, strin = ''; while (i < len) { c1 = str.charCodeAt(i++) & 0xff; if (i == len) { strin += base64EncodeChars.charAt(c1 >> 2); strin += base64EncodeChars.charAt((c1 & 0x3) << 4); strin += "=="; break; } c2 = str.charCodeAt(i++); if (i == len) { strin += base64EncodeChars.charAt(c1 >> 2); strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); strin += base64EncodeChars.charAt((c2 & 0xF) << 2); strin += "="; break; } c3 = str.charCodeAt(i++); strin += base64EncodeChars.charAt(c1 >> 2); strin += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); strin += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); strin += base64EncodeChars.charAt(c3 & 0x3F) } return strin } function base64_decode (input) { // 解码,配合decodeURIComponent使用 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = base64EncodeChars.indexOf(input.charAt(i++)); enc2 = base64EncodeChars.indexOf(input.charAt(i++)); enc3 = base64EncodeChars.indexOf(input.charAt(i++)); enc4 = base64EncodeChars.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } return utf8_decode(output); } function utf8_decode (utftext) { // utf-8解码 var string = ''; let i = 0; let c = 0; let c1 = 0; let c2 = 0; while (i < utftext.length) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if ((c > 191) && (c < 224)) { c1 = utftext.charCodeAt(i + 1); string += String.fromCharCode(((c & 31) << 6) | (c1 & 63)); i += 2; } else { c1 = utftext.charCodeAt(i + 1); c2 = utftext.charCodeAt(i + 2); string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63)); i += 3; } } return string; } |
地址:https://common-buy.aliyun.com/?spm=a2c4e.11155515.0.0.DjCjOv&commodityCode=cas#/buy
第一步:
第二步:
第三步:
第四步:点击证书控制台
第[……]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
const REGEX = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/ /** * @function format time * @param val, format * @return {string} * @example * <template> * <div> * <span>{{item.time | formatTime('yyyy/MM/dd hh:mm:ss')}}</span> * </div> * </template> * import {formatTime} from '../../library/timeFormat' * export default { * filters: {formatTime} * } */ export const formatTime = (val, format) => { if (val) { /** * @instructions 如果不是时间戳格式,且含有字符 '-' 则将 '-' 替换成 '/' && 删除小数点及后面的数字 * @reason 将 '-' 替换成 '/' && 删除小数点及后面的数字 的原因是safari浏览器仅支持 '/' 隔开的时间格式 */ if (val.toString().indexOf('-') > 0) { val = val.replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '').replace(/(-)/g, '/') // 将 '-' 替换成 '/' val = val.slice(0, val.indexOf('.')) // 删除小数点及后面的数字 } let date = new Date(val) date.setHours(date.getHours() + 8) const [whole, yy, MM, dd, hh, mm, ss] = date.toISOString().match(REGEX) const year = new Date().getFullYear() const month = new Date().getMonth() + 1 const dates = new Date().getDate() if (format) { return format .replace('yyyy', yy) .replace('yy', yy.slice(2)) .replace('MM', MM) .replace('dd', dd) .replace('hh', hh) .replace('mm', mm) .replace('ss', ss) } else { return [yy, MM, dd].join('-') + ' ' + [hh, mm, ss].join(':') } } else { return '--' } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
首先克隆:git clone https://github.com/facebook/WebDriverAgent.git 在执行命令: ./Scripts/bootstrap.sh 时报错: Please make sure that you have Carthage installed (https://github.com/Carthage/Carthage) Note: We are expecting that carthage installed in /usr/local/bin/ 安装carthage:brew install carthage 执行 ./Scripts/bootstrap.sh 仍报同样的错,再次安装carthage提示: Warning: carthage 0.27.0 is already installed, it's just not linked. You can use `brew link carthage` to link this version. 执行:brew link carthage 报: Linking /usr/local/Cellar/carthage/0.27.0... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks 提权:sudo brew link carthage 报: Error: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system. 原因可能是我刚把系统升级到 macOS High Sierra 10.13.2 搜到一大把解决方法: 1、sudo chown -R $(whoami) $(brew --prefix)/* 2、sudo chown -R $(whoami) /usr/local/* 3、brew upgrade 4、Uninstall Homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" Then re-install it: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 第四个没试,前三个都试了一遍,brew link carthage仍然报错,但是 ./Scripts/bootstrap.sh 可以执行了。 依赖安装完以后,双击WebDriverAgent.xcodeproj这个文件,会在Xcode中对应打开。 紧接着证书签名: 勾选 Automatically manage signing 然后选择Team 登录你的 Apple ID 下载证书。 在TARGETS里面选中WebDriverAgentLib: <img src="http://skillnull.com/wp-content/uploads/2018/01/131514876676_.pic_hd-1.jpg" alt="" width="1878" height="1057" /> 在TARGETS里面选中WebDriverAgentRunner: <img src="http://skillnull.com/wp-content/uploads/2018/01/141514876772_.pic_hd.jpg" alt="" width="1878" height="1057" /> 报错了,修改BundleID: <img src="http://skillnull.com/wp-content/uploads/2018/01/111514876450_.pic_hd.jpg" alt="" width="1878" height="1057" /> <img src="http://skillnull.com/wp-content/uploads/2018/01/121514876645_.pic_.jpg" alt="" width="626" height="19" /> <img src="http://skillnull.com/wp-content/uploads/2018/01/151514877046_.pic_hd.jpg" alt="" width="1878" height="1057" /> 报错解决。 接着在菜单栏中选择Product=>Destination=>你的手机,Product=>Scheme=>WebDriverAgentRunner,最后Product=>Test 运行。 |
1 2 3 4 5 6 7 8 9 10 11 12 |
webpack 3.8.1 使用 extract-text-webpack-plugin 3.0.2 抽取css时失败,报错: ERROR in ./src/static/style/localTime.css Module parse failed: Unexpected token (1:0) You may need an appropriate loader to handle this file type. | .localTimeBox { | color: red; | } @ ./node_modules/style-loader!./src/static/style/localTime.css 4:14-42 webpack-build.config.js 配置为: |
1 2 3 4 5 6 7 8 9 10 11 |
module: { loaders: [ { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'style-loader!css-loader', {publicPath: '../'}) } ] }, plugins: [ new ExtractTextPlugin('css/bundle.min.css', {allChunks: true}) ] |
解决方法:
将webpack-build.config.js 配置改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
module: { loaders: [ { test: /\.css$/, loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: ['css-loader'], publicPath: '../' }) } ] }, plugins: [ new ExtractTextPlugin('css/bundle.min.css', {allChunks: true}) ] |
问题就解决了。[……]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
一、安装 wget –no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh chmod +x shadowsocks.sh ./shadowsocks.sh 2>&1 | tee shadowsocks.log 二、输入密码 Please enter password for shadowsocks-python (Default password: teddysun.com): input your password 三、输入端口 Please enter a port for shadowsocks-python [1-65535] (Default port: 8989):input your port 四、 这一步会给出一个列表,输入列表项前面的数字来选择一个加密方法 Which cipher you'd select(Default: aes-256-gcm): input a number 五、安装成功 Congratulations, Shadowsocks-python server install completed! Your Server IP : your server ip Your Server Port : your port Your Password : your password Your Encryption Method:your encryption method Welcome to visit:https://teddysun.com/342.html Enjoy it! |
接下来下载 shadowsocks客户端,服务地址、端口、密码、加密方式填好就可以用了。
1 2 3 4 5 6 7 8 9 10 11 |
六、卸载 ./shadowsocks.sh uninstall 七、ShadowSocks常用命令 后台启动: ssserver -c /etc/shadowsocks.json -d start 后台停止: ssserver -c /etc/shadowsocks.json -d stop 启动:/etc/init.d/shadowsocks start 停止:/etc/init.d/shadowsocks stop 重启:/etc/init.d/shadowsocks restart 状态:/etc/init.d/shadowsocks status |