论坛首页 Java企业应用论坛

git实战-初步了解git

浏览 7256 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-18  

概述

Git 是一个版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。Git 最为出色的是它的合并跟踪(merge tracing)能力。

Git的历史

GitLinux的创始人Linus Tatvatds开发的开源和免费的版本管理系统,也称源代码管理系统(Source Code Manage,SCM). 它的官方网站是Http://git-scm.com

2005年的时候Linux核心开发小组和当时的他们的版本管理系统提供商产生分歧。他们不能再使用原有的版本管理系统了。当时Linus环顾宇宙之内竟然没有一个能满足自己需求的版本管理系统可用。于是他毅然决定自己动手开发一个!这就是Git。时至如今,Git已经成为许多著名系统的版本管理系统。比如Linux核心,EclipseAndroidRuby on RailsPostgreSQLjQuery……http://en.wikipedia.org/wiki/Git_(software)

Linus对这个版本控制开发时候的思考(特征):

Speed 速度(用C写的)

Simple design 简单设计

Strong support for non-linear development(thousands of parallel branches) 上千个分支

Fully distributed完全分布式

Able to handle large projects like the Linux kernel efficiently (speed and data size)

Git开发人员使用流程



 一般开发者,我就是Google Source Code使用者

a)         从服务器上克隆数据库(包括代码和版本信息)到单机上。

b)         在自己的机器上创建分支,修改代码。

c)         在单机上自己创建的分支上提交代码。

d)         在单机上合并分支。

e)         新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

f)          生成补丁(patch),把补丁发送给主开发者。

g)         看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。

h)         一般开发者之间解决冲突的方法,开发者之间可以使用pull命令解决冲突,解决完冲突之后再向主开发者提交补丁。

主开发者的角度(假设主开发者不用开发代码):我就是Google Source code管理员

a)         查看邮件或者通过其它方式查看一般开发者的提交状态。

b)         打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。

c)         向公共服务器提交结果,然后通知所有开发者

Git的记录方式

Git是比快照而不是比不同

其他版本控制系统:



 Git,更像一个小型的文件系统:


Git文件的三个状态



 Committed:文件安全地存储在你的本地

Modified:你修改了文件,但还未提交到你的仓库

Staged:已经标记了一个已修改文件到下一个版本的快照

Git文件状态的生命周期


Untracked相当于SVN中图标为紫色问号那个状态,也就是还没和版本控制没什么关系的

Unmodified相当于SVN中图标为绝色打勾那个状态

modified相当于SVN中图标为红色感叹号那个状态

下载安装

git最新版是Git-1.7.11-preview20120710.exe

下载地址:http://msysgit.github.com/或者http://code.google.com/p/msysgit/downloads/list

安装就一路next就行了,在这里就不做说明。

打开命令行窗口Git Bash,输入“git help git”即可打开git的帮助文档

$ git help git

Launching default browser to display HTML ...

D:/Program/Git/doc/git/html/git.html

Git客户端tortoisegit,现在的最新版本是TortoiseGit-1.7.12.0-32bit.msi,下载地址:http://code.google.com/p/tortoisegit/,这个安装也一路NEXT,不作讲解

初步了解Git

配置项

1.       了解系统环境变量

/etc/gitconfig(D:/Program/Git/etc/gitconfig)

.gitconfig

2.       设置身份

$ git config --global user.name "yineng huang"

$ git config --global user.email huangyineng@656463.com

3.       设置编辑器(可选)

$ git config –global core.editor emacs

4.       设置你的比较工具(可选)

$ git config –global merge.tool vimdiff

5.       检查你的配置(可选)

$ git config –list

$ git config --list

core.symlinks=false

core.autocrlf=true

color.diff=auto

color.status=auto

color.branch=auto

color.interactive=true

pack.packsizelimit=2g

help.format=html

http.sslcainfo=/bin/curl-ca-bundle.crt

sendemail.smtpserver=/bin/msmtp.exe

diff.astextplain.textconv=astextplain

rebase.autosquash=true

user.name=yineng huang

user.email=huangyineng@656463.com

6.       帮助

$ git help

$ git --help

如:$ git help git

注,怎么如何以上配置是用什么命令呢?请参阅帮助文档:file:///D:/Program/Git/doc/git/html/git-config.html

几个区域

blessed(remote) repository:远程仓库

local repository:本地仓库

stage area:缓冲区-->git目录下的index文件

work area:工作区

我们现在用实例来描述一下这几个区域

huangyineng@HUANGYINENG-PC ~

$ mkdir gittest1

 

huangyineng@HUANGYINENG-PC ~

$ cd gittest1/

 

huangyineng@HUANGYINENG-PC ~/gittest1

$ git init

Initialized empty Git repository in c:/Users/huangyineng/gittest1/.git/

 

huangyineng@HUANGYINENG-PC ~/gittest1 (master)

$ echo "hello" >> hello

 

huangyineng@HUANGYINENG-PC ~/gittest1 (master)

$ git add .

warning: LF will be replaced by CRLF in hello.

The file will have its original line endings in your working directory.

 

huangyineng@HUANGYINENG-PC ~/gittest1 (master)

$ git commit hello -m "init hello"

warning: LF will be replaced by CRLF in hello.

The file will have its original line endings in your working directory.

[master (root-commit) 4d850bf] init hello

warning: LF will be replaced by CRLF in hello.

The file will have its original line endings in your working directory.

 1 file changed, 1 insertion(+)

 create mode 100644 hello

 

huangyineng@HUANGYINENG-PC ~/gittest1 (master)

$

以上命令的操作过程是:创建gittest1目录,进入该目录,把该目录初始化为仓库。这个仓库的具体位置是:C:\Users\huangyineng\gittest1\.git。创建创建一个文件(hello),把当然目录下的所有文件添加到缓冲区中,然后提交把hello文件提交到本地仓库中。

工作区就是gittest1目录(C:\Users\huangyineng\gittest1

缓冲区存放在.gitindex文件中(C:\Users\huangyineng\gittest1\.git\index

本地仓库会存放在.gitobjects目录下(C:\Users\huangyineng\gittest1\.git\objects

本文链接:http://www.656463.com/portal.php?mod=view&aid=69,转载请注明出处
  • 大小: 56.4 KB
  • 大小: 14.1 KB
  • 大小: 16.6 KB
  • 大小: 20.9 KB
  • 大小: 16.8 KB
   发表时间:2012-08-18  
写点东西不容易,自己先支持一下
0 请登录后投票
   发表时间:2012-08-18  
支持一下,不过感觉git还是没有svn好用,在提交代码修改以及IDE的支持上都比较差
0 请登录后投票
   发表时间:2012-08-18  
finallygo 写道
支持一下,不过感觉git还是没有svn好用,在提交代码修改以及IDE的支持上都比较差

svn是比较简单,但git确实很强大,我个人觉得最爽是分支与全并
0 请登录后投票
   发表时间:2012-08-19  
hyneng 写道
finallygo 写道
支持一下,不过感觉git还是没有svn好用,在提交代码修改以及IDE的支持上都比较差

svn是比较简单,但git确实很强大,我个人觉得最爽是分支与全并

其实,我最讨厌就是做分支了,因为一旦有了分支就很可能需要合并,而一旦合并就很可能冲突,这样就很影响维护的成本和开发的速度了,总之暂时没感觉到git的好,可能还是svn用习惯了吧...
0 请登录后投票
   发表时间:2012-08-19  
finallygo 写道
hyneng 写道
finallygo 写道
支持一下,不过感觉git还是没有svn好用,在提交代码修改以及IDE的支持上都比较差

svn是比较简单,但git确实很强大,我个人觉得最爽是分支与全并

其实,我最讨厌就是做分支了,因为一旦有了分支就很可能需要合并,而一旦合并就很可能冲突,这样就很影响维护的成本和开发的速度了,总之暂时没感觉到git的好,可能还是svn用习惯了吧...

哈哈
0 请登录后投票
   发表时间:2012-11-16  
有些小项目可能不怎么需要分支,否则可能反而有点自找麻烦。

不过个人使用过程当中,觉得git最方便的特性之一还是本地repository,在不联网状态下,也能一次次地提交修改,保留修改记录,然后在联网时候再push到公用服务器上。这大概也是所有分布式版本管理系统的优点之一。
0 请登录后投票
   发表时间:2012-11-19   最后修改:2012-11-19
billgui 写道
有些小项目可能不怎么需要分支,否则可能反而有点自找麻烦。

不过个人使用过程当中,觉得git最方便的特性之一还是本地repository,在不联网状态下,也能一次次地提交修改,保留修改记录,然后在联网时候再push到公用服务器上。这大概也是所有分布式版本管理系统的优点之一。


如果是个人使用git的话,分支一旦形成可编译版本就可以合并了。master上一旦有新提交(包括合并),其他未push的分支可以rebase到master上,这样可以避免一次性进行大量合并。使用分支的最大好处是可以保证每次提交的版本都是可编译的(用svn经常会选漏文件),为bisect打好基础。

话说在团队环境里,git最强大的还是bisect,已经好几次救me(save我居然是敏感词……)于水火了。经常是别人弄进去一个bug,一直没人注意。测你的东西时这个bug就冒出来了,虽然明知道跟你改的东西风马牛不相干,但跳进黄河也说不清呀,而且毫无头绪,排错都不知道从哪里排起。这时bisect + jRebel,一般30分钟内就能定位到是哪次提交引入的bug,直接把bug转发给提交人,收工。
0 请登录后投票
   发表时间:2012-11-19  
finallygo 写道
支持一下,不过感觉git还是没有svn好用,在提交代码修改以及IDE的支持上都比较差


GUI工具用Git Extension + ToroiseGit,基本上满足日常需要了。IDEA自带的Git插件也不错。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics