Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Git Essence Tutorial

1,843 views

Published on

1. A brief introduction of Git (SVN, CVCS, DVCS etc.)
2. Git/TortoiseGit/msysgit installations
3. A complete guide of Git operations
4. The Branches and HEAD
5. Remote and local repository
6. Rebase and submodules etc.
7. Some Skills and Experience

Published in: Technology
  • Be the first to comment

Git Essence Tutorial

  1. 1. Git 入门(客户端版) 技术部 - kim
  2. 2. 作者及起源2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。
  3. 3. 传统 CVCS集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )例如:CVS, Subversion优点:管理容易缺点:宕机无法更新,磁盘坏了丢失数据
  4. 4. DVCS分布式版本控制系统( Distributed Version Control System,简称 DVCS )例如:Git, Mercurial优点:文件快照+原始代码仓库的完整镜像,每一次的提取操作,实际上都是一次对代码仓库的完整备份缺点:入门及过渡稍有难度(这也算?)
  5. 5. CVCS DVCS
  6. 6. SVN vs Git
  7. 7. Git 本地仓库状态
  8. 8. Git 安装源代码(翻墙) :http://git-scm.com/download (Git-软件配置管理)用 yum 安装: $ yum install git-core用 apt-get 安装: $ apt-get instal git-coreWindows下: http://code.google.com/p/msysgit http://code.google.com/p/tortoisegit/
  9. 9. TortoiseGit
  10. 10. Git 配置Linux 配置文件: /etc/gitconfigWindows 配置文件: C:Documents and Settings$USER.gitconfig初始化配置:$ git config --global user.name “kim"$ git config --global user.email xqpmjh@gmail.com演示:$ git config --list
  11. 11. Git 配置
  12. 12. 本地创建仓库 $ git init 观察一下 .git 目录
  13. 13. 本地创建仓库Git 默认是禁止 push 操作的,所以需要编辑一下 local 的 .gitconfig 文件
  14. 14. 本地创建仓库加上 dengCurrentBranch = ignore
  15. 15. 克隆仓库$ git clone --progress -v "D:wwwrep1" "D:wwwgit1”
  16. 16. Git 文件的4种状态
  17. 17. 添加文件$ git add abc.txt
  18. 18. 忽略文件指令稍微复杂,建议使用客户端
  19. 19. 查看更新 $ git diff
  20. 20. 提交更新 $ git commit –m “hello world”默认分支为 master ,多人协作开发可以为每个人开一个分支。 每一次运行提交操作,都是对你项目作一次快照。
  21. 21. 删除文件 $ git rm abc.txt同时删除版本库以及文件夹里面的文件
  22. 22. 文件改名$ git mv abc.txt cba.txt
  23. 23. 查看历史 $ git log --pretty不用客户端的话根本没法看
  24. 24. 取消暂存 $ git reset HEAD abc.txt即撤消了 add 操作,蓝色十字变回蓝色问号
  25. 25. 撤销修改 $ git checkout -- 111.txt撤销前 撤销后
  26. 26. 推送 $ git push origin masterpush 的是之前 commit 到本地暂存的快照
  27. 27. 拉取 $ git pull origin masterpull 的是仓库中没有同步到本地的快照版本
  28. 28. 打标签 $ git tag -a v1.0 -m my version 1.0 PS:比如发布版本的时候就打上一个吧如果说 branch 是一对一的关系,那么 tag 则是一对多的关系
  29. 29. 查看标签$ git show v1.0show log 一目了然
  30. 30. 推送标签 $ git push origin --tags push 的时候选中 Include Tags单推一个 tag 用 $ git push origin v1.0
  31. 31. 标签的用途1. 标记重要事件或版本2. 方便搜索和查看3. 分支检出(checkout)与分支合并(merge)
  32. 32. 文件标注$ git blame abc.txt犯罪历史一目了然
  33. 33. Git 分支分支,杀手级应用
  34. 34. 版本存储方式每次提交就是提交一个 commit 对象
  35. 35. Snapshot 之间关系一个 snapshot 包括当前 commit 对象,及其 parents
  36. 36. Master 分支 分支:指向 commit 对象的指针每次提交,默认分支指针都会自动向前移动
  37. 37. 创建分支 $ git branch testing创建一个新的分支指针 testing
  38. 38. 创建分支$ git branch -v
  39. 39. 切换分支 或者PS:Git 里面 checkout 的意思跟 SVN 有所不同
  40. 40. HEAD 指针 $ git checkout testing $ git status切换分支其实就是把 HEAD 指针指向别的分支指针 指针的指针的意思
  41. 41. 分支修改 $ git checkout testing $ vim branch_changes.log $ git commit -a -m made a change每次提交后 HEAD 随着分支一起向前移动
  42. 42. 分支修改$ git checkout master$ vim branch_changes_2.log$ git commit -a -m made other changes 这种情况也可以称之为“分叉”
  43. 43. 分支对比$ git checkout master $ git checkout testing
  44. 44. 分支的本质Git 中的分支,实际上仅是一个包含所指对象“校验和”(40 个字符长度 SHA-1 字串)的文件 分支切换非常廉价
  45. 45. 合并分支$ git checkout master$ git merge testing
  46. 46. 删除分支$ git branch -d testingPS:已合并的分支可以看情况保留一段时间,而不是第一时间删除
  47. 47. 使用分支应注意1. 切忌在多个分支上频繁切换2. 最好保持独立分支,大于等于2个分支时,尽快 merge3. 使用分支的最好场景还是发布新版本的时候4. Git 玩分支太廉价,容易走火入魔
  48. 48. 分支流水线
  49. 49. 本地分支origin/master 的本质是:Git 自动为你命名的指向原始仓库的指针
  50. 50. 修改本地分支本地修改只会移动 master 指针,而不会移动 origin/master 指针,直到你执行 fetch ,更新 origin 的状态为止
  51. 51. 远程分支远程分支(remote branch)是对远程仓库状态的索引比如,我们先来创建一个名为 myframework 的仓库
  52. 52. 分享分支$ git clone --progress -v "D:wwwmyframework" "D:wwwmfr”$ cd D:wwwmfr$ git branch sharing$ git push --progress "origin" sharing PS:前提当然是你有 myframework 仓库的写权限
  53. 53. 添加远程仓库$ cd D:/www/rep1$ git remote add myframework D:wwwmyframework
  54. 54. 同步远程仓库$ git fetch myframework
  55. 55. 跟踪分支$ git pull "myframework“ sharing
  56. 56. 归并如果想把代码合并到你的项目,可以使用 merge $ git merge myframework/sharing 也可以在本地新建一个分支来指向远程分支$ git checkout –b localmfr myframework/sharing
  57. 57. 删除远程分支 $ git push myframework :sharing这句语句可以这么理解:把本地分支置空,再同步到远程仓库
  58. 58. 分支衍合(rebase) 不建议使用
  59. 59. 子模块子模块允许你将一个 Git 仓库当作另外一个 Git 仓库的子目录。这允许你克隆另外一个仓库到你的项目中,并且保持你的提交相对独立。
  60. 60. 添加子模块$ git submodule add -- "D:/www/myframework" ""
  61. 61. 更新子模块$ vim myframework/api.php
  62. 62. 更新子模块 $ cd D:/www/git1/myframework $ git branch -v $ cd D:/www/myframework $ git branch -v再给 branch_of_rep1 添加一个新文件,如 api2.php
  63. 63. 更新子模块$ git submodule update$ cd D:/www/git1/myframework$ git pull origin "origin" branch_of_rep1子模块的修改跟主项目是相对独立的
  64. 64. 其它特性1. Git 挂钩2. 和 SVN 一起使用?3. 储藏(git stash 命令)4. 子树合并(git tree 命令)5. Git 支持4种协议:file, ssh, http(s), git6. Git 导入 SVN(git svn 命令)
  65. 65. 常见问题1. 慎用 clean up
  66. 66. 常见问题2. Push 前先进行 Pull
  67. 67. 常见问题3. 保持换行符不变$ git config --global core.autocrlf false
  68. 68. 常见问题4. 不小心删除了文件怎么办
  69. 69. 常见问题5. 和 TortoiseSVN 一起共用,图标会冲突
  70. 70. 常见问题6. Git 的两大好处1) 不用每次都同步到服务器,比如今天的活儿就今天 commit ,项目完了再一次过 push2) 只有一个 .git 文件夹,清爽
  71. 71. 常见问题7. 如何配置 puttytortoiseGit -> setting -> Network -> ssh client ->$GitDirTortoiseGitbinTortoisePlink.exe
  72. 72. 常见问题8. 配置了 putty 作为 ssh 客户端之后?运行 GitDirTortoiseGitbinpageant.exe ,Add Key 加入 你的 ssh privete key file 文件,并输入密码
  73. 73. 常见问题9. 如何学习使用 Git1) 《Pro Git》2) 反复操作
  74. 74. 谢谢!

×