• 我更倾向于这种做法

  • Awesome Ruby China at 2018年06月01日

    一般每次 develop 上有新的提交以后,分支都要阶段性地 rebase 到 develop HEAD,保证正在修改的程序和已经提交定稿的程序没有冲突。develop 上只提交一些比较简单、浅显的改动,比如修改日志格式、更新 gem 版本等等不会有太大影响的东西。分支则是先规划好大的模块(通常是一个或者半个功能),然后里面有多个小任务,一般一个小任务(通常是一张页面和一套 CRUD)一两个提交,相关的提交整理到相邻位置,或者如果量不大的话就直接 Squash 掉。页面我一般是前端后台代码一个提交,然后 RSpec 一个单独提交。如果是 lib 业务模块的话,则是一小块业务逻辑功能一个提交,可以参考下图:

    有时候会遇到一个功能做不完的情况,比如我们曾经出现过一个想上一个大功能,但是最后因为人力限制或者需求不大而腰斩的情况,那就把要留下的功能整理到相邻位置,然后 Merge 回主线;不要的部分撇开,单独留一个尾巴分支挂在外面,每隔一两个月 Rebase 刷新一下,等以后功能重开的时候可以继续工作。

  • Awesome Ruby China at 2018年06月01日

    tig 我没用过,看了截图,我觉得应该是处于 GUI 和 CLI 之间的位置。也有人管这样的程序叫做 CUI。

  • Awesome Ruby China at 2018年06月01日

    你说的就是我一开始说的意思,麻烦你爬一下帖子可以吗?我不想一次又一次地纠正语文问题。

  • Awesome Ruby China at 2018年06月01日

    我进公司之前,他们是这么用 Git 的:

    后来他们觉得单线程开发受不了了,开始用分支,那时候记录是这样的:

    而现在我的要求是这样的:

    其中一个分支是我带的新人写的,他之前是客服部的,说想来做开发,我带他学了 Ruby 和 Rails,教了他怎么用 Git GUI,大概一两个月就能按照要求完成任务了。而之前的那堆蛇皮走线,是好几位 Git 用了两三年的人搞出来的。

    你说我为什么要推 GUI?

  • Awesome Ruby China at 2018年06月01日

    工具不是最主要的,但是有一个趁手的工具可以极大地提高效率。

    为什么我们会用 Ruby on Rails?难道就不能用 C 或者汇编写网站吗?当然可以,但是用更趁手的工具可以提高开发效率,减少失误。我一开始推 GUI 也是同样的道理。古人写代码,起手就是汇编,纸带打洞写代码,那是因为他们没有条件用高级工具。现在学编程,谁起手从汇编开始学起的?

    我一开始就说,光用命令行,干不了多少复杂的东西。类比到编程也一样,光用 C,写不了多少大型网站。这当然不是说 C 语言写不了大型网站,C 当然能写,人家世界级大师水平的大佬,泡在牛逼公司里拿着高薪用 C 语言写核心业务,当然可以。我们这些普通人呢,为什么不去用 PHP Python Ruby Go,而要跑去死抠内存指针和汇编优化呢。

    更理想的情况是,我很多 Git 技巧就是 GUI 教的。写商业版本 Git GUI 的人,自己是早就吃透 VCS 的方方面面,你去用这些 GUI,然后看他们是怎么一阵蛇皮走位骚操作的,再吸收回来为自己所用,这才是正确的学习方法。我要是丢给你一个 Git Manual,你去看一年都不一定能想通为什么 Git rebase 是 Git commit --author --date -F 的一个语法糖。

  • Awesome Ruby China at 2018年06月01日

    我们项目归我管了以后,我就要求每个 Feature 的提交记录都要干干净净,方便调试回滚,代码 Merge 前都必须要 Peer Review 过。以前招了一堆外国人,佛性提交,坚持只用命令行,但是又只会 commit pull push merge,推上来的提交乱七八糟,各种名为 root@ubuntu 的用户穿插其中,分支纵横交错,Merge 节点还偷偷藏着几个冲突处理更改,回头做 Blame 和 Rollback 的时候心态都崩了。

  • Awesome Ruby China at 2018年06月01日

    我智商捉急,刚刚才想起 git 的 rebase 也是个语法糖,说不定大神你是用更底层的 git commit -F 来重写提交链的,如果我低估了你的能力,那我十分抱歉。

  • [
      ->{0},
      ->{puts 'call1'; `/bin/stty size 2>/dev/null`.split[1].to_i},
      ->{puts 'call2'; `/usr/bin/tput cols 2>/dev/null`.split[0].to_i},
      ->{puts 'call3'; 80}
    ].lazy.map(&:call).drop_while(&:zero?).first
    

    (多余的内容是测试用的,请自行删除。)

  • Awesome Ruby China at 2018年06月01日

    是啊你说得对,我智商不行。

    我经常做的事情:Git Flow 新建 Feature 分支以后,日常开发频繁提交,一个分支开发完成或者到一个阶段以后,整理分支提交记录,把涉及多于一个功能的提交拆分,按照功能和页面,代码和测试分开归类重新合并成多个大提交,每个提交测试跑通保证可以单独回滚,最后清理完分支以后从主线 Rebase 更新然后再 Merge 回主线。

    我不知道你平时是怎么处理这样复杂的操作的,但是我用 GUI 操作的速度起码可以省掉我用 interactive rebase 至少 80% 的时间。可能你手速飞快,每个提交 rebase 单独编辑 stage index 再分开 commit 然后再重新排序提交再 squash commits 可以一气呵成,然而我做不到。特别是,GUI 可视化操作只要点几下鼠标就能可视化编辑 stage index 就能可视化重排 commits 的,我为什么要憋屈的去 vim 和 shell 来回切?我为什么要浪费我的宝贵时间干这些我不需要干的事情?

    还有,能不要再瞎瘠薄捏造我没说过的话吗?

  • Awesome Ruby China at 2018年05月31日

    我也是第一次听说,不知道你是哪里听来的。

  • Awesome Ruby China at 2018年05月31日

    记住了,学好语文很重要。

    我说的是 用命令行,几乎干不了什么复杂的事情,主语是人,说的是人类的能力无法达到充分利用命令行赋予的功能。

    你说的是 命令行也能干,主语是命令行。命令行当然都能干,GUI 就是代替人类去调用命令行的。

    回答牛头不对马嘴,还说什么记住,记个蛋蛋。请好好学习语文,谢谢。

    另外,GUI 能干的,命令行不能干,命令行能干的,GUI 不能干,他们是互相对接的。刀柄能让你握,菜刀不能让你握。菜刀能切肉,刀柄不能让你切肉。

    握着一把没有刀柄的菜刀的人,何必去鄙视那些用着有刀柄的菜刀的人呢。

  • Awesome Ruby China at 2018年05月26日

    可以尝试一下 SmartGit,边用边学可以让你学会很多 Git 的使用技巧。

  • Awesome Ruby China at 2018年05月26日

    请问你想表达什么?

  • Awesome Ruby China at 2018年05月26日

    说反了什么?

  • Awesome Ruby China at 2018年05月24日

    Git 你需要一个牛逼的 GUI。光用命令行,几乎干不了什么复杂的事情。

  • 首先这是 gzip 压缩,不是 zip 压缩。

    其次 production 应该由 web server 负责静态文件。

    nginx 如何实现?大多数发行版安装的 nginx 就已经配置成压缩了,具体可以读各大发行版 nginx 包里的默认配置。

  • 只说了结论,没有说原因,看上去也就是省掉了一个 Enumerator 的初始化,我不觉得是什么严重的性能问题。

    而且写代码本来可读性就是很重要的,我觉得 x.times.map 读起来比 Array.new(x) 更直观一些。

  • .to_i(+3) 应该是很容易猜的。

    foo (bar, baz) 这种调用方法也是很久之前就被废止了,要求括号与函数名之间不得有空格。其后对于 foo (1) + 2一律解释成 foo( (1) + 2 )

  • 0.upto(arr.size - 1)
    

    ->

    arr.size.times
    
  • 关于 ruby 程序 Ctrl-C at 2018年05月18日

    还可以考虑用ensure包起来。

  • 我只是纠正一下用词。这种编码,最多可以叫混淆,轮不到加密这个词。

  • 自带加密效果。

    Gzip 不叫加密效果……

  • 一般是为了省函数,再加上英语读起来比较顺口。

    if whatever?
      redirect_to root_url
      return
    end
    

    vs

    redirect_to root_url and return if whatever?
    
  • 根本不知道现在 imgur 都要梯子了。

  • 顺便上图一张(网络源,出处不详)

  • 你不如去隔壁 v 站躺一会儿,回来就知道这里环境有多好了。

  • White lives matter 😅 (手动滑稽

  • Rails 本来就是激进风格的,否则就像你说的,为什么不去用其他语言和框架呢?

    要是不激进,岂不是要一直落在别人后面了。

  • RESTful 是一种约定的规范。

    意义就是有一定的规范,没了。

    你当然可以和前端自己约定一套自己的规范,其意义当然也是有一定的规范,没了。