设置代码库

Setting up a repository

本教程概要介绍如何在 Git 版本控制下设置代码库 (repo)。此资源将指导您初始化新的或现有项目的 Git 代码库。下面的工作流示例包括在本地创建的代码库和从远程代码库克隆的代码库。本指南假定读者基本熟悉命令行界面。

本指南涵盖的要点包括:

  • 初始化新的 Git 代码库
  • 克隆现有 Git 代码库
  • 将文件的修订版本提交到代码库
  • 配置用于远程协作的 Git 代码库
  • 常用 Git 版本控制命令

到本模块结束时,您应该能够创建 Git 代码库、使用常用的 Git 命令、提交修改的文件、查看项目的历史记录并配置与 Git 托管服务 (Bitbucket) 的连接。

什么是 Git 代码库?

Git 代码库是项目的虚拟存储区域。它可让您保存代码的各个版本,以便在需要时进行访问。 

初始化新代码库:git init

要创建新的代码库,您将使用 git init 命令。git init 是一个一次性命令,您可以在新代码库的初始设置期间使用它。执行此命令将在您当前工作目录中创建一个新的 .git 子目录。这也将创建一个新的主分支。 

使用新的 git 代码库对现有项目进行版本控制

此示例假定您已经有一个现有项目文件夹,要在其中创建一个代码库。您将首先将 cd 添加到根项目文件夹中,然后执行 git init 命令。

cd /path/to/your/existing/code
git init

git init 指向现有项目目录将执行与上述相同的初始化设置,但范围扩大到该项目目录。

git init <project directory>

请访问 git init 页面了解更多有关 git init 的详细资源。

克隆现有代码库:git clone

如果已在中央代码库中设置了项目,则 clone 命令是用户获取本地开发克隆的最常用方式。像 git init 一样,克隆通常是一次性操作。开发人员获得工作副本后,所有版本控制操作都将通过其本地代码库进行管理。

git clone <repo url>

git clone 用于创建远程代码库的副本或克隆。您向 git clone 传递一个代码库 URL。Git 支持几种不同的网络协议和相应的 URL 格式。在此示例中,我们将使用 Git SSH 协议。Git SSH URL 遵循以下模板:git@HOSTNAME:USERNAME/REPONAME.git

示例 Git SSH URL 是:git@bitbucket.org:rhyolight/javascript-data-store.git其中模板值匹配:

  • 主机名:bitbucket.org
  • 用户名:rhyolight
  • 代码库名:javascript-data-store

执行时,主分支上远程代码库文件的最新版本将被下拉并添加到新文件夹。javascript-data-store 这种情况下,新文件夹将命名为 REPONAME。该文件夹将包含远程代码库和新创建的主分支的完整历史记录。

有关 git clone 用法和支持的 Git URL 格式的更多文档,请访问 git clone 页面

将变更保存到代码库:git add 和 git commit

现在您已克隆或初始化了代码库,可以向其提交文件版本变更。以下示例假定您已经在 /path/to/project 中设置了一个项目。在此示例中所采取的步骤是:

  • 将目录更改为 /path/to/project
  • 创建一个内容是“test content for git tutorial”的新文件 CommitTest.txt
  • 使用 git add 将 CommitTest.txt 添加到代码库暂存区域
  • 创建一个包含消息的新提交,该消息描述在提交中完成了哪些工作
cd /path/to/project
echo "test content for git tutorial" >> CommitTest.txt
git add CommitTest.txt
git commit -m "added CommitTest.txt to the repo"

执行此示例后,您的代码库现在已经将 CommitTest.txt 添加到历史记录中,并跟踪该文件的未来更新。

此示例还引入了两个 git 命令:addcommit。这是一个非常有限的示例,但这两个命令在 git addgit commit 页面上都有更深入的介绍。git add 的另一个常见用例是 --all 选项。执行 git add --all 将在代码库中接收所有已更改和未跟踪的文件,并将它们添加到代码库,以及更新代码库的工作树。

库间协作:git push

Git 的“工作副本”的理念与通过从 SVN 代码库检出源代码所获得的工作副本截然不同,了解这一点很重要。与 SVN 不同,Git 不区分工作副本和中央代码库—它们都是完整的 Git 代码库

这就使与 Git 的协作从根本上不同于 SVN。SVN 依赖于中央代码库和工作副本之间的关系,而 Git 的协作模式基于代码库与代码库之间的互动,也就是不是将工作副本检入 SVN 的中央代码库,而是将提交从一个代码库推送或拉取到另一个代码库。

当然,您可以向某些 Git 代码库赋予特殊意义。例如,只需将一个 Git 代码库指定为“中央”代码库,就可以使用 Git 来复制集中式工作流。这通过约定而不是硬连线到 VCS 本身来实现。

裸代码库与克隆的代码库

如果您在之前的“初始化新代码库”部分中使用了 git clone 来设置本地代码库,那么您的代码库已经配置为进行远程协作。git clone 将自动配置代码库,并远程指向您所克隆的代码库的 Git URL。这意味着,对文件进行变更并提交这些变更后,您可以使用 git push 将这些变更推送到远程代码库。

如果您使用 git init 来创建新的代码库,将没有远程代码库来接收推送的变更。在初始化新代码库时,常见的模式是前往托管的 Git 服务(如 Bitbucket),并在那里创建一个代码库。该服务将提供一个 Git URL,您可以在之后将其添加到本地 Git 代码库,并使用 git push 推送到托管的代码库。使用您选择的服务创建远程代码库后,需要使用映射更新您的本地代码库。我们将在后面的“配置和设置”指南中讨论此过程。

如果您更喜欢托管自己的远程代码库,则需要设置一个“裸代码库”。git initgit clone 都接受 --bare 参数。裸代码库最常见的用例是创建远程中央 Git 代码库

配置和设置:git config

设置好远程代码库后,您需要将远程代码库 URL 添加到本地 git config,并为您的本地分支设置一个上游分支。git remote 命令提供此功能。

git remote add <remote_name> <remote_repo_url>

此命令会将 <remote_repo_url> 的远程代码库映射到本地代码库中 <remote_name> 下的 ref。映射远程代码库后,您可以将本地分支推送到远程代码库。

git push -u <remote_name> <local_branch_name>

此命令会将 <local_branc_name> 下的本地代码库分支推送到 <remote_name> 上的远程代码库。

要更深入了解 git remote 的信息,请参阅 Git 远程页面

除了配置远程代码库 URL 之外,您还需要设置全局 Git 配置选项,如用户名或电子邮件。使用 git config 命令可让您从命令行配置 Git 安装(或单独的代码库)。从用户信息到首选项,再到代码库行为,此命令可以定义的所有内容。以下列出了几个常用的配置选项。

Git 将配置选项存储在三个单独的文件中,这可以让您将选项分配给各个代码库(本地)、用户(全局)或整个系统(系统):

  • 本地:<repo>/.git/config – 代码库特定设置。
  • 全局:/.gitconfig – 用户特定设置。这是存储使用 --global 标记设置的选项的地方。
  • 系统:$(prefix)/etc/gitconfig – 系统范围的设置。

Define the author name to be used for all commits in the current repository. Typically, you’ll want to use the --global flag to set configuration options for the current user.

git config --global user.name<name>

Define the author name to be used for all commits by the current user.

添加 --local 选项或根本不传递配置级别的选项,将为当前本地代码库设置 user.name

git config --local user.email<email>

Define the author email to be used for all commits by the current user.

git config --global alias.<alias-name><git-command>

创建 Git 命令的快捷方式。这是为常用的 git 命令创建自定义快捷方式的强大实用程序。一个简单的示例是:

git config --global alias.cicommit

这将创建一个 ci 命令,可以作为 git commit 的快捷方式来执行。要了解有关 git 别名的更多信息,请访问 git config 页面

git config --system core.editor<editor>

定义当前计算机上所有用户的命令(如git commit)使用的文本编辑器。<editor> 参数应该是启动所需编辑器(例如 vi)的命令。此示例介绍了 --system 选项。--system 选项将设置整个系统(也就是计算机上的所有用户和代码库)的配置。有关配置级别的详细信息,请访问 git config 页面

git config --global --edit

在文本编辑器中打开全局配置文件进行手动编辑。有关如何为 Git 配置文本编辑器的深入指南,请参阅 Git config 页面

Discussion

所有配置选项都存储在纯文本的文件中,所以 git config 命令只是一个方便的命令行界面。通常情况下,您只需要在首次在新开发机器上开始工作时配置 Git 安装,而且对于几乎所有的情况,都建议您使用 --global 标记。一个重要的例外是要覆盖作者的电子邮件地址。建议您为个人和开源代码库设置个人电子邮件地址,为与工作相关的代码库设置工作用电子邮件地址。

Git stores configuration options in three separate files, which lets you scope options to individual repositories, users, or the entire system:

  • <repo>/.git/config – Repository-specific settings.
  • ~/.gitconfig – 用户特定设置。这是存储使用 --global 标记设置的选项的地方。
  • $(prefix)/etc/gitconfig – System-wide settings.

When options in these files conflict, local settings override user settings, which override system-wide. If you open any of these files, you’ll see something like the following:

[user] name = John Smith email = john@example.com[alias] st = status co = checkout br = branch up = rebase ci = commit [core] editor = vim

You can manually edit these values to the exact same effect as git config.

示例

The first thing you’ll want to do after installing Git is tell it your name/email and customize some of the default settings. A typical initial configuration might look something like the following:

Tell Git who you are git config

git --global user.name"John Smith" git config --global user.emailjohn@example.com

选择您喜欢的文本编辑器

git config --global core.editorvim

添加一些类似 SVN 的别名

git config --global alias.ststatus
git config --global alias.cocheckout
git config --global alias.brbranch
git config --global alias.uprebase
git config --global alias.cicommit

这将生成上一节中的 ~ /.gitconfig 文件。请在 git config 页面深入了解 git config 的更多信息。

Summary

在这里,我们演示如何用两种方法创建 git 代码库:git initgit clone。本指南适用于管理软件源代码或管理需要进行版本控制的其他内容。还简要介绍了 Git addgit commitgit pushgit remote 及其使用方式。 

阅读阐释哪个代码库系统适合您的团队的指南! 

Ready to learn Git?

Try this interactive tutorial.

立即开始