Git 快速入门(上)

这是之前写给同事看的《Git 快速入门》,对其他人可能也有用。这篇文档还在不断地调整和修改。

一点说明

这个教程里使用了大量的命令行。简单起见,所有 Command Line Prompt(命令行提示符)都是 Unix 式的(即美元符号$),例如:

$ echo "hello, world"

这篇文档里没有包含 Git 的安装方法,不过你可以参考:

文档开始

Git 的初始化

从远端服务器获取已经初始化的 Git 代码仓库

从远端服务器下载一个完整的 Repository(代码仓库,通常简称“Repo”)以开始编辑,使用

$ git clone

举例:

$ git clone git://github.com/h5bp/html5-boilerplate.git

在本地文件夹内初始化 Git

要在本地的文件夹里开始使用 Git ,需要对 Git 进行初始化:

$ cd /path/to/myapp/           // 进入要使用 Git 的文件夹
$ git init                     // 初始化 git ,这个操作会有两个文件(夹)被创建:
                               // .git -> 用于存储 Git 信息文件夹
                               // .gitignore -> 不需要 Git 追踪的文件,比如系统自动生成的 Thumbs.db 文件。

参考:.gitignore 模板集

使用 Git 对代码进行快照

Git 在初始化后,并未追踪该 Repo 下的任何文件。因此要给 Git 一个命令,指定追踪范围并创建代码快照:

$ git add .                    // 把当前目录及其子目录下的所有文件加入 Git 并创建快照

这时快照已经建立,但并未正式进入代码树,这就好比用 Word 新建了一个文档,但并未保存到硬盘里。

下一步需要提交 commit(相当于“存盘”),使用

$ git commit                   // 其后可接参数 -m 以加入对 commit 的描述信息

很重要的是,如果在 $ git add . 操作完成后,又对代码进行了修改,则需要在提交 commit 前把 $ git add . 再做一次。

在之前的实例中,我们在 $ git add 中指定的追踪范围为“.”,也就是当前文件夹及其子目录。你也可以使用 $ git add 单独添加任何文件。

在一个项目中初始化 git 并进行第一次 commit 的完整步骤:

$ cd /path/to/myapp/
$ git init
$ git add .
$ git commit -m "initial commit"

调整控制 git 追踪的命令其实有三个:

  • git add
  • git rm
  • git mv

第一个已经讲过了。第二个和第三个分别表示删除和移动文件(mv也可以用来重命名)。

要删除和移动文件,不要直接操作,而应该用 git rm/mv 命令进行,以通知 git 修改其追踪文件范围。用法和基本的 Unix/Linux 命令相同。

举例:要删除文件 delete_me.html 和文件夹 legacy/

$ git rm delete_me.html
$ git rm -r legacy/

举例:要重命名 rename_me.htm 文件为 rename_me.html

$ git mv rename_me.htm rename_me.html

查看当前代码仓库的变化,使用

$ git status

在每一个 commit 之前都检查一下代码仓库的状态永远是个好主意,这可以防止出现一些问题(比如手工删除了某个文件,而没有进行 git rm 以移除 git 代码仓库里的对应文件)。

$ git add .
$ git status
$ git commit -m "YOUR DESCRIPTION GOES HERE"

如果你希望查看代码历史,请使用

$ git log

系统会出现完整的日志,可以上下翻页,按 q 退出。

举例:

$ git log
commit 3e45b235fb47095ed8bcccb4233d3ac92812313d
Author: Marco Yin 
Date:   Mon Oct 17 22:18:55 2011 +0800

    activate non-default modules for Devise

commit b252e45f05c36f4467e559711a08d7a0731346e6
Author: Marco Yin 
Date:   Mon Oct 17 22:03:36 2011 +0800

    generate user model with Devise without any change

commit af5233c3c4b5534fd63cfdf9b93ed36a42ea30be
Author: Marco Yin 
Date:   Mon Oct 17 21:54:15 2011 +0800

    install Devise with related configration done

commit ce948087ff3e91de0cd57e3af4dabccf294ccaac
Author: Marco Yin 
Date:   Mon Oct 17 21:31:35 2011 +0800

    initial commit
(END) 

我们还可以使用 git checkout 快速地回到某个历史版本。

接着上面的例子:

$ git log
commit 3e45b235fb47095ed8bcccb4233d3ac92812313d
Author: Marco Yin 
Date:   Mon Oct 17 22:18:55 2011 +0800

    activate non-default modules for Devise

commit b252e45f05c36f4467e559711a08d7a0731346e6
Author: Marco Yin 
Date:   Mon Oct 17 22:03:36 2011 +0800

    generate user model with Devise without any change

commit af5233c3c4b5534fd63cfdf9b93ed36a42ea30be
Author: Marco Yin 
Date:   Mon Oct 17 21:54:15 2011 +0800

    install Devise with related configration done

commit ce948087ff3e91de0cd57e3af4dabccf294ccaac
Author: Marco Yin 
Date:   Mon Oct 17 21:31:35 2011 +0800

    initial commit
(END)
$ git checkout af5233c3c4b5534           // 我们只需要输入要回到的历史版本哈希值的前几位就可以了。

要回到最新版本,请使用命令行:

$ git checkout HEAD                      // HEAD 简单说就是当前工作分支的最新版本(不严谨说法)。

之前提到,每做一个功能都尽量使用分支。

要列出、创建、删除分支,使用 git branch 携带不同参数。

$ git branch                             // 列出当前所有分支
* create-workspaces                      // 带星号的表示当前工作分支
  master                                 // master 是主分支
$ git branch a-new-branch                // 创建一个名为 a-new-branch 的分支
$ git branch                             // 列出当前所有分支
  a-new-branch
* create-workspaces
  master
$ git checkout master                    // 切换到 master 分支
$ git branch -D a-new-branch             // 删除 a-new-branch 分支

还有一个常见的做法就是直接创建并切换到新的分支:

$ git checkout -b a-new-branch
$ git branch                             // 列出当前所有分支
* a-new-branch
  master

在切换分支的过程中,可能会遇到当前分支有已修改内容未 commit 的情况。这时候可以将其暂存起来,然后再切换:

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
       app/models/workspace.rb
       db/schema.rb
Please, commit your changes or stash them before you can switch branches.
Aborting
$ git add .
$ git stash
Saved working directory and index state WIP on a-new-branch: 75c5d6e add authentication to workspaces
HEAD is now at 75c5d6e add authentication to workspaces
$ git checkout master
Switched to branch 'master'

当工作分支完成了它的使命,我们就可以把工作分支合并到主分支上来。

$ git checkout master                     // 先切换到主分支
$ git merge create-workspaces             // 将 create-workspaces 合并到主分支上
$ git branch -D create-workspaces         // 删除 create-workspaces 分支

让 Rails Console 中的返回结果以表格显示

hirb 加入 Gemfile:

gem 'hirb'

用 Bundler 安装:

$ bundle

进 Rails Console :

$ rails c
> require 'hirb'
=> false
> Hirb.enable
=> true

现在 Model 返回的查询结果将以表格的方式显示。比如用 Client Model 查询:

> Client.all
  Client Load (11.3ms)  SELECT "clients".* FROM "clients" ORDER BY created_at ASC
+----+-------------------+-------------------------+-------------------------+
| id | name              | created_at              | updated_at              |
+----+-------------------+-------------------------+-------------------------+
| 1  | The First Client  | 2012-01-13 12:25:22 UTC | 2012-01-13 12:25:22 UTC |
| 2  | The Second Client | 2012-01-13 12:25:31 UTC | 2012-01-13 12:25:31 UTC |
+----+-------------------+-------------------------+-------------------------+
2 rows in set

CSS框架 Elements

实际上大家对“CSS 框架(CSS Framework)”都并不陌生,CSS框架将帮助我们提高开发效率,并获得更好的浏览器兼容性。

参考:

在这儿分享一个轻量级的 CSS 框架 Elements。


项目地址:

特点:

  1. 重置了浏览器默认的样式属性,您含有图片的链接将不再会有丑陋的蓝色边框了。
  2. 在外部链接旁增加指示图标(如下图)。
  3. 加入了Prototype库(一个 JavaScript 库,提供完整的 Ajax 框架及其他工具)。
  4. 加入了Lightbox功能(点击这里查看官方功能演示,请点击该页的图片)。
  5. 未定义网格布局结构(grid structure)。

excellent-css-fireworks-01-01

大小:

  • 约46K(v2版本)。

文件结构:

  • [elements_v2] -> 主文件夹,包含了框架所需的所有文件。
    • [clientFiles] -> 在合作过程中,客户会提供一些文件给你们。比如相关的协议、工作的范围、时间的安排,或者其他的注意事项。这些东西都可以放在这个文件夹中。
    • [concepts] -> 用于放置一些想法或初稿。
    • [copy] -> 用于放置您或客户为网站写的副本。
    • [css] -> 放置CSS文件。
      • externalLinks.css -> 这是控制外部链接图标的css文件,同时还会给PDF文件、email地址加上相应的图标。使用时需将这个文件打开,并替换掉文件中已经设置的默认域名。
      • global.css -> 这是主CSS文件,您可以将自己编写的CSS存入这个文件。里面有一些预先定义好的选择器和一些简单的结构。
      • lightbox.css -> 这是lightbox的相关文件,最好不要修改。
      • reset.css -> 帮助您重置浏览器的默认设置,去掉了多余的margin、padding、border、outline。这可以帮助您的页面在不同的浏览器下显示一致。
    • [images] -> 放置图片的文件夹。
      • [elementsImages] -> 这个文件夹放置了外部链接的图标。
      • [lightbox] -> 这个文件夹属于lightbox的相关图片。
      • [nav] -> 你可以在这里放置导航栏的相关图片。
    • [inc] -> 放置PHP includes或者PHP scripts的地方。
    • [js] -> 放置JavaScript文件。
    • [rawPNG] -> 这里可以放入没有压缩过的PNG图片,保存这些未压缩的图片可以方便未来的修改,避免图片质量损失。压缩过的PNG可以放到images文件夹内。
    • index.html -> 这个文件中包含了需要引用的文件头。里面还有些常用的元素、页头、主体内容、页脚。

启示:

  • 作者将文件非常精细地分门别类(尤其是图片的放置非常讲究),这是个好习惯。
  • 网格布局会给我们带来方便,但也容易开发丧失部分的灵活性,这个框架没有加入网格布局。

修复 IE6 中 PNG 图片透明度显示故障

Windows 下,IE6及其更早版本都无法正常地解析PNG图片的透明度,这让人伤透了脑筋。很多人选择干脆放弃 PNG 透明图片,被迫用低品质的 gif 图像。

下面介绍利用 JavaScript 修复透明 PNG 的方法,痛苦可以暂时解决(IE6 一天不死痛苦一天不除)。

修复前后对比图片

您可以点击这里下载pngfix.js(右键->目标另存为),并将其放入首页所在的文件夹中。

再将以上代码插入</head>标签之前。

微软已经在 IE7 及之后的版本中修复了这个错误。其他浏览器像 Firefox、Safari、Opera、Google Chrome 经测试都没有这个故障。

参考资料:The PNG problem in Windows Internet Explorer

新域名 xMarco.info

经过两天的奋斗和抗战,终于在昨天下午成功在 GoDaddy 买到了 xMarco.info。

GoDaddy 的默认DNS服务器没有乱七八糟的限制。以前在新网买的域名很烦,解析设置生效慢,而且经常会自动跳转到他们的网页上(广告),实在难以忍受。

在 GoDaddy 买还很便宜,这个域名一共才花费了我 1.19USD,合人民币也就不到10块钱。但第二年续费就需要9.9USD了,不过也还算挺便宜的了。

这个域名会长期使用的,不过到底用哪里的空间就成了个问题。Blogspot 大陆地区是无法访问的,只能让它 FTP 发布到大陆的空间。

另外,购买这个域名的时候需要使用 PayPal,注册和信用卡认证都相当麻烦,而且有很多条框限制,帐户很容易被限制,然后要求提交很多证明材料。我就碰上了,主要是因为使用了一些代理服务器软件登陆,系统提示发现我在其他地区登陆过,所以就冻结了,花了我一下午的时间递交材料和口头解释才得以恢复,最终成功付款。另外,联系 PayPal 客服超级不方便,需要在网页上写信,而他们会通过 email 进行回复,但如果你第二次给他们写信的话,回复邮件的客服有百分之九十九的可能不是刚才那个,对你的情况很不了解,沟通起来有极大的障碍。

最后还提到一点,需要使用 PayPal 的朋友需要有国际信用卡,工行的国际卡客户还需要联系95588申请开通无卡网上交易业务,用完之后最好关闭,但关闭这项功能后也会造成帐户冻结,需要关闭前别忘注销 PayPal 帐户。

在Ubuntu上利用Mac4Lin实现MacOS效果

Mac风格的桌面 以及Dock

Mac风格的桌面 以及Dock

 

使用compiz实现的3D桌面效果

使用compiz实现的3D桌面效果

 

轻触屏幕左上角 即可显示四个工作区域

轻触屏幕左上角 即可显示四个工作区域

 

轻触屏幕右上角 将当前工作去执行的文件平铺展示 便于选取

轻触屏幕右上角 将当前工作区文件平铺展示 便于选取

这些效果看上去都还不错,但感觉还是太花哨了,最后还是换上了最原始的主题,当然那也不错。3D桌面体验结束!

Posted in OS

Apt 使用参考

apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package 安装包
sudo apt-get install package – - reinstall 重新安装包
sudo apt-get -f install 强制安装
sudo apt-get remove package 删除包
sudo apt-get remove package – - purge 删除包,包括删除配置文件等
sudo apt-get autoremove 自动删除不需要的包
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解使用依赖
apt-cache rdepends package 了解某个具体的依赖
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理下载文件的存档
sudo apt-get check 检查是否有损坏的依赖

备注:package 为软件包名称。

Posted in OS

在Ubuntu7.10中安装RealPlayer

将文件RealPlayer10GOLD.bin保存到主文件夹中,即/home/[yourusername]文件夹
下。
然后打开终端,进行如下操作:
$chmod +x RealPlayer10GOLD.bin
$sudo ./RealPlayer10GOLD.bin
当终端显示

Welcome to the RealPlayer (10.0.8.805) Setup for UNIX
Setup will help you get RealPlayer running on your computer.
Press [Enter] to continue…

时按下回车键,进入下一步:

Enter the complete path to the directory where you want
RealPlayer to be installed. You must specify the full
pathname of the directory and have write privileges to
the chosen directory.
Directory: [/home/shixinyu/RealPlayer]:

这里默认安装到用户的主文件夹下的RealPlayer目录下,如果你想要安装到别处,
就在此处输入路径,否则直接回车即可。

You have selected the following RealPlayer configuration:

Destination: /home/shixinyu/RealPlayer

Enter [F]inish to begin copying files, or [P]revious to go
back to the previous prompts: [F]: F

安装程序会提示最后确定信息,如果都确定了,按下F键后回车。
当提示

Copying RealPlayer files…configure system-wide symbolic links? [Y/n]:

时按下Y键回车即可,后面基本上就没有需要用户操作的地方了,通常到这里基本
上就安装好了,你可以到”应用程序,影音”下找到RealPlayer10来运行了,首次运
行会有一段安装协议需要同意。

注:如果在跟着上述步骤完成安装操作之后到应用程序菜单下的”影音”中单击
RealPlayer无反应,并且你的Ubuntu安装的是SCIM输入法,那么很可能是SCIM与
RealPlayer的冲突,你还需要进行下面操作:
$sudo gedit /home/[yourid]/RealPlayer/realplay \\[yourid]指你的主文件夹

在打开的文本编辑器的首行添加下面一行
export GTK_IM_MODULE=xim

之后保存文本编辑器,然后再次执行RealPlayer应该就正常了。

不过貌似在7.10里在安装的时候就:
….libstdc++.so.5: cannot open shared object file: No such file or
directory
很明显。。。。没有这个库了,7.10的是版本6- -!
那就安装:
sudo apt-get install libstdc++5
一切搞定 :-)

Posted in OS

Pidgin

曾经在 Ubuntu 中使用过 GAIM,这是一款集成了众多即时通讯软件的小工具,大小在10M左右。今天忽然想到,准备安装,却发现已经更名成了 Pidgin,大家如果希望尝试可以点击这里下载。

一下是他可以支持的IM软件:

  • AIM
  • Bonjour
  • Gadu-Gadu
  • Google Talk
  • Groupwise
  • ICQ
  • IRC
  • MSN
  • MySpaceIM
  • QQ
  • SILC
  • SIMPLE
  • Sametime
  • XMPP
  • Yahoo!
  • Zephyr