浮生若梦

凡所有相,皆是虚妄


  • 首页

  • 归档

  • 分类

  • 搜索

Git 批量修改Commit Message

发表于 2017-02-17   |   分类于 开发那些事 , Git   |  

Ruby 脚本使用 git rebase 命令批量给 commit message 加前缀

原 commit log

1
2
3
4
5
6
7
8
9
10
11
12
c97a228 修改通知设置页问题
4726e70 关于页面,顶部视图自动调整高度至最佳
70a4b2c fix关于页面导航栏问题,去除关于、系统通知、推送管理页面Storyboard关联
0e369b6 关于LesPark页面UI完成
7186152 更改系统通知界面UI
5afc075 推送管理页面,当无更多关注时去除底部上拉加载更多动画。
19c1ecd 更改推送管理页面的样式,修复该页面一些bug
b5feb88 重写语言设置和公制页
3f3ca86 Refactor setting cells
b7e212e 重写设置页、隐私页,统一设置模块cell
8349479 重写账号绑定页
7fcacb9 重写账号信息页

修改之后

1
2
3
4
5
6
7
8
9
10
11
12
c97a228 [设置] 修改通知设置页问题
4726e70 [设置] 关于页面,顶部视图自动调整高度至最佳
70a4b2c [设置] fix关于页面导航栏问题,去除关于、系统通知、推送管理页面Storyboard关联
0e369b6 [设置] 关于LesPark页面UI完成
7186152 [设置] 更改系统通知界面UI
5afc075 [设置] 推送管理页面,当无更多关注时去除底部上拉加载更多动画。
19c1ecd [设置] 更改推送管理页面的样式,修复该页面一些bug
b5feb88 [设置] 重写语言设置和公制页
3f3ca86 [设置] Refactor setting cells
b7e212e [设置] 重写设置页、隐私页,统一设置模块cell
8349479 [设置] 重写账号绑定页
7fcacb9 [设置] 重写账号信息页

Ruby 脚本

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
#!/usr/bin/env ruby
PROJECT_PATH = "/Users/zhudf/LegendPark/lespark_ios"
COMMIT_PREFIX = "[设置] "
def construct_commit_msg(orig_msg)
new_msg << COMMIT_PREFIX
orig_msg.split.each_with_index do |s, i|
if i != 0
new_msg << s
end
end
new_msg
end
def batch_amend
puts 'Change to project dir...'
Dir:chdir(PROJECT_PATH)
puts 'Batch amend commit message :::::::: BEGIN'
while $? == 0
orig_msg = `git log --oneline -1`
new_msg = construct_commit_msg(orig_msg)
`git commit --amend -q -m #{new_msg} && git rebase --continue > /dev/null`
end
puts 'Batch amend commit message :::::::: END'
end
batch_amend

English Pronounciation

发表于 2017-02-11   |   分类于 English , Pronounciation   |  
1
2
[i][i:]: beach, sheet
[I]: bitch, shit

How to Say BEACH vs. BITCH and SHEET vs. SHIT - American English

iOS 自定义 NSLog 和 可变参数

发表于 2017-02-08   |   分类于 开发那些事 , iOS   |  

1. 自定义 NSLog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 声明
void LogD(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
int main(int argc, const char *argv[]) {
LogD(@"Ooops...%d", 1);
}
// 定义
void LogD(NSString *format, ...) {
va_list args;
va_start(args, format);
NSLogv(format, args);
va_end(args);
}

2. 可变参数

1
2
3
4
// Objective-C
- log:(NSString *)format, ... {}
// C
void LogV(NSString *format, ...) {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void LogV(NSString *format, ...) {
va_list args;
va_start(args, format);
int arg;
// 获取 int 类型参数
while ((arg = va_arg(args, int)) {
NSLog(@"%d", arg);
}
NSString *s;
// 获取 NSString 类型参数
while ((s = va_arg(args, NSString *)) {
NSLog(@"%@", s);
}
va_end(args);
}

3. NS_FORMAT_FUNCTION(F,A)

作用是告诉编译器检查格式化参数类型是否正确,例如:LogD(@"Name: %@", 27) 就会出警告

  • F: Index of format string 格式化字符串的位置
  • A: Index of first argument 格式化参数的起始位置

Exsample

1
2
void LogD(NSString *format, ...) NS_FORMAT_FUNCTION(1,2)
void LogV(BOOL b, NSString *format, ...) NS_FORMAT_FUNCTION(2,3)

本地搭建 GIT 服务器

发表于 2017-02-07   |   分类于 开发那些事 , Git   |  

由于 bitbucket 网站访问速度太慢,即使连接 vpn 速度也不是很理想,尤其是 pod update 之后,代码可能增加几十M,推拉慢死了。

一、创建 GIT 服务器

1
2
3
4
5
6
7
8
9
// 选择一个目录作为仓库
cd ~/Repo
mkdir project_name.git && cd project_name.git
// 初始化 git 仓库
git init --bare
// 创建.ssh 目录存放所有要访问的机器的 id_isa.pub
mkdir .ssh
// 先把本机的 copy 过来
cp ~/.ssh/id_isa.pub .ssh
  1. 测试发现 Repo/project_name.git/.ssh 是没什么用的
  2. project_name.git 中的 .git 不是必须的

二、关联项目

1
2
3
4
5
6
// 进入项目
cd project_path
// 因为有 origin 了,所以就叫 local 吧
git remote add local zhudf@127.0.0.1:/Users/zhudf/Repo/project_name.git
// 密码就是电脑密码
git push local master

三、ssh 免密码

服务器 ~/.ssh 目录创建 authorized_keys 文件,把各自机器 ~/.ssh/id_isa.pub (公钥)追加到 authorized_keys 中

1
2
3
4
5
6
7
// 本机免密码
cat ~/.ssh/id_isa.pub >> authorized_keys
// 测试
ssh zhudf@127.0.0.1
// 其他机器免密码
// 复制各自机器上 ~/.ssh/id_isa.pub 追加到 authorized_keys 文件里

四、改善

为了代码保持同步,现在代码需要 push 两次

1
2
git push origin
git push local

需要改善的是在 git push local 之后本地仓储自动同步到 bitbucket。

tmux

发表于 2017-02-06   |   分类于 开发那些事 , Shell   |  

一、Install

1
brew install tmux

二、Add Mouse Support

1
2
3
echo 'set-option -g mouse on' >> ~/.tmux.conf
tmux source-file ~/.tmux.conf

三、Shortcuts

  • tmux 开启 tmux 模式
  • Ctrl + b -> % 新建 pane
  • Ctrl + b -> “ 新建 pane
  • Ctrl + b -> o 切换到下一个 pane
  • Ctrl + b -> q 显示 pane 编号,在编号消失前,按下对应数字即可切换到对应的 pane
  • Ctrl + b -> 反向键 切换 pane
  • Ctrl + b -> z 最大化 pane | 还原 pane 大小
  • Ctrl + b -> x 关闭 pane
  • Ctrl + b -> c 新建 window

IPA 重签名

发表于 2016-12-13   |   分类于 开发那些事 , iOS   |  

重签名步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 1. 解压
unzip -q Example.ipa
// 2. 删除旧签名
rm -rf Payload/Example.app/_CodeSignature
// 3. Info.plist
/usr/libexec/PlistBuddy -c "Set CFBundleIdentifier ${NEW_BUNDLE_ID}" Playload/Example.app/Info.plist
/usr/libexec/PlistBuddy -c "Set CFBundleName ${NEW_APP_NAME}" Payload/Example.app/Info.pilst
// 如果需要还需copy 新的 embeded.mobileprovision
// 4. 强制重签名
// 因为证书有空格,所以证书那里必须用双引号括起来
codesign -f -s "${CERTIFICATE}" --identifier ${NEW_BUNDLE_ID} --entitlements ${ENTITLEMENTS} Playload/Example.app
// 查看签名是否正确
codesign -vv -d Payload/Example.app
// 5. 打包 ipa
zip -qr new.ipa Playload
// 清理
rm -rf Payload

entitlements 可以改 entitlements.template

涉及到的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 查看本机证书
security find-identity -v -p codesigning
// 重签名
codesign -f -s ${CERTIFICATE_NAME} --identifier ${Bundle_ID} --entitlements Example.entitlements Payload/Example.app
// 查看签名
codesign -vv -d Example.app
// 验证签名
codesign --verify Example.ap
// 查看/修改 Plist
plutil -p Info.plist
PlistBuddy -c "Set CFBundleIdentifer ${BUNDLE_ID}" Info.plist
// 解压 / 压缩
unzip -q xxx.app
zip -qr xxx.ipa Payload

备注

测试证书

1
2
Certificate: iPhone Developer: h s (5LW76GJTQE)
APP_ID_PREFIX: Q4JEMYK62P

entitlements 模板

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>${APP_ID_PREFIX}.${BUNDLE_ID}</string>
<key>com.apple.developer.team-identifier</key>
<string>${APP_ID_PREFIX}</string>
<key>get-task-allow</key>
<true/>
</dict>
</plist>

参考:
iOS批量自动打包和部署(Ⅱ):自动打包
iOS批量自动打包和部署(Ⅲ):重新签名和自动部署

Shell 读取配置文件

发表于 2016-12-12   |   分类于 开发那些事 , Shell   |  

配置文件模板

1
2
email=zhudongfang0312@gmail.com
author=zhudongfang

shell 脚本

1
2
3
4
5
6
7
8
while read LINE
do
echo $LINE
eval "$LINE"
done < config_file_path
echo $email
echo $author

更简单的

1
source config_file_path

作用域都是当前 script 上线文

参考:http://bbs.chinaunix.net/thread-3628456-1-1.html

命令行打包 IPA

发表于 2016-12-11   |   分类于 开发那些事 , iOS   |  

涉及两个命令 xcodebuild 和 xcrun

  • xcodebuild – build Xcode projects and workspaces.
  • xcrun - Run or locate development tools and properties.
一、编译
1
2
3
4
5
// build project
xcodebuild -project Test.xcodeproj -target Test -configuration Release
// build workspace
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyScheme build(默认 action,可省略)
二、生成 ipa
1
2
3
// 注意 PackageApplication(好像新版 xcode 废弃了)
// http://www.matrixprojects.net/p/xcodebuild-export-options-plist/#tldr
xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/xxx.app -o ~/Desktop/xxx.ipa

Xcode Slicing

发表于 2016-08-11   |   分类于 开发那些事 , iOS   |  

Git 修改历史 commit message

发表于 2016-08-10   |   分类于 开发那些事 , Git   |  

首先 git log --pretty=oneline 看下提交历史

修改最近的一次 commit message

1
git commit --amend -m '3th commit lalala'

修改历史的某一次 commit message

1
git rebase -i 92e38b

注意:要修改 6b4fe4 这次提交,就要 rebase 到它的上次一提交 92e38b

要想修改那次提交,就把 pick 改成 edit

:wq 保存退出

看提示,你可以使用 git commit --amend 来修改这次提交,完事了执行 git rebase --continue 命令。

照做~

git log --pretty=oneline 查看结果

Done~

参考:Git 重写历史

12…4
时光

时光

32 日志
12 分类
18 标签
RSS
GitHub StackOverflow Twitter Weibo
© 2012 - 2017 时光
由 Hexo 强力驱动
主题 - NexT.Pisces