Git魔法 - Git大师技巧

justjavac 发表于 2012-03-08

Git大师技巧

到现在,你应该有能力查阅 git help 页,并理解几乎所有东西。然而,查明解决特 定问题需要的确切命令可能是乏味的。或许我可以省你点功夫:以下是我过去曾经需要 的一些食谱。

源码发布

就我的项目而言,Git完全跟踪了我想打包并发布给用户的文件。创建一个源码包,我运 行:

$ git archive --format#tar --prefix#proj-1.2.3/ HEAD

提交变更

对特定项目而言,告诉Git你增加,删除和重命名了一些文件很麻烦。而键入如下命令会容易的多:

$ git add . $ git add -u

Git将查找当前目录的文件并自己算出具体的情况。除了用第二个add命令,如果你也打 算这时提交,可以运行git commit -a。关于如何指定应被忽略的文件,参见 git help ignore

你也可以用一行命令完成以上任务:

$ git...

Git魔法 - 分支巫术

justjavac 发表于 2012-03-07

分支巫术

即时分支合并是Git最给力的杀手锏。

问题 :外部因素要求必须切换场景。在发布版本中突然蹦出个严重缺陷。某个特性完 成的截至日期就要来临。在项目关键部分可以提供帮助的一个开发正打算离职。所有情 况逼迫你停下所有手头工作,全力扑到到这个完全不同的任务上。

打断思维的连续性会使你的生产力大大降低,并且切换上下文也更麻烦,更大的损失。 使用中心版本控制我们必须从中心服务器下载一个新的工作拷贝。分布式系统的情况就 好多了,因为我们能够在本地克隆所需要的版本。

但是克隆仍然需要拷贝整个工作目录,还有直到给定点的整个历史记录。尽管Git使用文 件共享和硬链接减少了花费,项目文件自身还是必须在新的工作目录里重建。

方案 :Git有一个更好的工具对付这种情况,比克隆快多了而且节省空间: git branch

使用这个魔咒,目录里的文件突然从一个版本变到另一个。除了只是在历史记录里上跳 下窜外,这个转换还可以做更多。你的文件可以从上一个发布版变到实验版本到当前开 发版本到你朋友的版本等等。

老板键

曾经玩过那样的游戏吗?按一个键(“老板键”),屏幕立即显示一个电子表格或别的? 那么如果老板走进办公室,而你正在玩游戏,就可以快速将游戏藏起来。

在某个目录:

$ echo "I'm smarter than my boss" > myfile.txt $ git init $ git add...

Git魔法 - 多人Git

justjavac 发表于 2012-03-06

多人Git

我最初在一个私人项目上使用Git,那里我是唯一的开发。在与Git分布式本性有关的命 令中,我只用到了 pullclone,用以在不同地方保持同一个项目。

后来我想用Git发布我的代码,并且包括其他贡献者的变更。我不得不学习如何管理有来 自世界各地的多个开发的项目,幸运的是,这是Git的长处,也可以说是其存在的理由。

我是谁?

每个提交都有一个作者姓名和电子信箱,这显示在 git log 里。默认, Git使用系统 设定来填充这些域。要显示地设定,键入:

$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com

去掉global选项设定只对当前仓库生效。

Git在SSH, HTTP上

假设你有ssh访问权限,以访问一个网页服务器,但上面并没有安装Git。尽管比着它的 原生协议效率低,Git也是可以通过HTTP来进行通信的。

那么在你的帐户下,下载,编译并安装Git。在你的网页目录里创建一个Git仓库:

$ GIT_DIR=proj.git git...

Git魔法 - 克隆周边

justjavac 发表于 2012-03-05

克隆周边

在较老一代的版本控制系统里,checkout是获取文件的标准操作。你将获得一组特定保 存状态的文件。

在Git和其他分布式版本控制系统里,克隆是标准的操作。通过创建整个仓库的克隆来 获得文件。或者说,你实际上把整个中心服务器做了个镜像。凡是主仓库上能做的事, 你都能做。

计算机间同步

我可以忍受制作tar包或利用rsync来作备份和基本同步。但我有时在我笔记本上编辑, 其他时间在台式机上,而且这俩之间也许并不交互。

在一个机器上初始化一个Git仓库并提交你的文件。然后转到另一台机器上:

$ git clone other.computer:/path/to/files

以创建这些文件和Git仓库的第二个拷贝。从现在开始,

$ git commit -a $ git pull other.computer:/path/to/files HEAD

将把另一台机器上特定状态的文件“拉”到你正工作的机器上。如果你最近对同一个文 件做了有冲突的修改,Git将通知你,而你也应该在解决冲突之后再次提交。

典型源码控制

为你的文件初始化Git仓库:

$ git init $ git add . $ git...

为 jekyll 博客添加静态搜索

justjavac 发表于 2012-03-04

今晚吃完饭后,为博客做了简单的搜索功能,因为做的大多是前台方面的工作,所以我个人 将其称之为静态搜索。简单介绍下。

一、生成 search.xml

遍历 jekyll 博客中的所有文章,获取其标题、日期和文章链接,整合 到一个 xml 文件中。这个 xml 文件我们可将其命名为 search.xml,以便我们后续的工作。

具体的写法如下:

//jekyll 语法前反斜杆是为了转义输出,请去掉 <?xml version="1.0" encoding="UTF-8" ?> <articles> {\% for post in site.posts %\} <article> <title>{\{ post.title }\}</title> <url>{\{ site.url }\}{\{ post.url }\}</url> <date>{\{ post.date |...