【Git 权威指南】读书笔记 - 和声

主要内容:【Git 协议与工作协同】、【冲突解决】、【Git 里程碑】、【Git 分支】、【远程版本库】、【补丁文件交互】 Git 协议与工作协同 Git 支持的协议 SSH、GIT、HTTP、HTTPS、FTP、FTPS、RSYNC 及前面已经看到的本地协议。 SSH 协议: ssh://[user@]example.com[:port]/path/to/repo.git/ [user@]example.com:path/to/repo.git/ GIT 协议,最常用的只读协议: git://example.com[:port]/path/to/repo.git/ HTTP[S] 协议: http[s]://example.com[:port]/path/to/repo.git/ 强制非快进式推送 git push -f 强制推送,会强制刷新服务器中的版本。 禁止非快进式推送 git --git-dir=/path/to/repos/shared.git config receive.denyNonFastForwards true 冲突解决 拉回操作中的合并 git pull = git fetch + git merge 合并策略 Merge Strategis Git 合并操作支持很多合并策略,默认会选择最适合的合并策略。例如,和一个分支进行合并时会选择 recursive 合并策略,当和两个或两个以上的其他分支进行合并时采用 octopus 合并策略。 git merge [-s <strategy>] [-X <strategy-option>] [<commit>...] This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. git merge -s recursive -X ours [<commit>...] Merge branch obsolete into the current branch, using ours merge strategy: ...

January 17, 2018 · 3 min · 469 words · Me

iOS 开发技巧与工具推荐

状态栏 Help Search 框可以方便地检索相关设置项。 Navigator ⌘ 1 .. ⌘ 7 可以切换窗口。 Show the Symbol navigator 在类不多时,可以方便查看所有类的结构;类多时可使用下方的 filter 功能过滤。 Show the Breakpoint navigator 点击右下角 + 选择 Exception Breakpoint..,可以添加更明确的报错断点,支持选择 Objective-C 或 Swift 语言。 Utilities ⌘ ⌥ 1 .. ⌘ ⌥ 7 可以切换窗口。 Show the Code Snippet Library 代码片段模板,也可以将自己写好的代码片段拖入。 Show the Media Library 可以直接拖拽图片到 xib 中,自动创建 UIImageView。 ...

January 12, 2018 · 2 min · 397 words · Me

回顾 2017

2017 关键词:Birds、离职、狼人杀、白洋淀、iOS、自如。 Birds Birds 是自己编写时间最长的一个 Web 项目。项目接手、改版、重构、迭代、盈利,上半年每天工作都是面对它。 Birds 良好的表现与需求互相推动,这点很重要,假如有需求而项目没有成长,或项目成长没了需求,对工程来说都只能是纸上谈兵、无事可做。项目中的规范的重要性,无论是代码还是数据库,只要项目不是夭折终将显现,对于规范性我绝不会开倒车,做任何妥协,种种经历只说明:这里欠的东西总会还。如何应对需求的千变万化,小结几点:模块化、组件化思想,功能多可配置,功能可拔插,功能方法粒度要小;不要对程序肆意进行打补丁式的修改,减少对流程入侵;当某一处的逻辑增加时要及时重新修改、定义流程;对需求目的的正确理解更是能高效开发。 对前端重新认识的一年。现在的前端和大学时刚刚接触时,已经大不一样了。前端能做的事情越来越多,很多业务逻辑都在前端处理,服务端只需要提供接口,分工合作更容易。浅尝 React Vue Webpack 后,也许前端才是自己的归宿。 离职 离职的不是我。老人走,新人来,新人走。离职一词在我身边跟了一年都没有停下来。同事离职的原因很多,离开北京、公司发展、自我发展… 马云说离职的原因就两个:1. 钱没给够。2. 受了委屈。我起初是认同这一说法的,但是后来觉得 “人” 或者说 “人的思想” 或者说 “人性” 在其中影响作用非常的大。相同的事情不同的角度看,结果相去甚远,如果基本的理念不同,那事情基本是无法调和的。 对做的事情的认同感,对自我的定位与认识,对现实情况的冷静思考,这几点需要反复咀嚼。 分享一篇文章:公司没大牛带,需要离职么?。对于刚入门的我们,这是一个很有代表性的问题。太多时候我们期待别人,忘了自己。公司有大牛,能跟着学是幸运,没有是常态。先接受了这个设定,会更容易找提高自己的方法。有没有大牛并不重要,我们是为了那个更好的自己。 狼人杀 2017 火的游戏很多:狼人杀、守望先锋、王者荣耀、吃鸡。狼人杀这一杀,好像杀到了毕业前和同学舍友在一起臭 high 的日子。可说骚话、互相 diss、互相吹捧,真真假假其乐无穷。最赤鸡的是鱼炸出了个女盆友,各路同学亲上加亲,无法克说。 白洋淀 我想 你说 你不要在孤单 让我做你的伴 白洋淀去过四次,那里的温泉过去两次,年中 Team Building 再喜加一,而这一次让这里有了美丽故事。喷泉、沙发,出现了对的人。 iOS React Native 的一波尝试后,走上了移动开发的道。Swift 让上 iOS 车的门槛降低不少,Swift API 趋向稳定,可以说这是最好的时候。GitHub 应该是再也放不下了,外文的书籍、文档确实靠谱啊,推荐一个教程网站 iOS Tutorials - Ray Wenderlich 真的零基础入门。 我相信:一个人语言的界限,就是他世界的边界。 自如 一场大火让无数人无家可归,年末换房也受牵连。被自如圈粉,其他中介的房子真的太 low 了。自如订房子居然也要抢,一波三折、失而复得。在没抢到房子时,真的想走,想离开这里了,很凄凉。最终是在公司对面住下了,过上了在家吃中饭晚饭的日子。 2018 Happy New Year 2017 自己是幸运的,2018 猥琐发育,不要浪,胜利属于伏地魔。 ...

December 31, 2017 · 1 min · 73 words · Me

【Git 权威指南】读书笔记 - 独奏 - Part 4

主要内容:【历史穿梭】、【改变历史】、【Git 克隆】 历史穿梭 查看条件个数: git rev-list HEAD | wc -l 版本表示法:git rev-parse git rev-parse pick out and massage parameters for other git commands. --git-dir 可以显示 Git 版本库的位置 --show-cdup 当前工作区目录的深度 --parseopt 可以用于被 Git 无关应用用于解析命令行参数 # 显示分支,tag git rev-parse --symbolic --branches git rev-parse --symbolic --branches # 显示定义的所有引用 git rev-parse --symbolic --glob=refs/* # 显示多个表达式的 SHA1 哈希值: git rev-parse master refs/heads/master 6652a0dce6a5067732c00ef0a220810a7230655e 6652a0dce6a5067732c00ef0a220810a7230655e ^后面的数字代表该提交的第几个父提交,~<n>就相当于连续<n>个符号^ git rev-parse A~3 A^^^ e80aa7481beda65ae00e35afc4bc4b171f9b0ebf e80aa7481beda65ae00e35afc4bc4b171f9b0ebf # 暂存区里的文件和HEAD中的文件相同 git rev-parse :gitg.png HEAD:gitg.png fc58966ccc1e5af24c2c9746196550241bc01c50 fc58966ccc1e5af24c2c9746196550241bc01c50 # 在提交日志中查找字串的方式显示提交 git rev-parse :/"Commit A" 81993234fc12a325d303eccea20f6fd629412712 版本范围表示法:git rev-list git rev-list 可以帮助研究 Git 的各种版本范围语法。 ...

December 25, 2017 · 3 min · 586 words · Me

iOS 招聘总结

自己也做了一次面试官,简历看了很多,内容总结如下。 一些感受 基本技能不用特别强调,不会吸引太多注意力,因此需要精通一些特别的技能或技术点 「与产品沟通」「安排工作」这类描述,我觉得也不用写,没什么吸引力 简历要体现自己擅长和独特的地方,其他内容一笔带过即可 简历上的字词细节我比较在意,如 iOS vs IOS,Xcode vs XCode 有 GitHub、Blog 绝对好评,但要有实质内容 综合考察:基础知识、业务能力、性格、气场 技能 基础 Objective-C、Swift 内存管理机制:MRC、ARC 代理、通知、Block 回调机制、闭包 KVC、KVO 机制 CoreData、FMDB、归档存储、SQLite、NSUserDefaults Runtime 运行机制、Runloop 运行机制 GCD、NSOperation、NSThread 多线程编程 Socket 通信 单例、观察者模式 MVVM RESTful 业务 瀑布流、抽屉效果 断点续传、媒体流 SSO 单点登录 Framework CocoaPods 支付宝、高德、二维码扫描、友盟、极光推送、短信验证 微信、微博登录、支付、In-App Purchase SDWebImage、AFNetworking、Alamofire、SnapKit、MBProgressHUD IM 环信 Spring 动画 ICSDrawer 侧滑菜单 AVOS Cloud SDK ZXing、ZBar 二维码 XMPP 其他 Axure 良好的英文文档阅读能力 职责 模块封装 上架 迭代 沟通 整体框架设计 使用 KVO 监听实现自定义下拉刷新 针对不同的网络状态设置不同的缓存策略 各种 SDK 集成 HTML5 与 Native 相互调用 面试技巧 自己对 iOS 的理解还并不深,如何面试更有经验的人? ...

November 25, 2017 · 1 min · 90 words · Me

Photoshop 编辑 GIF

录制 GIF 推荐使用 LICEcap 小巧好用。 GIF 查看方法 在 Mac 上双击 GIF 将是按帧查看一幅一幅的图片,按住 空格 可以动起来。也可以选择 GIF 图片直接点击空格预览。 GIF 编辑 预览 在 Mac 中可以直接使用 预览 对 GIF 进行删除帧的操作。但是发现再次保存的 GIF 只播放一次,不会循环播放。 Photoshop 使用 Photoshop 打开 GIF,点击 窗口 -> 时间轴,可在时间轴中对图片进行编辑。文件 -> 导出 -> 存储为 Web 所用格式 然后在 循环选项 选择 永久。 在这里也可以降低 图像大小 对图片进行压缩。 点击 存储 导出新的 GIF。 – EOF –

November 23, 2017 · 1 min · 56 words · Me

关于 GitHub README.md 中图片加载失败

遇到的问题 在编写 GitHub 的 README.md 后,其中引用的网络图片无法正常显示,点击 alt 的文字提示:Content length exceeded。 分析 根据 About anonymized image URLs 这篇文章:上传的图片 URL 将被修改,所以个人信息将不会被跟踪。GitHub 将使用 开源项目 Camo。Camo 将为每一个图片生成一个以 https://camo.githubusercontent.com/ 匿名代理 URL 同时隐藏来自其他用户的浏览器详细信息和相关信息。 我引用的 GIF 图片有 7MB 多,那么图片大小的限制是多少? camo - server.coffee#L18 content_length_limit = parseInt(process.env.CAMO_LENGTH_LIMIT || 5242880, 10) 换算后大小正好是 5MB。 References 关于 GitHub 无法图片加载的问题

November 22, 2017 · 1 min · 47 words · Me

Git checkout --theirs --ours 解决冲突文件

在代码合并时遇到 conflict 是常有的事情,有些内容是自动生成的资源文件,手工处理起来很麻烦,某一文件如何全部以某一分支的内容为准? 使用 checkout --theirs . checkout --ours .。 场景实例 Engineer A、B 同时从 master checkout 自己的功能分支: # Engineer A git checkout -b feature-a # Engineer B git checkout -b feature-b Engineer A 开发比较快先进行了 push: git add . git commit -m "feat: feature-a" git checkout master git merge feature-a git push Engineer B 再 push 前需要拉最新的 master,因为改到了同一行代码,出现代码冲突。 merge 合并代码 使用 merge 命令导致的代码冲突。 git checkout master git pull git merge feature-a 在处理冲突的过程中: ...

August 30, 2017 · 1 min · 136 words · Me

【Git 权威指南】读书笔记 - 独奏 - Part 3

主要内容:【Git 基本操作】 Git 基本操作 先来合个影 在 Git 里,“留影”用的命令叫做 tag,更加专业的术语叫做“里程碑”(打 tag,或打标签)。 git tag -m "Say bye-bye to all previous practice." old_practice 里程碑无非也是一个引用,通过记录提交 ID(或者创建 Tag 对象)来为当前版本库状态进行“留影”。 git rev-parse refs/tags/old_practice 41bd4e2cce0f8baa9bb4cdda62927b408c846cd6 git describe 显示当前版本库的最新提交的版本号。格式:最近的 tag - 距离此 tag 的个数 - 该提交的 SHA1 git describe old_practice # .. commit something git describe old_practice-2-g8861c65 删除文件 rm *.txt 针对的是 工作区,对 暂存区 和 版本库 没有任何影响。 git rm detached-commit.txt hack-1.txt new-commit.txt welcome.txt 删除动作加入了暂存区,commit 后在版本库罪行提交中删除了,在历史提交中尚在。 ...

August 3, 2017 · 2 min · 308 words · Me

【Git 权威指南】读书笔记 - 独奏 - Part 2

主要内容:【Git 重置】、【Git 检出】、【恢复进度】 Git 重置 分支游标 master 的探秘 git log --graph --oneline * e695606 which version checked in? * a0c641e who does commit? * 9e8a761 initialized. 引用 refs/heads/master 就好像是一个游标,在有新的提交发生的时候指向了新的提交。 Git 提供了 git reset 命令,可以将“游标”指向任意一个存在的提交 ID。注意下面的命令中使用了 --hard 参数,会破坏工作区未提交的改动,慎用。 git reset --hard HEAD^ HEAD is now at e695606 which version checked in? 用 reflog 挽救错误的重置 通过 .git/logs 目录下日志文件记录了分支的变更。默认非裸版本库(带有工作区)都提供分支日志功能,这是因为带有工作区的版本库都有如下设置: git config core.logallrefupdates true 查看一下 master 分支的日志文件 .git/logs/refs/heads/master 中的内容。 tail -5 .git/logs/refs/heads/master Git 提供了一个 git reflog 命令,对这个文件进行操作。 ...

July 20, 2017 · 3 min · 619 words · Me