使用Git管理源代码

  Management,简称SCM)是一种记录一个或多个文件的内容修订历史,以便将来查阅特定版本文件修订情况的软件系统。

采用版本控制系统(VCS)是个明智的选择。有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节,查出是谁最后修改了什么地方从而造成某些怪异问题,又是谁在何时报告了某个功能缺陷,等等。使用版本控制系统通常还意味着,就算你胡来搞砸了整个项目,把文件改的改,删的删,你也可以轻松恢复到原先的样子。而由此额外增加的工作量却微乎其微。

虽然有多种可供选择的版本控制系统,但 Rails社区对Git情有独钟。Git起初由Linus Torvalds(Linux操作系统之父)开发,用来管理Linux内核代码。把我们的Rails代码置于版本控制系统Git的管理之下是非常有必要的,这几乎是Rails世界中的普遍做法,这样做可以让你更容易地管理、共享和发布应用程序。

6.2.1 Git安装和设置

一、安装Git
二、初次运行 Git 前的配置

安装好GIT后,应该先对Git做一些系统设置,这些设置是全局性的,每台电脑做一次就行了。

$ git config --global user.name "Shen Huafeng"
$ git config --global user.email shenhuafeng@sxvtc.com

这两行命令分别用于设置开发者的姓名和电子邮件地址。

当我们确认提交变更之后,Git会要求提交者输入变更确认信息,用于对变更情况进行说明。如果我们已经习惯于使用某个编辑器,我们可以设置下面的选项:

$ git config --global core.editor "mate -w"

Textmate是MAC中最著名的文本编辑器,这里 -w 选项的作用是让编辑器与shell保持附着关系而不是立即脱离。在 Ubuntu中,我们可以设置默认使用 gedit 来输入确认信息。

$ git config --global core.editor gedit

默认情况下,Git全局配置信息存放在用户主目录中的.gitconfig 文件中。

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
user.name=Shen Huafeng
user.email=shenhuafeng@sxvtc.com
core.editor=mate -w
...

6.2.2 使用 Git

下面我们先创建一个博客项目 blog,把项目的初始代码加入到 git 仓库中。转移到工作目录works,运行rails命令创建blog项目。

$ cdworks
$ rails blog -d mysql
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
...

通过rails命令,我们创建了博客系统的初始版本。Git系统的 init 命令用来初始化一个新的git版本库,版本库初始化完成后,会在当前目录下会建立一个名为 .git 的隐藏目录,所有 Git 需要的数据和资源都存放在这个目录中。

一、git init 初始化版本库
$ cdblog
$ git init
Initialized empty Git repository in /home/student/works/blog/.git/

git init 命令执行完成后的提示信息说明在 /Users/shenhf/works/blog/.git/ 中初始化了一个空的git版本库。现在,我们已经在blog项目主目录中创建了一个git版本库。不过目前仅仅是完成了版本库的初始化,我们还没有开始跟踪、管理项目中的任何一个文件。

注意: Rails项目的git版本库都建立在 Rails项目的主目录中且每个项目建立一个独立的版本库。在linux或Mac操作系统中,文件名或者目录名前的 ‘.’ 表示隐藏文件或目录。ls 命令的 -a 选项用于显示系统隐藏的文件或目录。

二、.gitignore 文件

接下来需要把项目文件纳入到版本控制库中。Git默认跟踪项目中所有文件的变更,但是有一些文件(如Rails日志文件等)我们不希望对它进行跟踪,怎么样让Git忽略这些文件?Git使用一个简单的方法,在项目根目录中建立一个.gitignore的文件,让.gitignore文件告诉Git哪些文件需要被忽略。如我们希望忽略 log/ 目录中所有 .log 为扩展名的日志文件,需要在.gitignore文件中包含一行 log/*.log(*号是通配符,在此表示所有.log为扩展名的文件)。其它需要忽略的文件也需要这样设置。

log/*.log
tmp/*
tmp/**/*
doc/api
doc/app
db/*.sqlite3
*.swp
*~
.DS_Store

在blog项目目录中按上面的内容建立一个 .gitignore 文件。

三、建立blog项目的初始版本

对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

Git 基本工作流程

图 6.2.2-1 Git基本流程

基本的 Git 工作流程:

  1. 在工作目录中修改某些文件
  2. 使用 git add 命令对这些修改了的文件作快照,并保存到缓冲区中。
  3. 使用 git commit 命令提交更新,将保存在暂存区域的文件快照转储到 git 本地仓库中。

所以,我们可以从文件所处的位置来判断状态:如果是 git 仓库中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入缓冲区,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

git status 命令用来检查当前工作目录中的文件修改状态并提示用户如何操作。下面我们来检查一下 blog 项目的文件状态。

$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# README
# Rakefile
# app/
# config/
# db/
# doc/
# log/
# public/
# script/
# test/
nothing added to commit but untracked files present (use"git add" to track)
Untracked files: ...

提示我们没有加入git版本控制系统的文件或目录。

(use "git add <file>..."to include in what will be committed)

告诉我们使用 git add 命令把这些文件和目录加入到缓冲区以便将来提交到git仓库。下面我们用 git add . 命令告诉 Git 把这些文件和目录加入到缓冲区开始 blog 项目进行跟踪。

$ git add .

在这里 ‘.’ 表示当前目录,Git非常聪明,能自动递归添加文件并包含所有的子目录。git add 命令把项目文件(去掉 .gitignore 中定义的文件)添加到git 缓冲区中。现在我们再次运行git status命令观察有什么变化。

$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: README
...
# new file: test/test_helper.rb
#
Changes to be committed:

提示我们下面的这些文件可以提交到git仓库了。

(use "git rm --cached <file>..."to unstage)

则提示我们使用 git rm --cached 命令可以把这些文件从缓冲区中移走。

接下来我们可以通过 git commit 命令把我们 blog 项目的初始代码提交到 git 仓库中了。

$ git commit -m "Initial commit"
[master (root-commit) 46eda76] Initial commit
42 files changed, 8487 insertions(+), 0 deletions(-)
create mode 100644 README
create mode 100644 Rakefile
create mode 100644 app/controllers/application_controller.rb
create mode 100644 app/helpers/application_helper.rb
create mode 100644 config/boot.rb
...

-m "Initial commit" 用来设置提交说明信息,Git 要求每次提交文件到版本库都要输入说明信息,这是非常重要的,这些信息能够告诉你自己和项目的其它成员项目发生了哪些改变。如果忽略 -m选项,git会自动打开前面 git config --global core.editor 命令中设定的编辑器,请你在编辑器中输入提交信息。

现在我们可以使用 git log命令来查看一下所有提交确认信息了。

$ git log
commit d137739e7163d90c7ff98fd45b6290e2e21193ce
Author: Shen Huafeng <shenhuafeng@sxvtc.com>
Date: Tue Jun 8 19:30:15 2010 +0800
Initial commit

git log 命令会告诉我们谁在什么时候进行了commit操作以及文件变更的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值