• 1. Git简单讲座分布式版本管理工具李刚 ligang@edu2act.org
  • 2. 版本管理工具版本管理工具的产生 为什么会产生版本管理工具? 版本工具的产生是因为懒惰的程序员不愿意每天备份代码。因为懒惰所以才开发出这个工具让他更加懒惰。 版本管理工具的发展 集中式版本控制(VSS、CVS、SVN) 分布式版本控制(monotone、git) 李刚
  • 3. 集中式版本管理遇到的问题我们禁止提交不能编译通过的代码,尽量不提交不能测试通过的代码。结果,对于很复杂的模块,有人几乎一个月都没提交过一次。他总是觉得程序还不太成熟,但几经修改的代码其实从来没有作版本控制。 有些模块由两个人合作编写,关系非常紧凑。有时候需要在两人之间交换一些代码,为了方便,大家通过代码仓库中转,结果在仓库中留下许多未完成的版本。 代码被用笔记本带回家,结果在家完成的部分无处可以提交。(为了安全,我们的代码仓库不能从外网访问) 某人写了一个模块,总是有 bug 没有修改完,而不敢提交。这个时候,另一个人希望协助他找问题,却没有合适的途径 share 那段完成了一半的模块。跑过去 XP 一下么?天哪,为什么我们这里每个人用的编辑器都不一样,还都爱用些特别个性的配色方案呢? 李刚
  • 4. 提纲学习使用Git前心里准备 版本管理工具的介绍 安装使用Git 使用Git进行团队开发 Git高级功能介绍(基本介绍) 实战(GitHub) 李刚
  • 5. 需要改变很多你可能经常听说Git相对SVN有着截然不同的使用方法。 Git对不同人又有不同的使用流程。 当然Git是支持这些方式的,所以有很多人来推广。李刚
  • 6. 版本管理工具差别 GIT、SVN李刚
  • 7. GIT和SVN五个基本区别GIT是分布式的,SVN不是 GIT把内容按元数据方式存储,而SVN是按文件 GIT分支和SVN的分支不同 GIT没有一个全局的版本号,而SVN有 GIT的内容完整性要优于SVN 李刚
  • 8. 储存方式差别Git与你熟悉的大部分版本控制系统的差别是很大的。也许你熟悉Subversion、CVS、Perforce、Mercurial 等等,他们使用“增量文件系统” (Delta Storage systems), 就是说它们存储每次提交(commit)之间的差异。Git正好与之相反,它会把你的每次提交的文件的全部内容(snapshot)都会记录下来。这会是在使用Git时的一个很重要的理念李刚
  • 9. 完整数据保护与SVN不同的是,如果SVN服务器挂了。 Git有很强的数据安全机制应对意外发生。无论是数据事故(e.g. disk/memory/cpu failure)还是恶意破坏。Git都不会影响到已经发布的版本。 李刚
  • 10. Caching more data获取项目的内容 CVS: data + metadata SVN: data + extra copy + metadata (faster diffs against last revision) GIT: data + all history + metadata (most operations faster, new operations possible) 李刚
  • 11. Caching more data获取最新版本,客户端占用磁盘空间: CVS: 1+ (typical is about 1.2) SVN: 2+ (typical is about 2.2) GIT: 1+ (typical is in the range 1.9-2.5)李刚
  • 12. 基础本质相同核心功能李刚svn checkout URLgit clone URLsvn statusgit statussvn updategit updatesvn diffgit diffsvn add FILEgit add FILEsvn commitgit commit git push
  • 13. 基础本质相同其他常用功能李刚svn blame FILEgit blame FILEsvn cat FILEgit cat FILEsvn help [COMMAND]git help [COMMAND]svn infogit infosvn mv OLDNAME NEWNAMEgit mv OLDNAME NEWNAMEsvn resolved PATH...git resolved PATH...svn revert PATH...git revert PATH...svn rm FILE...git rm FILE...
  • 14. 如果对GIT没有偏见,那么Git有很多强大的功能,让你在使用的时候可以不改变项目原型。(哪怕删除某个文件也没有关系) 如果你可以接受开发Linux人员的模式,那就开始使用它。 李刚
  • 15. 安装GIT(msysgit)基于Windows版本李刚
  • 16. (多系统支持)如果你是Unix系统可以从官网上下载Git Linux可以直接用本地管理系统安装 Mac可以直接从MacPort中安装 Windows下安装Git很简单,只要下载msysGit就可以了 下载地址:code.google.com/p/msysgit/李刚安装Git系统
  • 17. 开始使用GitGit基于命令行形式来管理版本。 我通过实际操作展示如何使用GIT。 PPT中,配合展示命令行的形式。 李刚 ligang@edu2act.org
  • 18. 下载安装tortoisegit下载网址 http://code.google.com/p/tortoisegit/ 李刚
  • 19. 开始使用Git基于可视化插件李刚
  • 20. 获取项目(Clone)为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)://, git://,或是只是以一个用户名(git 会认为这是一个ssh 地址)为前辍。 $ git clone git://git.kernel.org/pub/scm/git/git.git 李刚
  • 21. 提交代码(Commit)Commit只是将记录提交到本地。 $ git commit -m "Random change, just for the fun of it“ 如果你想将Commit的代码提交的你获取的地方。 $ git push 当你的代码还不能够让项目李所有人使用的时候,你可以在本地提交多次。准备好之后再Push到服务器。 李刚
  • 22. 查看区别(Diff)这个命令用来展示在patch中的变化。 $ eg diff diff --git a/src/utils.py b/src/utils.py index 2ad4d53..c76b540 100644 --- a/src/utils.py +++ b/src/utils.py @@ -454,4 +454,5 @@ class Task(object): return value def add(self, item, count): - self.container.insert(item, count) + if count: + self.container.insert(item, count)李刚
  • 23. 查看历史记录(Log)用来展示历史记录 $ git log commit 23dbb9a7643186c1402709e535622595e9b857a1 (master) Author: Elijah Newren Date: Fri Oct 3 20:35:26 2008 -0600 Mark the current version of eg as .93; it’s time to release If you look at .93 upside down, it kind of looks like E-G. :-)李刚
  • 24. 需要什么用什么只有很少的用户可以用到大于20%的功能 我们平时可能也只用到1%的功能 不过了解这些用不到的功能还是有好处的李刚
  • 25. Only use what you needGit有很多的功能 平时你根本不需要使用其他的99%功能 不过这里是一个很强大的讲座,所以。。。李刚
  • 26. 用来节省时间李刚
  • 27. 缓存Stashing你可以用Stashing保存任何你没有提交的修改。Stashed也可以重现之前被Stash的内容。 $ git stash $ git stash apply 你也可以使用多个Stash。 $ git stash save Stuff I was doing before customer called $ git stash save Crazy idea $ git stash apply Stuff I was doing before customer called李刚
  • 28. 分支BranchingGit建立、合并分支。简单,快捷,强大 git branch newbranch $ git switch newbranch $ git switch original-branch 将其他分支合并到当前分支 git merge newbranch李刚
  • 29. Git的其他常用功能Git是这样管理版本的 $ git init $ git add $ git commit $git commit … 李刚
  • 30. 团队协作开发李刚
  • 31. 获取最新代码(Pull)你可以从服务器获取代码(Origin) $ git pull 也可以很简单的从其他的仓库。 $ git pull –branch 如果你经常从相同服务器获取代码,你给以给这个服务器起个别名。 $ git remote add jim URL-OR-PATH-TO-PROJECT $ git pull --branch some-branch jim李刚
  • 32. 获取最新代码(Fetching)这个和pull的区别在于,只获取代码不合并到现有的项目里面来。也就是新代码不会影响你现有开发。 $ git fetch bob李刚
  • 33. 查看版本变化(Patch)你也可以通过Patch来提交版本变更 并且可以合并Patch的版本变更。如果Git不能够连接网络。或者非作者想你提交意见的时候,可以通过这个方式。李刚
  • 34. 以上仅仅是皮毛李刚
  • 35. 简单说说其他功能 Revert 不仅仅能够Revert没有提交的版本变化 还可以到一个版本。 还可以让某个版本中的某个文件Revert 删除Tag 重写历史记录,可以对过去很久的历史记录进行修改。李刚
  • 36. Cherry picking change off another branch有些时候,你不需要去完全合并分支。但是你又需要分支中的某些改动,这个时候你就需要Cherry pick了。它可以将其他分支中的某些改动应用到当前分支中。 不过默认的一点是,他会自动Commit,并使用相同的Commit Message。李刚
  • 37. 查找功能Git可以找出最近100次提交版本,没有变化的文件。 这个功能在小乌龟里是没有实现的。李刚
  • 38. 代码获取 可以一次性同时从不同的服务器获取代码。并保存在本地。 你可以自己合并到一起,或者使用自己喜欢的方式管理起来。李刚
  • 39. 以上仅仅是很少的介绍The 2008 Git user’s survey included 65 commands and variations thereof, which featured high-level functionality of Git. The survey asked whether (and how often) users used the various commands. If you used everything in this presentation, you could check about half the boxes. ...but those boxes don’t cover all existing capabilities either. ...let alone the features being developed. Elijah李刚
  • 40. 参考资料 http://progit.org/ http://gitbook.liuhui998.com/index.html http://code.google.com/p/msysgit/ http://blog.csdn.net/colorant/article/details/3193820 http://www.linuxsir.org/main/doc/git/gittutorcn.htm http://www.aqee.net/5-fundamental-differences-between-git-svn/ http://geeklu.com/2010/06/introduction-to-git/?utm_source=rss李刚
  • 41. Git最实用最强大的功能李刚
  • 42. 代码迁移Git对SVN有强大的代码兼容功能 包含SVN全部历史记录 代码迁移是一件非常简单的事情,只需要一行代码就OK $ git-svn clone http://my-project.googlecode.com/svn/trunk new-project李刚
  • 43. 谢谢大家