omiga

简单就好

Git笔记-基础

2条评论»

Git是什么?

Git是一个分布式版本控制系统(Distributed Version Control System,简称 DVCS)。

Git与svn有什么关系?

对于大多数人而言,或许对svn更为熟悉,svn属于集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS ),在CVCS中会有一个对版本进行集中管理的服务器,协同工作的人都通过客户端连接到该服务器,检出最新文件或提交更新。CVCS在协同开发中有两个比较主要的缺点:

  1. 如遇服务器宕机,整个协同工作无法进行,因为此时无法进行代码更新提交,当然也不能checkout最新代码
  2. 如果服务器数据丢失,整个版本数据也将丢失,除非刻意为版本管理服务器备份

对于这两个主要问题,DVCS都有比较好的解决方案:

首先,DVCS可以方便地在本地进行版本管理,就如同在你本地有一个版本管理服务器一样。你可以选择在合适的时候将本地版本推送到统一的版本管理服务器。

其次,DVCS每次都会提取整个代码仓库的完整镜像,即相当于对整个代码仓库进行了一次备份。这样即使版本管理服务器出现意外,也可以轻松地采用任一本地仓库恢复。结合本地版本管理功能,在远程版本管理服务器出现故障的情况下,你依然可以放心的进行工作,当远程服务器恢复工作时,再提交你的本地版本。

直接记录快照,而非差异比较

Git只关心文件数据的整体是否发生变化,而大多数其他系统则关心文件内容的具体差异,并记录这些差异。git则是更像一个微型文件系统,保存更新文件的快照,并为之创建一个索引。

CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容

CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容

Git 保存每次更新时的文件快照

Git 保存每次更新时的文件快照

如何开始?

你需要安装一个Git客户端来开始使用Git,你可以使用msysgit作为你windows上的git客户端,msysgit包含一个命令行工具Git Bash和一个gui工具Git GUI。对于习惯TortoiseSVN的同学来说,或许Git GUI太简陋了,没关系,安装完msysgit后你依然可以安装TortoiseGit,实现svn到git的平滑过渡。TortoiseGit不单独介绍,本文主要介绍通过Git Bash使用git进行版本管理,在你熟悉Git Bash后相信你对TortoiseGit也会有更深入的掌握。

安装好msysgit后,运行Git Bash,在开始所有工作之前我们需要先做一些配置,现在我们只需做一些基础配置,详细的配置后面再讲:

# 用户名
$ git config --global user.name 'omiga'
# email
$ git config --global user.email 'omiga@sample.com'
# 文本编辑器,默认vim
$ git config --global core.editor vim
# 差异分析工具
$ git config --global merge.tool vimdiff

因为每次提交git都会记录committer信息,完成上述配置后,通过cd命令进入到任意文件目录,然后使用git init命名即可初始化一个git版本库。

$ cd /d/ohmygod
$ git init

这样ohmygod目录下的任何改动都处于git版本库的管理下了。在该目录下创建一个README文件,再运行git status命令,将会看到git提示README文件处于为“Untracked files”列表中,并给出了“(use git add <file>… to include in what will be committed)”的建议。此时可以使用git add README命名将README文件加入到暂存区。

$ git add README

此时再执行git status,会看到“new file: README”的提示信息。继续执行git commit -m “create README”

$ git commit -m "create README"

这样README文件就被提交到了本地版本库,完成了一个文件从创建到提交的完整过程:

  1. git status – 查看git版本库的状态(这一步不是必须的,但是个好习惯)
  2. git add <file> – 将文件提交到暂存区(通常是在通过git status命令后,可以很清楚地看到文件的变更信息,决定哪些文件需要提交到暂存区)
  3. git commit – 提交更改(只有处于暂存区的文件会被提交),直接使用git commit命令会调用提交说明窗口。

阅读全文»

查找数组中被删除的一个元素

4条评论»

一个数组arr0,长度任意,删除其中某个元素后得到数组arr,求删除的元素

最容易想到的方法:顺序查找,两个循环

function findItem1(arr0,arr){
    /*
        arr0:原始数组
        arr: 随机去除某一个元素后的数组
    */
    if(!arr0||arr0.length<1||arr0.length-arr.length!=1) return 'error';
    if(arr0.length==1) return arr0[0];
    for(var i=0,l=arr0.length;i<l;i++){
        for(var m=0,n=arr.length;m<n&&arr0[i]!==arr[m];m++){
            if(m==n-1) return arr0[i];
        }
    }
}

最容易想到的方法一般都是效率最低的方法,发了半天呆又想到了二分查找

function findItem2(arr0,arr){
    /*
        arr0:原始数组
        arr: 随机去除某一个元素后的数组
    */
    if(!arr0||!arr||arr0.length<1||arr0.length-arr.length!=1) return 'error';
    if(arr0.length==1) return arr0[0];
    function compare(ascArr1,ascArr2){ //ascArr1.length-ascArr2.length==1
        var ci = Math.floor(ascArr1.length/2);
        if(ascArr1[ci]!==ascArr2[ci]){
            if(ci==0||ascArr1[ci-1]==ascArr2[ci-1]) return ascArr1[ci];
            else return compare(ascArr1.slice(0,ci),ascArr2.slice(0,ci));
        }else{
            if(ci==ascArr2.length-1) return ascArr1[ci+1];
            else return compare(ascArr1.slice(ci+1),ascArr2.slice(ci+1));
        }
    }
    return compare(arr0,arr);
}

暂时只想到这两种方法,应该还有更高效的方法,想到了再补充。查看本文demo

VIM插入当前时间

发表评论»

VIM有一个可以用来获取时间的内置函数:strftime

strftime({format} [, {time}]) *strftime()*

The result is a String, which is a formatted date and time, as specified by the {format} string.  The given {time} is used, or the current time if no time is given.  The accepted {format} depends on your system, thus this is not portable! See the manual page of the C function strftime() for the format.  The maximum length of the result is 80 characters. See also |localtime()| and |getftime()|.

The language can be changed with the |:language| command.

Examples:

:echo strftime(“%c”)   Sun Apr 27 11:49:23 1997

:echo strftime(“%Y %b %d %X”)   1997 Apr 27 11:53:25

:echo strftime(“%y%m%d %T”)   970427 11:53:55

:echo strftime(“%H:%M”)   11:55

:echo strftime(“%c”, getftime(“file.c”))   Show mod time of file.c

Not available on all systems.  To check use:

:if exists(“*strftime”)

  • {format}是必须的,用来指定时间的输出格式
  • {time}缺省为当前系统时间,严格来说strftime是一个格式化输出时间的函数

然后根据习惯随便定义一个映射就OK了:

imap <silent><leader>t <c-r>=strftime('%c')<cr>

另外,vim还有两个获取时间的内置函数:localtime()、getftime()

localtime() 返回本地时间距1970-01-01 08:00:00的秒数;

可以使用strftime进行格式化输出,如:

strftime('%c',localtime())

当然,它的输出结果和strftime(‘%c’)是相同的。

getftime() 返回一个文件的最后修改时间,时间也是以距1970-01-01 08:00:00的秒数返回。

如:

strftime('%c',getftime('index.html'))

更多的VIM内置函数

 

WordPress theme C32

13条评论»

WordPress theme C32

上一个theme(ND)是08年的时候做的,2年多了,一直也没换,期间也做过好几个theme,种种原因,都没有替换上来,感觉是无法超越!-_-! C32也一样,但是毕竟ND已经有了2年多了,怎么都要换换了,而且这两年中,总想要加一些东西进来,可能有插件,但是插件总还是有局限,而且我也很厌烦后台一大堆插件更新提示,所以C32所有的功能都没有依靠插件实现,随机日志、最新评论、评论、相关日志、分页、分类等,都是通过现写的C32_random_posts,C32_recent_comments,C32_comments,C32_related_posts,C32_page_nav,C32_cats这几个函数来实现的。无图片、无插件,低碳环保!

不经常做theme,每做一次就像第一次做一样,到处翻资料,为了写这几个函数,还去翻源代码,觉得wp异常强大。文件的组织,函数的命名都相当规范,以致有时候自己都能完全猜出要的函数名称,然后到源码或者codex一查果然有,节约了大量时间。

发现了很多无敌的函数和变量,比如:

部分函数或变量没有官方文档,但是可以去翻翻源码,应该问题都不大。

C32也用了几个HTML5标签和一点CSS3。opera下发表评论的表单控件很cool,placeholder属性很好用,搜索框safari下也多了一个’x'~···

分类列表增加了预览最近10篇文章的功能,其实我也想给页码加上这么个功能,暂时没时间先搁一搁。(PS:页码预览已实现!)

另外wordpress合并分类的一个小技巧:在设置->撰写选项中把某分类设置为默认分类,删除的分类文章将自动归类到默认分类下。