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/Scr
  eenshots
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):
                                  Git服务器通过这些信息
                                     来识别你的身份
• $ ls
• id_rsa id_rsa.pub known_hosts
基本设置
                  你的信息,方便识别代码所有者




• git config --global user.name
  “medcl”
• git config --global user.email
  “m@medcl.net”
创建一个Repository
• Repository(代码仓库)
                                       在本地新建仓库,就可以开
• 1.本地新建一个代码仓库                          始使用git的所有功能
  –   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 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 status
   git status c.txt
.gitignore
• 告诉git那些文件不需要管
 – 即使git add 也不会添加这些文件


• .gitignore文件内容例子:
   /data
   /work
   /logs
   /.idea
   /target
   /out         确保只提交给源代码到repo!
   .DS_Store
   *.iml

   各种编译输出,中间文件,一定不要提交上去
提交变更
历史记录
• 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

Git 使用介绍

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