30、Rails社区与Git使用指南

Rails社区与Git实用指南

Rails社区与Git使用指南

1. Rails社区资源

1.1 安全邮件列表

如果你想及时了解Rails的安全问题,可以订阅只读邮件列表。订阅地址为: http://groups.google.com/group/rubyonrails - security

1.2 Rails IRC频道

若你想与其他Rails开发者实时交流,可以尝试Rails IRC频道。操作步骤如下:
1. 打开你喜欢的IRC客户端。
2. 连接到Freenode IRC网络,地址为 irc.freenode.net
3. 进入 #rubyonrails 频道,无论白天还是晚上,你都能找到数百名Rails开发者,他们愿意帮助你并讨论他们喜爱的Web框架。

如果你想成为一个有素养的社区参与者,确保遵循一些基本礼仪来提出合适的问题,可参考 www.slash7.com/pages/vampires 获取相关指南。

常见的IRC客户端有:
| 操作系统 | 客户端名称 | 客户端链接 |
| ---- | ---- | ---- |
| Windows | mIRC | http://mirc.com |
| Mac | Colloquy | http://colloquy.info |

1.3 Rails博客和播客

致力于Rails信息的博客数量迅速增长,许多新的Rails特性甚至在向公众发布之前就会在博客或播客中被报道。你可以订阅你喜欢的博客,以跟上Rails世界的新闻。以下是一些值得访问的与Rails相关的博客和播客:
- http://weblog.rubyonrails.org :官方Rails博客,你可以找到有关即将发布的版本、Rails的新功能以及重要新闻(如文档更新和全球Rails的采用情况)。
- http://rubyflow.com :一个Ruby社区网站,人们会发布关于Ruby或Rails的有趣和新鲜事物。
- http://railscasts.com :Ryan Bates创建的优秀网站,有一系列信息丰富的屏幕录像,教授广泛的Rails技巧,涵盖Rails框架的各个方面。
- http://ruby5.envylabs.com :Ruby5播客,在五分钟或更短(有时稍长)的时间内,你可以收听Ruby和Rails的新闻。

1.4 Rails指南

Rails社区发起了一个名为Rails指南的文档项目,你可以在 http://guides.rubyonrails.org 找到它。这是一个很好的项目,用于记录框架的各个部分,从面向初学者的基础文档到更高级的材料。

1.5 Rails API

几乎不可能记住Ruby和Rails中所有函数和类的名称、方法和可能的参数。为了帮助你完成编码任务,建议你打开Ruby和Rails应用程序编程接口(API)文档,或者至少将它们添加到收藏夹中。API文档包含了你试图使用的特定函数的所有信息,包括函数源代码。
- Rails API文档: http://api.rubyonrails.org
- Ruby API: www.ruby-doc.org/core
- 更用户友好且可搜索的API文档: http://apidock.com/rails

1.6 Rails源代码和问题跟踪

你可以在 http://github.com/rails/rails 找到Rails源代码。它由GitHub应用程序提供支持,GitHub是一个使用Git版本控制系统的项目托管服务。GitHub允许你通过Web界面下载Rails源代码。你还可以使用RSS订阅Git更改日志,以获取Rails源代码更改的通知。

你也可以通过向GitHub账户 http://www.github.com/rails/rails 提交错误报告和补丁,或者查看现有的问题并尝试修复它们,来参与Rails的开发。

2. 版本控制管理与Git

2.1 版本控制管理概述

开发者通常以团队形式工作,编写大量代码时,有时会测试后删除,有时会保留。管理这些代码可能是一个痛苦的过程,因此可以使用版本控制管理(SCM)软件,帮助你专注于编写优秀的代码。SCM软件有两个主要功能:
- 版本控制 :当你为项目使用SCM时,项目中的文件和目录会被跟踪。每次对文件进行更改时,你可以将这些更改保存为一个新版本。这样,你的项目就有了多个版本,每个更改集对应一个版本,你可以浏览这些更改并随时恢复到任何一个版本。
- 文件合并 :假设你和同事John都对同一个文件进行了修改,并将文件提交到SCM系统。SCM会处理文件合并。如果SCM由于某种原因无法处理合并,它会通知你,并提供一些有用的信息,帮助你手动合并冲突的更改。

2.2 Git简介

Git是由Linus Torvalds为管理Linux内核源代码而开发的SCM,也被用于数百万个开源项目,包括Rails。与其他SCM不同,Git是一个分布式版本控制系统。这意味着每个团队成员都有自己的仓库和工作副本,而不是所有团队成员都从服务器上的单个仓库检出工作副本(客户端 - 服务器或集中式SCM),并且大家都会将仓库的副本推送到远程仓库。

这种方法有很多优点,例如即使离线也能工作和提交代码,并且可以更快地操作自己的仓库。

2.3 Git安装

Git的安装相对容易,由于开源社区的贡献,有多个Git安装包可用于在大多数平台上快速安装。

2.3.1 Windows安装

在Windows上,你可以使用Git on Windows(也称为msysGit)来安装Git,这是一个开源项目,可在 https://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git 找到。

安装步骤如下:
1. 从项目网站的下载部分下载Git安装可执行文件。当前版本(写作时)是Git 1.8.1.2,下载地址为 https://msysgit.googlecode.com/files/Git - 1.8.1.2 - preview20130201.exe
2. 按照默认选项开始安装,安装完成后,系统上就安装了Git。该软件包还添加了一些有趣的工具,如Git GUI(提供一个漂亮的图形界面来使用Git)、Git Bash(用于执行Git命令),以及与Windows资源管理器集成的三个上下文菜单项(Git Init Here、Git Bash和Git GUI),可从你调用它们的文件夹启动这些工具。使用Git Bash工具执行本文中提到的命令。

2.3.2 Mac OS X安装

在Mac OS X Leopard上安装Git,你可以使用Macports从源代码编译,或者使用Git OS X Installer,可在 http://code.google.com/p/git - osx - installer/ 找到。

安装步骤如下:
1. 从项目网站下载Git OS X Installer。当前版本(写作时)是Git 1.8.2.1,下载地址为 https://git - osx - installer.googlecode.com/files/git - 1.8.2.1 - intel - universal - snow - leopard.dmg
2. 下载的文件是一个磁盘映像,其中包含一个名为 git - 1.8.2.1 - intel - leopard.pkg 的安装包。
3. 运行安装包,选择默认选项。安装完成后,可从终端使用Git。

2.3.3 Linux安装

大多数Linux发行版都附带了包管理器,最常见的是Debian包管理器 apt ,Git是其库的一部分。

安装步骤如下:
在终端中运行以下 apt - get 命令:

sudo apt-get install git

如果包管理器要求你允许使用额外的磁盘空间进行安装,请接受。安装完成后,Git即可使用。

2.4 设置全局参数

每次在仓库中进行提交时,提交记录都会包含提交者的标志,即用户名和电子邮件地址。安装Git后,为Git设置全局用户名和电子邮件地址非常重要,这样在你处理任何新仓库时都可以使用这些信息。

设置全局参数的命令如下:

git config --global user.name "dude"
git config --global user.email my.email@address.com

这些参数也可以在仓库级别设置,在仓库的工作目录中使用相同的命令,但不使用 --global 选项即可。

2.5 初始化仓库

首先,为你的应用程序创建一个新仓库。步骤如下:
1. 创建一个测试应用程序:

$ rails testapp

这将创建一系列文件和文件夹,包括 README .gitignore Rakefile 等。
2. 在应用程序目录中初始化本地仓库:

$ cd testapp
$ git init

执行 git init 命令后,会为应用程序初始化一个空的本地仓库,但不会将任何文件添加到仓库中。要确定可以添加到仓库的文件,可使用 git status 命令:

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

可以看到,Rails应用程序的所有文件夹和文件都在未跟踪文件列表中,意味着它们尚未被跟踪。要开始跟踪这些文件,需要使用 git add 命令将它们添加到跟踪列表中。

2.6 忽略文件

在添加文件之前,需要考虑是否要跟踪所有文件。通常,包含密码的配置文件(如 database.yml )、 tmp 文件夹、日志文件和SQLite数据库等文件不需要跟踪。如果添加这些文件,可能会导致信息泄露,并且可能与团队成员的文件冲突。

要让Git忽略这些文件,需要在隐藏的配置文件 .gitignore 中声明它们,该文件通常存储在工作副本的根目录(在本例中为 testapp 目录的根目录)。 .gitignore 文件是一个普通的文本文件,Rails在所有新项目中都会生成它。编辑该文件,使其内容如下:

.bundle
config/database.yml
log/*.log
db/*.sqlite3
tmp/**/*

编辑后,再次运行 git status 命令,会发现 .gitignore 文件中列出的文件和文件夹不再显示在未跟踪文件列表中。

2.7 添加和提交文件

使用 git add 命令并传递一个点( . )来将未跟踪的文件添加到仓库,这表示当前目录及其所有内容。但使用 git add . 时要小心,确保不会添加不应该添加到仓库的文件。

$ git add .

再次运行 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:   Gemfile
#   new file:   README
#   new file:   Rakefile
#   ...
#   new file:   script/rails
#   new file:   test/performance/browsing_test.rb
#   new file:   test/test_helper.rb
#   new file:   vendor/plugins/.gitkeep

git status 命令仍然显示所有文件,因为 git add 命令只是将这些文件添加到待提交列表中,但尚未提交。

要提交添加到提交列表中的更改,需要使用 git commit 命令,并使用 -m 参数包含一条描述提交目的和更改内容的消息:

$ git commit -m "Empty Rails application"
[master (root-commit) 046116c] Empty Rails application
 41 files changed, 8434 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 Gemfile
 create mode 100644 README
# ...
 create mode 100755 script/rails
 create mode 100644 test/performance/browsing_test.rb
 create mode 100644 test/test_helper.rb
 create mode 100644 vendor/plugins/.gitkeep

恭喜,你已经完成了第一次向本地仓库的提交!现在再次检查 git status 命令,会发现没有需要添加或提交的更改:

$ git status
# On branch master
nothing to commit (working directory clean)

从这一点开始,如果你在工作副本中编辑、重命名、移动或删除任何文件,这些更改都会显示在 git status 输出中,你可以选择将哪些更改添加到提交列表中,然后将它们提交到仓库。

2.8 分支和合并

假设你要为项目开发一个新功能,并且知道这需要一些时间才能完成。同时,你希望能够继续在主项目上工作,而新功能的更改不会影响主应用程序。为了在项目的单独副本中实现这个新功能,你需要创建一个分支。分支是项目的一个副本,你可以与项目的主副本并行工作。

当你之前运行 git init 命令时,Git为你的应用程序初始化了一个新仓库,并创建了一个名为 master 的默认分支。要在仓库中创建一个新分支,使用 git checkout -b 命令,后跟你要创建的新分支的名称:

$ git checkout -b articles

此命令将创建一个名为 articles 的新分支,它是当前 master 分支的副本。要查看项目中的分支列表,使用 git branch 命令,不带任何参数:

$ git branch
  articles
* master

你有两个分支: articles master master 前面的星号表示它是当前正在工作的分支。要切换分支,使用 git checkout 命令,后跟你要切换到的分支名称:

$ git checkout articles
Switched to branch 'articles'

现在 articles 分支是当前分支,你可以再次列出分支来确认:

$ git branch
* articles
  master

接下来,实现一个新功能 - 文章脚手架:

$ rails generate scaffold Article title:string body:text

这将生成一系列文件和文件夹,包括数据库迁移文件、模型文件、控制器文件、视图文件等。

完成新功能的更改后,将更改添加到 articles 分支并提交:

$ git add .
$ git commit -m "Adding Article scaffold"
[articles 33a538e] Adding Article scaffold
 15 files changed, 308 insertions(+), 0 deletions(-)
 create mode 100644 app/controllers/articles_controller.rb
 create mode 100644 app/helpers/articles_helper.rb
 create mode 100644 app/models/article.rb
 create mode 100644 app/views/articles/_form.html.erb
 create mode 100644 app/views/articles/edit.html.erb
 create mode 100644 app/views/articles/index.html.erb
 create mode 100644 app/views/articles/new.html.erb
 create mode 100644 app/views/articles/show.html.erb
 create mode 100644 db/migrate/20130420235045_create_articles.rb
 create mode 100644 public/stylesheets/scaffold.css
 create mode 100644 test/fixtures/articles.yml
 create mode 100644 test/functional/articles_controller_test.rb
 create mode 100644 test/unit/article_test.rb
 create mode 100644 test/unit/helpers/articles_helper_test.rb

再次检查 git status 命令,会发现 articles 分支没有需要提交的更改:

$ git status
# On branch articles
nothing to commit (working directory clean)

articles 分支现在有了文章脚手架,而 master 分支没有。如果你切换回 master 分支,会发现文章脚手架的文件不存在:

$ git checkout master
Switched to branch 'master'

你可以在 master 分支上独立修改项目,与 articles 分支完全隔离。现在,将 articles 分支合并到 master 分支,使用 git merge 命令,后跟你要合并到当前分支的分支名称:

$ git merge articles
Updating 88c63c5..33a538e
Fast forward
app/controllers/articles_controller.rb        |   83 ++++++++++++++++++++++++++
 app/helpers/articles_helper.rb               |    2 +
 app/models/article.rb                        |    2 +
 app/views/articles/_form.html.erb            |   24 ++++++++
 app/views/articles/edit.html.erb             |    6 ++
 app/views/articles/index.html.erb            |   25 ++++++++
 app/views/articles/new.html.erb              |    5 ++
 app/views/articles/show.html.erb             |   15 +++++
 config/routes.rb                             |    2 +
 db/migrate/20130420235045_create_articles.rb |   14 ++++
 public/stylesheets/scaffold.css              |   60 ++++++++++++++++++
 test/fixtures/articles.yml                   |    9 +++
 test/functional/articles_controller_test.rb  |   49 +++++++++++++++
 test/unit/article_test.rb                    |    8 +++
 test/unit/helpers/articles_helper_test.rb    |    4 +
 15 files changed, 308 insertions(+), 0 deletions(-)
 create mode 100644 app/controllers/articles_controller.rb
 create mode 100644 app/helpers/articles_helper.rb
 create mode 100644 app/models/article.rb
 create mode 100644 app/views/articles/_form.html.erb
 create mode 100644 app/views/articles/edit.html.erb
 create mode 100644 app/views/articles/index.html.erb
 create mode 100644 app/views/articles/new.html.erb
 create mode 100644 app/views/articles/show.html.erb
 create mode 100644 db/migrate/20100420235045_create_articles.rb

这样, articles 分支的更改就合并到了 master 分支。

通过以上步骤,你可以充分利用Rails社区的资源进行开发,并使用Git有效地管理项目代码。

2.9 分支与合并的工作流总结

为了更清晰地理解分支和合并的操作流程,下面通过 mermaid 流程图展示整个过程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(初始化仓库<br>git init):::process
    B --> C(默认分支 master):::process
    C --> D(创建新分支<br>git checkout -b articles):::process
    D --> E(切换到新分支 articles<br>git checkout articles):::process
    E --> F(开发新功能<br>如 rails generate scaffold ...):::process
    F --> G(添加更改<br>git add .):::process
    G --> H(提交更改<br>git commit -m "描述信息"):::process
    H --> I{是否完成开发?}:::decision
    I -->|否| F
    I -->|是| J(切换回 master 分支<br>git checkout master):::process
    J --> K(合并 articles 分支到 master<br>git merge articles):::process
    K --> L([结束]):::startend

这个流程图展示了从初始化仓库到创建分支、开发新功能、提交更改,最后将分支合并回主分支的完整过程。

2.10 常见问题及解决方法

在使用 Git 进行版本控制的过程中,可能会遇到一些常见问题,以下是一些问题及对应的解决方法:

问题描述 解决方法
合并分支时出现冲突 当执行 git merge 命令出现冲突时,Git 会在冲突的文件中标记出冲突的部分。你需要手动打开这些文件,编辑解决冲突。解决后,使用 git add 命令将文件标记为已解决,然后使用 git commit 提交更改。
忘记设置全局用户名和邮箱 使用 git config --global user.name "你的用户名" git config --global user.email 你的邮箱 来设置全局用户名和邮箱。
误提交了不需要的文件 如果已经提交了不需要的文件,可以使用 git revert 命令撤销该提交。或者使用 git reset 命令将仓库状态回退到之前的某个版本,然后重新提交正确的文件。

2.11 高级 Git 操作

除了上述基本操作外,Git 还有一些高级操作可以帮助你更高效地管理项目。

2.11.1 标签(Tag)

标签用于标记项目的特定版本,通常用于发布版本。创建标签的命令如下:

git tag v1.0

这将在当前提交上创建一个名为 v1.0 的标签。你可以使用 git tag 命令查看所有标签,使用 git show v1.0 查看特定标签的详细信息。

2.11.2 远程仓库操作

如果你需要与团队成员协作,通常会使用远程仓库。以下是一些常见的远程仓库操作:

  • 添加远程仓库
git remote add origin 远程仓库地址

这将添加一个名为 origin 的远程仓库。

  • 推送本地分支到远程仓库
git push -u origin master

这将把本地的 master 分支推送到远程仓库的 master 分支,并设置本地 master 分支跟踪远程 master 分支。

  • 从远程仓库拉取最新更改
git pull origin master

这将从远程仓库的 master 分支拉取最新更改,并合并到本地的 master 分支。

2.12 总结

本文详细介绍了 Rails 社区的各种资源,包括安全邮件列表、IRC 频道、博客和播客、指南、API 文档以及源代码和问题跟踪等。同时,深入讲解了版本控制管理的概念和 Git 的使用方法,包括安装、设置全局参数、初始化仓库、忽略文件、添加和提交文件、分支和合并等操作。通过掌握这些内容,你可以更好地利用 Rails 社区的资源进行开发,并使用 Git 有效地管理项目代码,提高开发效率和代码质量。

希望这些信息对你有所帮助,让你在 Rails 开发和版本控制的道路上更加顺利。如果你在实际操作中遇到任何问题,欢迎参考上述内容或查阅相关文档进行解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值