Tag Archives: 开发

在局域网内用Git同步代码分支

Quetiapine overdose Git是分布式的SCM工具,但为了代码分享、多人协同,大家也会像SVN一样,用一个服务器库来集中存储。这样不管在哪个地方开发的代码,最后都可以push到服务器,再让大家fetch/pull回去。

Al Ḩazm 不过有时我们一个人就会有多台机器,比如一台用于主力开发的Mac mini和一台用于流浪开发的Macbook air。在不同的机器上分别写了一些代码后,又并不想立即push到服务器。那么,是否可以在局域网内先合并代码,等在某台机器上终于完成开发后,再push到服务器端呢?答案是肯定的,只要加以简单的配置,就可以将代码同步了。

以上面的两台Mac为例,大致的场景是这样的:每一次回到mini上时,都先从air上fetch回所有新的提交,加以合并以后再继续开发。而离开mini前,则用air将mini上的新提交fetch过来,然后再离开。这样一来,不管是在mini或air上,完成开发后,都可以将完整的修改push到远端服务器上去。

为了叙述方便,我假设你已经对git的基本配置和使用有所掌握,并且在两台主机上

  • 都已将公钥id_rsa.pub和私钥id_rsa放在了~/.ssh目录
  • 工作目录都在~/project
  • 用户名都是igotit
  • mini的局域网固定IP是192.168.10.100,air的局域网固定IP是192.168.10.199

注意如果局域网IP不是固定的,建议先到路由器中设置静态IP分配。

首先配置air主机。先将公钥添加到authorized_keys中

cd ~/.ssh
cat id_rsa.pub >> authorized_keys

然后到System Preferences – Sharing – Remote Login中,打开远程登录。这里可以看到提示,ssh igotit@192.168.10.199。

然后回到mini主机上,先将air的IP地址加到hosts中

sudo vim /etc/hosts

添加一行

192.168.10.199 air

保存退出,然后将air上的项目地址添加为远程库

cd ~/project
git remote add air air:~/project

然后配置一下ssh的config

vim ~/.ssh/config

添加上

Host air
Hostname air
User igotit
IdentityFile ~/.ssh/id_rsa

保存退出,然后就可以用

git fetch air

来从air主机上抓取分支,抓完后用

git branch -a

来查看一下,除了通常的remotes/origin,现在多了个remotes/air,将来合并代码时,注意要将远程分支写正确。

接下来,想要从air主机上git fetch mini,则只需要将上面的配置反向再来一遍就可以了。

至此实际上已经完成了配置。为了安全性,这里用ssh的公私钥来完成远程登录的验证,但其实如果要想简单,是可以直接用用户名和密码来访问的,不过我并不建议那样做。相反地,为了安全考虑,最好修改一下配置,强制用公私钥来完成ssh的验证,而禁用掉密码验证。同时,最好还要将ssh的端口作一下修改,不使用默认的22。

sudo vim /etc/sshd_config

将这几行设置一下:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

保存退出,验证就已经改为强制密钥验证了。

接下来修改默认端口

sudo vim /etc/services

找到ssh这两行

ssh              22/udp     # SSH Remote Login Protocol
ssh              22/tcp     # SSH Remote Login Protocol

在下面添加

ssh2              12345/udp
ssh2              12345/tcp

端口可以自己选一个合适的,但注意不要和系统其它服务的端口冲突。

继续修改

sudo vim /System/Library/LaunchDaemons/ssh.plist

找到

<key>SockServiceName</key>
<string>ssh</string>

修改为

<key>SockServiceName</key>
<string>ssh2</string>

改完端口,还要把另一台机器的~/.ssh/config更新一下,在Hostname行下面添加上:

Port 12345

都设置好以后,回到System Preferences中先关闭再打开Remote Login,一切搞定。

上面所述均为Mac的配置,如果是Linux环境,有的地方配置可能会有区别,这里就不一一详述了。

使用Uncrustify在Xcode中格式化Objective-C代码

Xcode是开发iOS应用和Mac OS应用的必备工具,但这个工具的辅助功能相对于Eclipse之类的IDE来说,还是比较少,在Eclipse里只要按Ctrl+Shift+F,就可以将Java代码格式化得非常好看。而在Xcode里,只有Re-Indent(Ctrl+I)这一个调整缩进的功能,显然不够用。

如果想要完成完备的代码格式化,得要借助Uncrustify这样的工具。更进一步,我们用Automate配置一个针对Text的Service,再加上快捷键,就可以在Xcode里间接实现和Eclipse同样效果的代码格式化功能了。

首先安装Uncrustify工具。安装的方法很多,推荐用Homebrew来安装。如果机器上没有Homebrew,先用这条命令安装:

/usr/bin/ruby -e "$(curl -fksSL http://u.aodaren.com/homebrew)"

安装好Homebrew后,用这条命令安装Uncrustify:

brew install uncrustify

详细的Automate配置步骤可以参考这篇文章,如果不想自己配置,也可以直接下载已经配置好的workflow包,复制到~/Library/Services/,并解压就可以了:

mv Uncrustify-Objective-C.workflow.tar.gz ~/Library/Services/
cd ~/Library/Services/
tar zxvf Uncrustify-Objective-C.workflow.tar.gz

下载针对Objective-C语言的Uncrustify配置文件,移动到 ~/ 目录,并更名为 .uncrustify_obj_c.cfg,注意目标文件名前面有个 .:

mv uncrustify_obj_c.txt ~/.uncrustify_obj_c.cfg

如果上面已经顺利完成,那么现在到Xcode里选中一段代码,点右键,在Services里面应该已经有一个Uncrustify Objective-C服务了。选择后,即可将代码格式化。当然,如果每次都点鼠标显然太麻烦,下面来配置快捷键。

点屏幕左上角的苹果图标,选 System Preferences – Keyboard – Keyboard Shortcuts – Services,在Text分区里,找到刚添加的服务Uncrustify Objective-C,给这个服务加上快捷键。注意不要和Xcode里其它快捷键冲突,推荐设置为:Opt+Cmd+字母O。

这样以后在Xcode里,先用Cmd+A全选代码,再用Opt+Cmd+O来格式化代码。整个效果和Eclipse基本上差不多。

最后,如果对格式有不同的需求,还可以修改cfg文件里的设置,每个选项都有详细的说明,这里就不再赘述了。