Git基础

标签: 动态 git | 发表时间:2011-06-19 23:04 | 作者:潘 Wolf
出处:http://panweizeng.com

上个月末在公司内部作了一次《Git基础》的主题分享。这里把分享内容公布出来,希望对一些朋友有用。如果之前没有接触过Git,wikipedia上面已经有非常好的介绍

演示文档
pdf格式:http://panweizeng.com/download/git-basics-meituan.pdf
keynote格式:http://panweizeng.com/download/git-basics-meituan.key

以下是一些presentation notes,前面的数字对应keynote文档中实际的slide页码。

1. 欢迎参加美团技术学院第三讲《Git基础》

2. linux开源社区以前使用bitkeeper来管理代码,05年bitkeeper公司和linux开源社区蜜月结束,终止了合作关系。linux之父Linus Torvalds完成了Git的最初设计和开发。Git是一套内容寻址文件系统,从内部来看,是一种简单的key-value数据存储。Git继承了unix的优良传统,通过很多小工具结合起来构造了强大稳健的系统。网上流传很多Linus语录,我印象最深的一句是:“talk is cheap, show me the code.”

3. 什么是核心竞争力

5. 最新的开源项目大部分都采用Git来管理,同时越来越多的项目开始迁移到Git,这种趋势已经不可逆转。
目前采用Git的项目有:linux, android, rails, jquery, debian, tornado, samba, redmine, node.js, redis, fedora, perl, gcc, mootools, symfony, cakephp, gnome, kde, compiz, prototype, yui, qt, phpmyadmin, drupal, wine, puppet, yum, vlc, x.org, postgresql, haskell, eclipse, …

6. 以前的分支开发就像是一次分娩,异常痛苦。在享受过本地分支的快感之后,任何不支持本地分支的版本控制系统都是不人性的,都是反人类的。工程师都是有个性的人,管理程序员就像在放养一群猫。程序员如果觉得这个事情不酷,他就会心情不好,心情不好就不想编程,强迫自己编程就会写出丑陋的代码。使用Git本身就很酷,会让你的心情好起来。

9. Git更像是个小型的文件系统,但它同时还提供了许多以此为基础的超强工具,而不只是一个简单的VCS。

10. tree就类似目录。commit包含tree、timestamp、log,有0个或者多个父对象。

13. 对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。

18. 对远程裸露仓库的第一次提交,需要指定主分支名master。

19. git status会告诉你当前在哪个分支,哪些文件被改动过,哪些修改已经放在暂存区,哪些文件没有被git跟踪。

21.
git diff HEAD #和最后一次本地提交之间的差异
git diff origin #和本地仓库原始版本比较

26. 如果只有一个工程师并且代码还从来没有发布上线,那么在主干上开发是没有任何问题的。除此之外,要想快速开发,快速修复线上故障,以及同其他工程师协作,分支开发几乎是必须的。在Git下工作,开分支就像吃饭和呼吸空气一样,本来就是一件轻松自然、顺理成章的事情。

28. 在Git中切换分支可以说是真正的无痛切换

31. 在update hook中约定只有以自己名字开头的分支才能新增和删除

34. 这个工作流的特点是

  • 单主分支结构,即远程和本地都以master作为主分支,工程师在develop分支上开发
  • 本地master作为远程master和本地develop的桥梁,主要做pull和push的操作,保证和远程master同步
  • develop开发完成后,从develop创建mirror用于合并master上最新的改动,合并成功(可能要解决冲突)后,再在master上合并mirror分支并push到远程
  • 发布脚本更新发布机器上的master到最新版本,建立master的发布tag,然后开始发布
  • 线上代码稳定后,删除develop和mirror分支

注意:

  • develop和mirror分支的名字只要是非master的任意名字都可以
  • mirror分支的作用是,如果合并发生冲突,可以保留一份干净的副本,如果改动很小,这个分支也可以不要
  • 发布tag是代码库的快照,方便回滚,注意发布tag不会更新到远程仓库,只相当于一个缓存,命名规范为YmdHis-$commit_hash
  • 回滚操作sync.meituan rollback [$tagname/$commit_hash] 默认回滚最近一次发布,如果指定tagname或者commit_hash则发布对应的代码版本

35. 这个开发工作流非常简单,只需要记住一点:master是连接远程代码库和本地分支的桥梁,桥梁的功能只有一个就是连接。

39. 在开发某个项目的时候,目录会搞得很乱,这是又想切换到其他分支同时又不想提交现在的代码,这时候stash就很有用。

42. 如果觉得最后一次提交的信息不够诗意或者忘记提交了一些重要文件,这时候这个操作就很有用。

43. 衍合的风险 http://progit.org/book/zh/ch3-6.html

48. 最好的学习方法是多练,要把常用的Git操作变成手指的条件反射。

相关 [git 基础] 推荐:

Git基础

- Wolf - 潘魏增
上个月末在公司内部作了一次《Git基础》的主题分享. 这里把分享内容公布出来,希望对一些朋友有用. 如果之前没有接触过Git,wikipedia上面已经有非常好的介绍. pdf格式:http://panweizeng.com/download/git-basics-meituan.pdf. keynote格式:http://panweizeng.com/download/git-basics-meituan.key.

Git-rebase 小筆記

- lepture - YORKXIN×YORKXIN
最近剛好有個機會整理很亂的 Git commit tree,終於搞懂了 rebase 的用法,筆記一下. 大家都知道 Git 有個特色就是 branch 開很大開不用錢,但很多 branches 各自開發,總要在適當時機 merge 進去 master. 看過很多 git 操作指南都告訴我們,可以妥善利用 rebase 來整理看似很亂或是中途可能不小心手滑 commit 錯的 commits ,甚至可以讓 merge 產生的線看起來比較簡單,不會有跨好幾十個 commits 的線.

Git 简明教程

- satoru - python.cn(jobs, news)
Git 是一款强大的分布式版本控制系统.在他的官网可以找到已经有很多著名的项目正在使用. Like most other modern version control systems, Git gives each developer a local copy of the entire development history, and changes are copied from one such repository to another.

git架构图解

- - CSDN博客研发管理推荐文章
  最近又遇到Git了,发现网络上Git的资料确实不咋滴,难懂不全面. 至于Git是什么我就不多说了,相比svn上手确实更难. 与svn集中版本库相比较,Git被称作分布式版本库,在分布式的版本库中任何一个库都可以作为中心库看待. 如果说svn是颗树,那么Git就像一张网. Svn在每个目录都有一个.svn文件夹存放信息,而git只在根目录才有,这就决定了svn可以单独拉取某个子目录或者某个文件,而git需要全部拉取.

一些 Git 設定偏好

- dylan - ihower { blogging }
讓 command line 指令列顯示目前處在哪一個 Git Brnach,最早是在 RGBA 看到這一招,非常方便. 請修改家目錄的 ~/.bashrc 或 ~/.bash_profile 檔案:. 記得打開 Git 的 color 設定,這樣 Git 指令的輸出結果才會加上顏色,像是 git status 等:.

Git和Mercurial(Hg)的分析

- gOODiDEA - 译言-电脑/网络/数码科技
来源Analysis of Git and Mercurial. 原文地址:http://code.google.com/p/support/wiki/DVCSAnalysis. (译者注:Mercurial以下简称Hg). 注:这篇分析完成于2008年夏季,当时我们正第一次为Google Code支持DVCS而作的研究工作.

GoogleCode 的 git 使用小记

- Fstone - Gracecode.com
早先就知道 GoogleCode 支持 git,不过一直没时间体验. 近期实在受不了频繁的 svn commit 加上公司的联通网络访问 GoogleCode 实在是慢得让人无法忍受,于是咬咬牙想把 GoogleCode 中那陈年的代码迁移到 git 控制中. 总得来讲,设置 GoogleCode 项目中新的版本控制方案并不复杂,只需要在管理中点击需要的版本控制系统就行.

理解Git工作流

- joyoner - FeedzShare
来自: 黑客志 - FeedzShare  . 发布时间:2011年08月04日,  已有 2 人推荐. 如果你不了解Git背后的设计初衷,那么你正处在危险境地,当然有很多参数可以强迫Git按照你的意愿行事,但这并不是Git被设计的工作方式,这就好比你可以把改锥当锤子使用,并且它也可以完成工作,但这对改锥没什么好处.

git和github简介(上)

- linyehui - 没做完,没准备好
在此贴上本人在Web标准化交流会6月25日北京站的主题分享. 在线PPT:http://jinjiang.github.com/slides/learning-git/. PPT源码:https://github.com/Jinjiang/slides/tree/gh-pages/learning-git.

Git flow 開發流程

- DBLobster - ihower { blogging }
Update: 2011/3/19 受邀有場分享 Git介紹,使用與開發流程 at Facebook 軟體開發團隊工具心得分享. 大家都知道 Git 開 branch 很方便,非常鼓勵 topic branch,但有沒有一套模型流程告訴我們應該怎麼管理 branch 呢. 有人便整理出一套最佳實踐慣例 A successful Git branching model,我們團隊就採用了這套流程.