|
前言:从事iOS开发一年多以来,一直使用svn管理源代码。对svn的特点和弊端已经深有体会。前些天双十二前后,项目工期紧张到爆,起早贪黑的加班,可谓披星戴月,这还不止,回到家中还要疯狂的敲代码。那么问题来了,公司svn服务器是内网服务器,在家里无法访问,提交/更新代码就成了问题。跟技术总监(笔者公司为初创型小公司,直接和技术总监对话)沟通后,技术总监同意了把svn服务器改为外网服务器。但是,这并不是好的解决办法,毕竟svn服务器挂到外网上,从安全性上总是说不过去。于是乎,git成了我心中取代svn的上上策。昨天上班开会就跟CTO提出使用git管理代码的建议,他也愉快的答应了。
但是,多数人对git并没有像对svn这般了解,所以,针对于git和svn的特点和区别,我希望能够通过这篇文章拨开大家心中的疑惑。
简介
git是一款开源的分布式版本管理工具,git的诞生也是相当传奇的,由Linux之父-Linus Benedict Torvalds开发而来,当初Linus Benedict Torvalds仅仅是为了辅助Linux内核的开发才一并开发了这个至今为止世界上最快的、最简单的版本管理工具。关于这个传奇的故事,笔者就不在此赘述。
目前,git虽然很流行,但也仅仅是在国外。在国内,多数公司还在使用svn进行版本控制,不过不用担心,据笔者所知,已经有很多大公司(像BAT这样的互联网公司)开始由svn转向git。并且,越来越多的开源项目已经转移到git,很多开源网站上的代码就是git来管理的,所以git取代svn是大势所趋的。
git的特点
前面已经说过,git是一款开源的分布式版本管理工具。相对于分布式,还有一种集中式,集中式版本管理工具的杰出代表就是svn。关于svn的详细介绍,读者可以查看笔者之前写过的几篇文章:http://www.cnblogs.com/wsnb/p/4765597.html http://www.cnblogs.com/wsnb/p/4771379.html
如下两张图,可以概括分布式和集中式管理工具的架构,图(1)为分布式版本管理工具架构,图(2)为集中式管理工具架构。
我们修改或者新添加的文件起初是处于工作区,通过git add命令可以把工作区的文件移动到版本库中的暂缓区(stage)。
处在暂缓区(stage)的代码可以通过git commit -m “提交的注释” 提交到版本库中的分支(master)。
处在分支(master)中的代码可以通过git push命令push到共享版本库。
注意:只有分支中的文件才可以push到共享版本库。
git常用命令
1.初始化一个代码仓库
git init
2.如果使用git必须给git配置一个用户名和邮箱
给当前的git仓库配置一个用户名和邮箱
git config user.name “ws”
git config user.email “ws@
163.com”
配置一个全局的用户名和邮箱
git config --global user.name “ws”
git config --global user.email “ws@
163.com”
3.初始化项目
touch main.m : 创建了main.m
git add main.m : 将新添加的文件或者修改的文件添加到暂存区
git commit
-m “初始化项目”
git add . : 将所有没有被添加到暂存区或者代码仓库的文件添加到暂存区
注意:无论是新添加的文件或者修改的文件,都需要先通过add命令添加到暂存区中,之后再通过commit命令添加到本地仓库中
4.查看文件的状态 git status
红色 : 新创建的文件或者被修改的文件,没有被添加到暂存区
绿色 : 表示文件在暂存区,但是没有被添加到本地仓库中
5.给命令起别名
git config alias.st “status”
git config alias.ci “commit
-m”
git config --global alias.st “status”
6.git删除文件
git rm 文件名
7.查看版本号
git log
git reflog
git config
--global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit”
git lg
8.git的版本号是由sha1算法生成40位的哈希值
9.版本回退
git reset --hard HEAD : 回退到当前的版本
git reset --hard HEAD^ : 回退到上一个版本
git reset --hard HEAD^^ : 回退到上上个版本
git reset --hard HEAD~100 : 回退到前100版本
git reset --hard 版本号(前5位)
- 用户名和邮箱地址的作用
用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变。
每次commit都会用用户名和邮箱纪录。
github的contributions统计就是按邮箱来统计的。
- 查看用户名和邮箱地址:
$ git config user.name
$ git config user.email
- 修改用户名和邮箱地址:
$ git config --global user.name "username"
$ git config --global user.email "email"
- 每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录.
- 用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
初始化共享版本库
真实的git服务器的搭建是非常繁琐且复杂的,并且git服务器只能搭建在Linux系统上。笔者对git服务器的搭建不做介绍,日后有时间再加以补充。在此仅对共享版本库的搭建进行详细介绍。
文件夹作为共享版本库
1.创建共享版本库文件夹,然后终端进入该文件夹下执行以下命令创建一个空的共享版本库
git init --bare
2.项目经理将共享版本库的内容先下载下来,命令后面的地址即为共享版本库所在服务器的地址+路径 git clone 地址
3.添加需要忽略的文件
touch .gitignore
去github上搜索.gitignore
->Objective-C,把Objective-C中的内容粘贴到创建的.gitignore文件中(或者直接把github中的Objective-C文件下载到该目录下)。然后执行以下命令
git add .gitignore
git commit
-m “添加了需要忽略的文件”
4.项目经理初始化项目
git commit
-m “初始化项目”—>提交到本地代码仓库
5.将项目push远程仓库中
git push origin
6.当源代码管理是使用git,并且在Xcode进行多人开发的操作
注意:当使用git,项目中用到了静态库就不需要通过命令行进行添加
git版本备份
1.1.0版本开发完成,之后对1.0版本进行备份
git tag
-a weibo1.0 -m “这个是1.0版本” : 给某一个版本打上标签(weibo1.0是标签名称)
git tag : 查看所有的标签
2.需要将1.0版本的标签,push到服务器
git push origin weibo1.
0
3.继续开发2.0版本
4.发现1.0版本有bug,从标签里面clone 1.0版本,从标签创建一个fixbug分支,在分支中修复bug
git clone 共享版本库
git checkout weibo1.0(标签的名称)
git checkout -b weibo1.1fixbug(分支名称)
5.修复后的版本上传AppStore/将1.0fixbug进行备份/将1.0fixbug版本和2.0版本进行合并\
git tag -a weibo1.1 -m “这个是修复了1.0版本bug的1.1版本”
git tag
git push origin weibo1.1
将子分支中代码合并到主分支,pull—>weibo1.1fixbug—>push master—>其它同事更新
6.删除分支
git branch -r(r是远程仓库的意思,这个命令可以查看远程仓库中的分支)
git branch -r -d 分支名称
以上主要介绍了git的原理和如何用命令创建一个代码仓库,关于如何使用第三方git服务器托管代码,请见下一篇文章。 |
|
|