git 使用介绍
TRANSCRIPT
Git 使用介绍
Medcl
有时候• Svn连接不上• Svn服务器挂了
–代码没法提交,那边编译不过!–没法恢复到之前版本!–分支切换成本太高!–在家网速不行签出代码老半天
Svn已死,提高效率,改用 GIT
Git下的开发场景• 1.连不上公司网络怎么办?
– 吭哧吭哧,– 完成各种功能,– feature代码照样提交– 回到公司或者网络恢复,提交
• 2.产品已经上线了,需要开发一个新的功能,花费时间较长,又不能影响其他人– 新起一个分支– 吭哧吭哧– 完成各种功能– 调试通过– 提交合并到master主干版本
• 3.重构– 小范围代码分支签出– 重构完毕– 合并到主干
什么是 Git?• 最早由 linus torwalds用来管理 linux 内核开发
• SCM• 开源( GNU GPL V2)• 速度快• 分布式–离线也能继续开发
• 非线性开发
集中式开发
分布式开发
与 SVN相比Git Svn
分布式管理 集中式管理
速度快 速度慢
控制命令多 有成熟的管理工具
擅长分支管理 不擅长分支管理
处理文件冲突很好 处理文件冲突很差
Git安装• Windows
– Msysgit• http://msysgit.github.com/
– cygwin+git+openssh– Tortoisegit
• Centos– yum install git
• Ubuntu– apt-get install git
• Mac– Tower
Git command
TortoiseGit
• http://code.google.com/p/tortoisegit/wiki/Screenshots
LET’S GIT
使用流程• 【客户端】• 生成pub文件,提供给管理员
• 【服务端】• 管理员添加相关权限信息(新建 repo)
• 【客户端】• 2.配置git的基本信息
– Name – E-mail
• 3.本地git clone• 4.开发• 5.提交• 6. PUSH
生成密钥对• $ ssh-keygen• Generating public/private rsa key pair.• Enter file in which to save the key
(/c/Users/Medcl/.ssh/id_rsa):
• $ ls• id_rsa id_rsa.pub known_hosts
Git服务器通过这些信息来识别你的身份
基本设置
• git config --global user.name “medcl” • git config --global user.email
你的信息,方便识别代码所有者
创建一个 Repository
• Repository(代码仓库)
• 1.本地新建一个代码仓库– cd project– git init .– git add .– git commit –m “initial commit”
• 2.知道远程 repo地址,复制一份 repo副本到本地– git clone git://github.com/medcl/medcl.github.com.git
在本地新建仓库,就可以开始使用 git的所有功能
协同开发同一个项目的时候
文件管理• git会管理空文件,但不会理会空目录• git commit –a – 自动添加未更新索引的文件– 未添加到 git的文件不会自动处理
• 改名– git mv
• 删档– git rm
添加文件• 自动添加目录及子目录下文件– git add .
• 添加指定文件到 git仓库中– git add <文件名 >
• 其它(查看帮助: git help add)– git add git-*.sh– git add Documentation/\*.txt
添加文件
文件状态生命周期
Git Status
• 查看本地 git仓库的状态信息git statusgit status c.txt
.gitignore
• 告诉 git那些文件不需要管–即使 git add 也不会添加这些文件
• .gitignore文件内容例子:/data/work/logs/.idea/target/out.DS_Store*.iml
确保只提交给源代码到 repo!
各种编译输出,中间文件,一定不要提交上去
提交变更
历史记录• git log
历史记录• git show HEAD• git help show• gitk –all• git log --graph
谁动了我的文件?• 查看文件里面每一行的作者和版本信息• git blame <文件名 >
撤销回退• git checkout [HEAD] 档名• git checkout master• git reset HEAD 档名– git reset SHA1:回退到指定版本– git reset HEAD~1:回退到上一个版本–变回 unstaged 或者 untracked ;不变更内容
分支• 为什么要使用分支?–重构( refactor)–开发新功能– 修复 bug
• git 鼓励多分支操作• 每次修改都应该在分支上进行• 只有调试通过了,才应该 merge回主分支
分支操作• git branch
• master:默认的分支名称
• git checkout –b newidea :建立分支并且切换
• git branch
• git checkout newidea 签出分支(切换到分支下)
• git branch 查看当前分支
• git merge newidea 合并分支
• git branch –D newidea 删除分支– 只能删除非工作分支
• git format-patch origin/master 可在当前目录下生成补丁• git checkout master• git aply xxx.patch
分支操作• touch newfile• git commit –a –m “new feature:xxx”• git checkout master• git merge newidea– 如果没有冲突,会自动合并
• git branch
• 合并分支: git merge <source branch>• 目标分支为当前分支
web 界面
• git instaweb --httpd=webrick • http://localhost:1234/
Ruby Required!
参考资源• http://github.com• http://progit.org• http://git-scm.com• https://
git.wiki.kernel.org/index.php/Gitweb• http://www.gitalist.com/install/• http://gitstack.com• http://sitaramc.github.com/gitolite/sts.html#ssh-ha