分类 生活随笔 下的文章

what's heros say?

风暴之灵:Hunger is the best sauce. 饥饿是最好的调味品。

黑暗游侠:I am here, as always. 我一直都在。My bow is ready.箭已上弦。 Where shall my blood be spilt. 我应该为谁流血。 Will this ever end? 永无终结。

变体精灵:Fall like the leaves, in fall. 像秋天的叶子般凋零吧。

地卜师:The calm, before the storm. 暴风雨前的宁静。

幽鬼:Justice will be served! 公正终将得以伸张。

流浪剑客:I must feast on souls. 欢迎参加这场灵魂的盛宴。

仙女龙:The restless dead await. 无尽的死亡在等待。

鱼人守卫:Look before you leap. 三思而后行。

食尸鬼:History repeats itself. 历史会重演。

痛苦女王:Oh, that’s naughty. 哦~你真坏。

海军上将:I live to serve. I live to serve all believers. 我为服务信徒而生。

灵魂守卫:Easily. 放松。 Is that all? 仅此而已? Hardly a challenge. 轻而易举。 I'm blind but not deaf. 我失明,但仍能听见。

蛇发女妖:I stand ready. 我准备好了。 Time is short, mortal. 凡人,你的时间不多了。

娜迦海妖:My soul is yours. 我的灵魂是你的。

幻影长矛手:Taste the fury of the Warsong! 尝尝战歌氏的怒火吧!

地精修补匠:I'm all geared up. 我武装好了。

斧王:I came from the darkness, you son of a bitch! 我来自黑暗,你这***的。

炼金术士:Care for a cocktail? 想要鸡尾酒吗? Don't rush me. 不要催我。

死亡先知:You call to me? 你在呼唤我? If that is your wish. 如果那是你的意愿。

地狱领主:I am the darkness! 我就是黑暗! As you order! 随时候命!

兽王:I hear the call of the wild. 我听到了大自然的呼唤。 What lies before me? 前面是什么?

影魔:You’re’ere I live. 你来了,我便得到了生命。 Fire away. 退下。 Your soul is mine. 你的灵魂属于我。

地穴刺客:Make your choice. 做出选择吧。 The time is now! 是时候了!

德鲁伊:I’m awake, I’m awake! 我醒来了! Our time is short! 时间紧迫!

敌法师:I'm blind not deaf. 我失明,但仍能听见。 We must act! 我们必须行动了! At last. 终于来了。 Your blood is mine. 你的血是我的。 Run for your life. 逃命去吧。 At last, we should have revenge. 最终,我们要报仇了。

屠夫:Us hear and obey! 我们听从命令! What we do? 要我们做什么?(另有DotA唯一的全图吼声:Fresh meat!好新鲜的肉!)

死灵法师:The shadows beckon! 阴影在召唤! The restless dead await! 无尽的死亡在等待!

暗夜魔王:The night beckons! 黑夜在召唤! What is it now? 现在呢?

巫妖:Direct me! 请指示! So be it! 正是如此! My talent are yours. 运用我的智慧吧。

秀逗魔导师:Do you require aid, human? 需要帮助吗,人类? Help me, help you. 帮助我就是帮助你。 What a good idea. 好主意。

哥布林工程师:Oh my baby! 哦,我的孩子。

光之守卫:Well? 什么? What is it now? 现在是什么样?****! 妈的!(大法真粗俗…)

剑圣:I am yours! 我是你的! I hear and obey! 我听从命令!

撼地神牛:Death to the enemy! 部落的敌人去死吧! Oh no. 哦,不。 May my ancestors watch over me! 我的祖先在看着我!

元素法师:Child’s play. 小儿科。

复仇之魂:For the Lich King! 为了巫妖王!

隐形刺客:Delicious. 美味。

矮人火枪手:Locked and loaded. 上膛完毕。 Fire! 开火!

混沌骑士:Prefect. 完美。

圣骑士:Future is ours. 未来是我们的。

关于libmemcached-1.0.18在mac osx下编译出错的问题

  源码编译libmemcached-1.0.18时,configure可以通过,但是在make的时候出现了以下的错误:

clients/memflush.cc:42:19: error: comparison between pointer and integer ('char *' and 'int')
  if (opt_servers == false)
      ~~~~~~~~~~~ ^  ~~~~~
clients/memflush.cc:51:21: error: comparison between pointer and integer ('char *' and 'int')
    if (opt_servers == false)
        ~~~~~~~~~~~ ^  ~~~~~
2 errors generated.
make[1]: *** [clients/memflush.o] Error 1
make: *** [all] Error 2

  意思就是在clients/memflush.cc的42和51行的if条件中,把指针和整形进行了比较。所以改起来也不麻烦,就是把这两行的false改成NULL就可以了。

总结忠告(转)

  展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告

  走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们。

  1. 自己的户口档案、养老保险、医疗保险、住房公积金一定要保管好。
    由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期间跳来跳去,甚至是城市都换过3个。还好户口没丢掉,其他都已经是乱了,好几个城市里,都有交过三金,甚至是一个程序的2个区里交的都有,那些东西,10年后,会变得很重要。你买房子若有公积金,可以取出来,贷款利率也会比较低一些,有孩子了,还需要上学,生病了还需要医疗保险。
    特别是买房子时,你要商业贷款与公积金贷款的利率差别还是很大,有可能会有10万的差距。你平时都注意这些,会给你带来的损失会最小,例如每个月缴纳300元的公积金,公司也缴纳300元,你一个月能存下来600元,一年就是7200元,10年就是72000元。我以前都忽视了这些,到我需要买房子时,公积金里可能只有几千元,10年很快就过去了,结果我没能存下来多少公积金,医疗保险,养老金等更别提了,都已经稀里糊涂了,这些损失10年累加起来,是很庞大的数字,大家要注意,跳槽换工作时也要保护好自身的利益,现在房价很贵,你可能是跟我一样,大山里出来打拼的娃子,家里也没有丰厚的积蓄,只有靠自己拼搏,买房子是人生的一件大事,等你到了10年,才想到这个事情,已经晚了,特别是孩子要上学,上幼儿园等,需要户口啥的都要齐全。

  2. 不要轻易换笔记本电脑,不要跟潮流,不要买过多的电子产品,不要过于频繁的更换手机。
    这方面我的经验教训也是惨痛的。我大概前后购买过5-6个笔记本,以前的都是1万多元一台,最近买的是一台是1万多给女朋友的,自己买了一台是7500元左右,手机大概换过接近10个了,这些钱加起来也足够有10万以上了,你可能一不小心就购买了这些电子产品,但是时间长了,你一回过头来想想,你为什么赚得也不少,但是为什么还是那么穷,是因为你购买这些电子产品花费了过多的金钱了,平时笔记本啥的贵重物品要保护好,我一个同事不小心丢了2台笔记本电脑,接近2万的损失啊,你净赚2万,不是那么容易的,这个窟窿不是开玩笑的,我曾经也被人偷了一个崭新的笔记本,损失1.5万左右,更糟糕的是最新的代码也丢被偷了。

  3. 这年代外语、学历、职称、驾驶证还是蛮重要的。
    想找高薪,外资企业是正确的选择,在同样的打工里,外资企业的收入普遍是高的,我就想不明白,我们的赚钱能力怎么就比不过人家了,社会不断发展,将来可能去外国就像串门一样了,也说不定的,外语好将来的就业机会也会更多更广一些。
    学历并不代表啥,但是学历也是敲门砖,例如有300个应聘者,那至少重点本科以下的,统统不看了,因为实在是来不及看了,你再厉害也被挡在机会的门外了,同样有时候你想改行什么的,职称也很重要,最起码评个中级职称,说不定还有机会能进入大学或者政府部门还是有可能性。
    若有充裕的时间,应该把驾驶证考了,因为你越到后面越忙与工作家庭,没机会学车了也说不定的,平时也别光顾拼命工作,工作10年后你才发现,原来身边的人都至少硕士学历了,你被社会自动淘汰了,我现在就有这个感觉,虽然我带过很多硕士,他们的就业机会比我还好,经常能进入名牌企业,我也一直进不去。

  4. 不要谈过多的女朋友,谈女朋友要看准,下手要稳准狠。
    我谈过2个女朋友,平均每个女朋友身上的开支前后大概会有10万左右,还好我不用谈第3个女朋友了,若投资失误,那也是很残忍的,谈女朋友也会消耗很多时间精力、还会消耗很多金钱,实话的讲的确是这样的,人家女孩子也值钱啊,凭什么就那么轻易的跟你啊,我跟第一个朋友分手时,我的生活至少是倒退了3-4年,一切从零开始,一切从头开始,我劝大家谈女朋友是人生最大的一笔买卖,投资失误会有惨痛的后果,不仅仅是金钱上的损失,更会有精神、心灵上的沉重打击,大家要学会珍惜女朋友,要学会哄好女朋友,让老婆开心每一天,虽然鱼儿上钩了,不用再下鱼饵了,偶尔也别忘记放点米,这个鱼要是脱钩了,那不是开玩笑的。

  5. 工作不要更换得太过于频繁,选好了行业方向最好别更换太频繁。
    换工作,换行业方向,就像熊掰苞米一样的道理,有时候是丢了芝麻捡西瓜,有时候是丢了西瓜捡芝麻,这个道理我就不多讲了,大家都应该能明白的。

  6. 要对身边的人好,要得到老板的信任、同事的认可及支持、珍惜良好的工作环境。
    有个朋友的QQ名字很有意思,“只爱陌生人”,陌生人是很有意思,但是最关键时刻,还是需要靠非陌生人,你每天跟同事一起生活,要维系好身边的人。你的成功与失败,往往是你身边的30-40个人决定的。你就是世界首富,他身边也是那么不超过100个人的在左右着他的生活,当你工作10年了,没一个老板信任你,没几个要好的同事朋友,那你惨了,你在这个世界上已经是很孤单了,你的收入,其实大多是来自这些身边的朋友给你介绍的生意,不大会网上掉几个馅饼的。
    现在你身边的人有可能在不久的将来,给你提供很多好机会。

  7. 钱很重要,但是生活质量比钱还重要,工作是很重要,但是家人比工作还重要。
    钱不是万能的,但是没钱是万万不能的。钱赚了,身体夸了,全送给医院了,钱赚了,身心疲惫了,人活着为了啥?不就为了开开心心生活嘛?工作重要,但是失去了家人的爱,失去了女朋友,失去了老婆孩子,那这个工作有啥用了?工作很容易就换了,家人是换不了的,老婆不是想换就换的,孩子不是想换就换的,连自己的家庭都不负责的人,怎么可能对公司负责呢?我一直是这个观念,来面试时觉得工作更重要的,我们一般不录取的,那太假了,或者太不懂事了。

  8. 工作累了,也别太贪玩,有时候还是需要多想想如何才能赚钱。
    时间一晃就过去了,工作累了是可以适当放松,但是别太贪玩,10年很容易就过去了,10年后你要买房子,要娶老婆,要买车子,要生娃娃,身体也会变得脆弱一些,需要良好的生活习惯,也经不起通宵了,通宵一次,你要低迷好几天才能缓过劲儿来,跟20刚出头完全不一样了,用钱的地方多了去了,父母也会变得更老一些,可能也需要你的照顾,整个家子都指望你赚钱,别到了这个时候,你才意识到赚钱是那么的重要,更何况现在城市的房价,动不动就是100万,加上按揭的利息,你很可能需要支付150万。还可能需要装修,买车子。可能你身上的压力是200万。别觉得谈钱就俗,你要学会赚钱,要有个需要赚钱的良好意识,当然你出身富裕家庭,就不用考虑这些因素了。

  9. 每天一点点进步,每月一点点积累,要敬业要爱业,我们给别人提供的也是服务。
    总有一天,你也会有累的时候,你也会有老的时候,这时候,你要靠啥呢?就要靠你平时的积累,你10年的积累,可以打倒很多竞争对手,他们再厉害,再怎么样,也很难抵得过你10年的积累,特别是后面5-10年的积累,成果会很明显,前面的1-5年,算是做软件的入门吧,除非你有高人指点,那可能2-3年就可以修成正果,软件在将来还是会值钱的,以为生活会越来越智能化,越来越数字化,软件的需求还是很有前途,最起码未来的10-20年里不用太担心失业问题了。

  10. 对程序员来讲,开发思想、架构、代码就是财富,别老丢弃你的劳动成果,要学会保护你的劳动成果。
    我大概7-8年前的代码都在手上,经常改进来改进去,维护来维护去,在一定的程度上,让我生活轻松了不少,因为我不用什么都从头来过,我只要痛苦一次,以后就要反复重复利用,软件的价值在于重复利用,而不是每个东西,都从头开发,那永远也是辛苦的程序员,这个生活质量就别提了,不管自己的代码丑还是拿不出手,要学会精心维护,每天改进一点点,每个月一个小进步,每年一个大进步,多年的积累是宝贵的,这个早晚也会给你带来丰厚的收益。

  11. 当程序员要防止原地踏步,不是工作年限长了,经验就丰富了,能力就强了,年纪越大工作越难找。
    我有一个朋友跟我开玩笑,工作5年的人,可能能力差距会很大,为什么呢?因为第一年他们干的事情都是一样的,都写程序了,2个人可能由于价值观不一样,5年后差距会很大,甚至是大到无法追赶的程度,为啥?因为还有机会的因素在里面,有的人干了5年,还是在原地踏步,天天只会写那些添加、删除、修改的代码。那你得注意了,需要不断的提高自己,才是硬道理。例如你会SQLServer,那要试着学习Oracle, 你是做C/S的,那得需要提高到B/S的,你是做单机软件的,那得需要提高到网络软件,你只关注自己的工作的,需要学会管理,关心他人的工作。你是当程序员的,要试着提高当项目经理、部门经理,公司的总监等等,人有野心有目标才会不断进步,最俗的为了多赚钱,提高工作职位工作岗位,工作单位,也是可以理解的。
    年纪越大工作越难找,例如3-4千的工作是随便找找,玩一样,但是你30过后,最起码要找月薪上1万的工作,这样的工作是机会也少,一般小公司也给不起,还得找个好公司才可以,好公司又不是天天招聘人,天天缺好的工作岗位,说不好听点儿,小公司的老板才赚多少啊?他来钱也很不容易的,小池塘就不好容得下大鲨鱼了。

  12. 当创业的收入比打工还少时,那就别创业,要找比自己能力强的人创业,你不会吃亏。
    创业的收入,比打工还少,那就是瞎扯蛋,恶搞。创业的真正意思并不是要你去吃苦没钱赚,那是忽悠无知的人的。当你创业时的收入,比打工还多,那你可以考虑创业,没有工资什么的,股份啥的,都是瞎扯蛋。
    不要跟自己能力还弱的人一起创业,那损失最大的,很可能就是你,要创业,也要找比自己强的人一起创业,最起码赚不到钱,还能学到不少。不会有过多的损失。别热血一沸腾就创业了,创业了,也别烧自己的钱,家人的钱,那是很不抗烧的,没几下几十万就烧干了。
    其实打工,也是创业的开始,每个月都能拿到钱,还可以学到知识,什么公司的股份都是空话,没几个小公司能成功,开起来了也走不了3年就分家了,都忽悠小孩子玩的,除非真的有科技含量或者是客户资源的,否则股份是一文钱不值的,就算创业每个月也按时拿工资才是硬道理。

  13. 未来的生活节奏会更快,生活压力会更大,竞争会更激烈,社会服务体系会更完善。 在未来,我们享受良好的服务的同时,也会为别人提供更良好的服务,需要在技能上还是服务质量上的要求会更高更严格。平时要注意提高自己,不要被时代淘汰掉,我从小的朋友,一波又一波被社会无情的淘汰了,很小的时候,我出生在大草原与大山的交界处,我小时候的玩伴,还在大山里,我跟着家人杀出来了,我小学、中学、大学、工作上的、这10年,我一直很坚强的拼搏下来,很不容易的在杭州立住脚了,说实话,参加工作后的十年,也是不断拼搏,不断提高的十年。

git 的使用(转)

Git 是用于Linux 内核开发的版本控制工具。与常用的CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。

Ubuntu上可以在“system -> 系统管理 -> 新立得软件包管理器”中搜索到git-core, 这个下载下来即可很方便的开始使用git了。

下面从用户角度分两部分讲述,首先是单个用户独立使用git,其次是多个用户一起使用git进行团队开发。

一:

单个用户

先在自己的 /home/chenchi/ 目录下开始操作

$ mkdir gittest

$ cd gittest

$ git init

然后会自动输出类似的语句 :

Initialized empty Git repository in /home/chenchi/testgit/.git/

这时候我们输入下面的命令

$ ls  -a

可以看到当前目录下创建了一个隐藏的 .git 目录,它就是所谓的Git 仓库,不过现在仓库还是空的。另外当前目录也不再是普通的文档目录了,今后我们将其称为工作树。有兴趣的话,可以先到.git 目录下看看都有哪些文件。

一个叫 HEAD 的文件,我们现在来查看一下它的内容:

$ cat .git/HEAD

现在 HEAD 的内容应该是这样:

ref: refs/heads/master

我们可以看到,HEAD 文件中的内容其实只是包含了一个索引信息,并且,这个索引将总是指向你的项目中的当前开发分支。

一个叫 objects 的子目录,它包含了你的项目中的所有对象,我们不必直接地了解到这些对象内容,我们应该关心是存放在这些对象中的项目的数据。

一个叫 refs 的子目录,它用来保存指向对象的索引。

具体地说,子目录 refs 包含着两个子目录叫 heads 和 tags,就像他们的名字所表达的意味一样:他们存放了不同的开发分支的头的索引, 或者是你用来标定版本的标签的索引。

请注意:master 是默认的分支,这也是为什么 .git/HEAD 创建的时候就指向 master 的原因,尽管目前它其实并不存在。 git 将假设你会在 master 上开始并展开你以后的工作,除非你自己创建你自己的分支。

另外,这只是一个约定俗成的习惯而已,实际上你可以将你的工作分支叫任何名字,而不必在版本库中一定要有一个叫 master 的分支,尽管很多 git 工具都认为 master 分支是存在的。

现在已经创建好了一个 git 版本库,但是它是空的,还不能做任何事情,下一步就是怎么向版本库植入数据了。

为了简明起见,我们创建两个文件作为练习:

$ echo "Hello world" > hello

$ echo "Silly example" > example

这样在当前的testgit目录下就生成了两个文件hello和example,如果我们想将它们加入到库中,该怎么做呢?

首先利用 git add 命令将这两个文件加入到版本库文件索引(一个临时的存储区域,Git 称该区域为索引,如果不理解,先跳过去)当中:

$ git add hello example

现在让我们看看版本库的状态:

$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#
#       new file: example
#       new file: hello
#

我们能看到 git 的状态提示。提示信息告诉我们版本库中加入了两个新的文件,并且 git 提示我们提交这些文件,我们可以通过 git-commit 命令来提交,这里我们有两种输入方式,

(1)带参数m

$ git commit -m "Initial commit of gittest reposistory"

//引号中的内容就是类似于SVN中每次提交代码前,都要填写的message信息,以便于以后自己或者别人能明白你这次更改的原因,及相关改动的信息。

(2)不带参数m

$ git commit

//系统会自动调用一个叫GNU nano的编辑器,来让你输入与上面类似的信息,在编辑器的下面会出现^G ^X ^O ^J等等,^表示ctrl键,所以他们分别是“ctrl键+G”(获取帮助),“ctrl键+X”(Exit 退出),“ctrl键+O”(WriteOut 写保存),“ctrl键+J”(Justify),具体就不详述了。

Created initial commit 7ffe128: Initial commit of gittest reposistory
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 example
create mode 100644 hello

来看看自己的劳动成果吧:

$ git  log

commit 7ffe1285bda6febfa8d24f8d366ad97c97f3b550
Author: chenchi << span="">[email protected]>
Date: Tue Feb 24 17:54:46 2009 +0800
Initial commit of gittest reposistory

这里我们已经知道如何创建版本库,并向库中添加数据。

再往下走:

$ vim hello

添加如下语句:

today is Tuesday, 20090224, rain.
Are you happy?

利用git diff 查看改了什么:

$ git diff            //注意:该命令只比较已经在index索引中存在的文件,也即如果是一个新加的文件。git diff是不会产生比较的。

diff --git a/hello b/hello
index 802992c..e042b07 100644
--- a/hello
+++ b/hello
@@ -1 +1,4 @@
 Hello world
+
+today is Tuesday, 20090224, rain.
+Are you happy?

现在让我们看看版本库的状态:

$ git status
# On branch master          //表示master分支
#   (use "git add ..." to update what will be committed)
#
#       modified:   hello
#
no changes added to commit (use "git add" and/or "git commit -a")

它表示hello文件已经被更改了,但没有更新(update)。

$ git add hello
$ git diff                                //此时已经没有不同的内容了
$ git status              //再看看版本库状态,有什么区别呢?
# On branch master                 //表示master分支
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   hello
#

它表示hello文件已经被更改了,但没有提交(committed)到本地的仓库中

$ git commit -m "1---add date to hello file"

这里我们其实已经完成了又一次的更改和提交了。

二:多个用户,团队开发

实际开发中,我们通常是直接用别人的仓库来进行进一步的开发,那么下面的流程就是必须要看的了:

因为是团队合作,所以每个人在使用git时,要先进行类似的配置。

$ git config --global user.name "chenchi"$ git config --global user.email "[email protected]"

这样的配置文件也可以在/home/chenchi/.gitconfig中看到。

回到自己的 /home/chenchi/ 目录下

$ mkdir project
$ cd  project

首先从服务器上克隆(clone出完整的工作树到本地):

$ git [email protected]:/home/chenchi/git1   (内网用户)
$ git clone  ssh://[email protected]:9092/home/chenchi/git1   
(外网用户)
Initialized empty Git repository in /home/chenchi/project/git1/.git/[email protected]'s password:    输入服务器上chenchi用户的密码(123456),然后输出下面的内容
remote: Counting objects: 94, done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 94 (delta 12), reused 0 (delta 0)
Receiving objects: 100% (94/94), 7.91 KiB, done.
Resolving deltas: 100% (12/12), done.

注意:
1:git clone 命令是将别的仓库克隆(clone)过来,后面是别人仓库的源地址,你可以直接用上面的地址试试。这时如果一切顺利,系统会自动在你的当前目录下建立一个git1的目录;如果你想弄一个linux的源代码来玩玩,可以试试这个:

$ git-clone  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  linux-2.6

2:因为git clone在默认时用的是ssh协议,所以用git clone前应该确保我们当前机器机器上已经安装了openssh,详见wiki中: 开发环境 ------> Openssh服务 。

这样在当前目录中就生产了一个git1的工作树,它的内容和服务器中是一样的。你可以在自己的机器上进行各种更改了,具体用法和前面单机时类似(add -> commit ->OK )。只是当你想将自己的工作放到服务器中时(也就是SVN中的提交代码),建议按如下步骤:

$ git  pull //先更新本地代码,使其是服务器中最新的代码,防止提交时有冲突,如果没有,继续下一步;如果有冲突,则先在编辑器中修改掉冲突部分,再继续下面的步骤
$ git  push  //将本地的更改最后push到服务器上,使服务器上也同步保留了自己的更改

这里一次代码更改并最后提交就完成了。

这个时候在服务器端可以用 git log 来看看是否有更新,同时可以通过在服务器端输入
git checkout 将Git仓库中更新的内容导到当前工作目录中,显现出来。

当服务器上有新的代码(其他人git push 上去的),而某个开发者在本地忘记了git pull,直接git push 时,会出现类似下面的错误:

[email protected]:~/chenchi/git1/drv-pxa310$ git [email protected]'s password:
 To ssh://210.22.155.236:9092/home/chenchi/git1
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'ssh://210.22.155.236:9092/home/chenchi/git1'

这时需要git pull 更新本地代码,系统会在这个过程中自动的进行merger操作,如果本地更改和服务器上最新代码没有冲突,则merger操作自动完成,如果有冲突,则出现类似下面的输出:

[email protected]:~/chenchi/git1/drv-pxa310$ git [email protected]'s password:
 remote: Counting objects: 15, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 12 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (12/12), done.
From ssh://210.22.155.236:9092/home/chenchi/git1
   a3803c8..9ceb8ee  master     -> origin/master
Auto-merged drv-pxa310/t3
CONFLICT (content): Merge conflict in drv-pxa310/t3
Automatic merge failed; fix conflicts and then commit the result.

这时需要我们自己手动更改文件,再提交到本地仓库,最后 git push 到服务器上去。
如果在push过程中有类似下面的错误:

[email protected]:~/chenchi/git1/drv-pxa310$ git [email protected]'s password:
 Counting objects: 14, done.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 755 bytes, done.
Total 8 (delta 4), reused 0 (delta 0)
error: unable to create temporary sha1 filename ./objects/ca: File exists
fatal: failed to write object
error: unpack failed: unpacker exited with error code
To ssh://210.22.155.236:9092/home/chenchi/git1
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'ssh://210.22.155.236:9092/home/chenchi/git1'

三:库的逆转与恢复

-- git-reset
-- git-checkout

库的逆转与恢复除了用来进行一些废弃的研发代码的重置外,还有一个重要的作用。比如我们从远程clone了一个代码库,在本地开发后,准备提交回远程。但是本地代码库在开发时,有功能性的commit,也有出于备份目的的commit等等。总之,commit的日志中有大量无用log,我们并不想把这些log在提交回远程时也提交到库中。 因此,就要用到git-reset。

Git-reset的概念比较复杂。它的命令形式:git-reset [--mixed | --soft | --hard] []
命令的选项:

--mixed 这个是默认的选项。 如

$ git reset --mixed dev1^ / /dev1^ 其实就是某个具体的commit ID,也就是那一串数字,如 a3803c862eb73b3a7a61b356e3fb5c7e95a17bfd

它的作用仅是重置分支状态到dev1^, 但是却不改变任何工作文件的内容。即,从dev1^到dev1的所有文件变化都保留了,但是dev1^到dev1之间的所有commit日志都被清除了,而且,发生变化的文件内容也没有通过git-add标识,如果您要重新commit,还需要对变化的文件做一次git-add。简单点说就是:将前面几次log信息清除,而将相应的更改一次性进行 add --> commit。 这样,add --> commit后,就会得到了一份非常干净的提交记录。

$ git   reset   --mixed    7fde43204 //相当于做了git-reset –mixed,后,又对变化的文件做了git-add。如果用了该选项, 就可以直接commit了。

$ git   reset   --hard    7fde43204 //这个命令就会导致所有信息的回退, 包括文件内容。 一般只有在重置废弃代码时,才用它。 执行后,文件内容也无法恢复回来了。慎用。

当我们改了大量的文件以后,既没有 git add 也没有git commit,这时我们想将其中部分文件的更改撤销掉,即想做SVN中的revert类似操作,这时可以:
$ git checkout HEAD -- filename1 filename2 filename3 dir1/filename4 dir1/filename4

四 .Git pull、 push 操作无需输密码的方法编辑本段回目录

在本地使用git与服务器进行pull、push操作时,每次都要输入密码,比较麻烦,我们可以用ssh密钥来进行验证。这样git使用过程中ssh就会自动登录而无需输入密码。方法如下:

首先用自己账号登录到server上,输入ssh-keygen -t rsa

[email protected]:~$ ssh-keygen -t rsaGenerating public/private rsa key pair.
Enter file in which to save the key (/home/chenchi/.ssh/id_rsa):
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /home/chenchi/.ssh/id_rsa.
Your public key has been saved in /home/chenchi/.ssh/id_rsa.pub.
The key fingerprint is:
79:8a:78:8f:c6:12:12:3c:fd:40:84:7b:e3:fc:60:[email protected]
The key's randomart image is:
.........

输入ssh-keygen -t rsa后,出现各个提示,不用管,一直按回车。这样密钥对就生成完了。其中公共密钥保存在 ~/.ssh/id_rsa.pub ( ~ 表示自己账号的home目录,像我的就是/home/chenchi目录);
私有密钥保存在 ~/.ssh/id_rsa 文件中。

记录两道新浪的笔试题

1、从某个文件中获取某个单词出现的行号,并把行号写入一个文件,最后统计出现了多少行。

cat -n php.ini-development | grep cat | awk '{print $1}' >> aa.txt
cat -n php.ini-development | grep cat | awk '{print $1}' |wc -l

2、从访问日志中吧ip地址提取出来,并存入文件。

awk '{print $4}'  xxx.log |uniq -c