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 开发和版本控制的道路上更加顺利。如果你在实际操作中遇到任何问题,欢迎参考上述内容或查阅相关文档进行解决。
Rails社区与Git实用指南
超级会员免费看

15

被折叠的 条评论
为什么被折叠?



