msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

初识git

最近看到git这个年轻的SCM(版本控制系统)逐渐流行起来了,很多知名的开源项目都纷纷转移到它的怀抱里,如我们熟知的著名linux桌面环境gnome,还有我最爱的播放器vlc等

而且网上对git的好评也是如潮水一般呀。那么,作为喜好尝鲜的我,情绪自然不会稳定了。

总想去尝试一下,看看究竟如何的好?

由于googecode不支持git,而以git著名的github,我也没有帐号.所以只能在sourceforge上小试牛刀了

以sf为例,首先进入项目页面,找到admin菜单下的feature manage下面,启用git(SourceCode Version Control),就是在它前面打个钩。其实这个时候git repository 就已经初始化好了.

这个时候,如果不想再用其他的SCM的话,把它们前面的钩去掉就可以了(前提是你已经check out了)。

接下来,就是进入members菜单,点击用户名,勾选 "Allow access to Git repository (developer access)"选项,授一下权。

ps:以上操作需要project administrator 身份.

现在,就是导入版本库了。

git 要求用户本地也要有一个版本库,然后再push到远程服务器。这一点让我很不习惯,因为我一般都是直接commit到远程repo的.

因为我在windows 平台,所以还得安装git 的win 版 --msysgit.如果IDE是visual studio 的话,可以直接下载 Git Extensions 的完整版安装,里面包含了MSysGit 和 KDiff3.

之后,进入 git bash,其实就是个MinGW环境.
现在开始初始化本地git repo.

mkdir temp cd temp git init (初始化空版本库 temp) git config user.name "temp NAME" (设置名字) git config user.email "[email protected]" (设置邮箱)

#(添加远程repo 地址.sf 是以 ssh 开头,默认repo 名字是项目unix名,可以改)
git remote add sf ssh://[email protected]/gitroot/TEMP-PRO/TEMP-PRO
git config branch.master.remote sf
git config branch.master.merge refs/heads/master

至此,本地git库建立完毕,并映射好了远程git 库.且merge以本地为主.
当然,这一切均可以通过git extension的菜单完成.

接下来,创建一个hello.c文件,push到远程repo上.

vim hello.c git add hello.c git add . git commit -a -m "this is hello.c" git push sf master #(需要输入密码,如果报 fatal: The remote end hung up unexpectedly 错,可能是ssh地址输入错误. #也有可能是没有生成对应ssh的公钥和私钥到服务器导致的.)

到这步,我已经成功向远程版本库提交了源码.

不过我很快就发现了git的一个毛病,就是无法删除以前提交的文件.
这个真是个问题,万一程序员不小心提交了一下一些私密文件(如密码、艳照之类),哪岂不是糟了!!?
尽管可以 git rm hello.c ,不过在仓库里只是标识了 "deleted",还是可以打开.
谷歌一下,终于找到了一个方案,见 git: forever remove files or folders from history,提供了个shell 脚本.
保存为 del.sh,运行 del.sh hello.c ,嘿还真删除了.
不过 push 的时候,出错了!提示

! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '/path/to/'

说需要先从服务器上pull 一下,oh ,my god...囧rz

好在我有shell权限,直接登录,定位到 /home/scm_git/t/tm/temp-pro/temp-pro,直接删除.草~

最后,给个链接《Git 中文教程》,我还是继续SVN吧.