本教程将简要介绍最重要的Git命令。首先,设置仓库部分将介绍启动新版本控制项目所需的所有工具。然后,其余部分介绍您的日常Git命令。
在本章结束后,您应该能够创建一个Git仓库,记录您的项目的快照以进行保管,并查看项目的历史记录。
git init
git init命令创建一个新的Git仓库。它可以用于将已经存在、未版本化的项目转换为Git仓库或初始化新的空仓库。大多数其他Git命令在初始化的仓库之外不可用,因此通常这是您将在新项目中运行的第一个命令。
在项目根目录中执行git init命令会创建一个.git子目录,其中包含repo所需的所有必要元数据。除了.git目录之外,现有的项目保持不变(与SVN不同,Git不需要每个子目录都有.git文件夹)。
用法
git init
将当前目录转换为Git仓库。这将添加一个.git文件夹到当前目录,并可以开始记录项目的修订版本。
git init <directory>
在指定的目录中创建一个空的Git仓库。运行此命令将创建一个新文件夹<directory,该文件夹仅包含.git子目录。
git init --bare <directory>
初始化一个空的Git仓库,但省略工作目录。应始终使用–bare标志创建共享的仓库(参见下面的讨论)。传统做法,用–bare标志初始化的仓库以.git作为结束名。例如,叫做my-project仓库的裸版本应该存储在一个名为的目录中my-project.git。
讨论
与SVN相比,git init命令是创建新版本控制项目的一个非常简单的方法。Git不要求您创建一个仓库,导入文件和检出工作副本。所有你需要做的是cd进入你的项目文件夹并运行git init,你将有一个完全功能的Git仓库。
然而,对于大多数项目,git init只需要在创建中央仓库时执行一次即可 - 开发人员通常不使用git init来创建其本地仓库。相反,它们通常用于git clone将现有仓库复制到其本地计算机上。
裸仓库
该–bare标志创建一个没有工作目录的仓库,使得无法在该仓库中编辑文件并提交更改。中央仓库应始终创建为裸仓库,因为将分支推送到非裸仓库有可能覆盖更改。可以将–bare将仓库标记为存储设备,与开发环境相反。这意味着对于几乎所有Git工作流程,中央仓库是裸仓库,开发人员本地仓库是非裸的。
示例
由于git clone是创建项目的本地副本的更方便的方法,最常见的用例git init是创建一个中央仓库:
ssh <user>@<host>
cd path/above/repo
git init --bare my-project.git
首先,您将SSH插入将包含您的中央仓库的服务器。然后,您导航到要存储项目的任何地方。最后,您使用–bare标志来创建中央仓库。然后克隆 my-project.git,开发人员将在其开发机器上创建本地副本。
git克隆
git clone命令复制现有的Git仓库。这是一种类似的东西svn checkout,除了“工作副本”是一个完整的Git仓库 - 它有自己的历史,管理自己的文件,对原始仓库来说是一个完全孤立的环境。
为方便起见,克隆会自动创建一个名为origin的远程连接,指向原始仓库。这使得它非常容易与中央仓库进行交互。
用法
git clone <repo>
克隆位于
git clone <repo> <directory>
克隆位于
讨论
如果项目已经在中央仓库中设置,则git clone命令是用户获取开发副本的最常见方式。像git init 克隆通常是一次性操作 - 一旦开发人员获得了工作副本,所有的版本控制操作和协作都是通过本地仓库管理的。
仓库与仓库间协作
了解Git对“工作副本”的概念与通过从SVN信息库中检出代码所获得的工作副本的区别很重要。与SVN不同,Git不区分工作副本和中央仓库 - 它们都是完整的Git仓库。
这与Git中仓库协作与SVN几乎不同。SVN依赖于中央仓库和工作副本之间的关系,而Git的协作模型基于仓库与仓库的交互。在Git中不是像SVN一样在SVN的中央资料库检入检出到本地的工作拷贝,你推或拉一个仓库的提交到另一个。
当然,没有什么阻止你给予某些Git repos的特殊意义。例如,通过简单地将一个Git repo指定为“中央”仓库,可以使用Git复用集中式工作流。关键点是,这是通过约定而不是硬连线到VCS本身来实现。
示例
下面的示例演示了如何获取存储在example.com服务器的中央仓库,使用SSH username john访问的服务器上:
git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# Start working on the project
第一个命令在my-project本地计算机上的文件夹中初始化一个新的Git仓库,并使用中央仓库的内容进行填充。然后,您可以cd进入项目并开始编辑文件,提交快照以及与其他仓库进行交互。还要注意,
克隆的仓库中省略了.git扩展名。这反映了本地副本的非裸体状态。
git配置
git config命令允许您从命令行配置Git安装(或单个仓库)。此命令可以定义从用户信息到首选项到仓库行为的所有内容。下面列出了几个常见的配置选项。
用法
git config user.name <name>
定义要用于当前仓库中的所有提交的作者名称。通常,您需要使用该–global标志为当前用户设置配置选项。
git config --global user.name <name>
定义当前用户所有提交的作者姓名。
git config --global user.email <email>
定义作者电子邮件用于当前用户的所有提交。
git config --global alias.<alias-name> <git-command>
为Git命令创建快捷方式。
git config --system core.editor <editor>
定义当前机器上所有用户命令(如git commit)所使用的文本编辑器。
git config --global --edit
在文本编辑器中打开全局配置文件进行手动编辑。
讨论
所有配置选项存储在明文文件中,因此该git config命令实际上只是一个方便的命令行界面。通常,您首次在新开发机器上开始工作时,您只需要配置Git安装,对于几乎所有的情况,您都需要使用–global标志。
Git将配置选项存储在三个单独的文件中,可以将选项范围分配到各个仓库,用户或整个系统:
/.git/config - 仓库特定的设置。 ~/.gitconfig - 用户特定的设置。这是–global存储使用标志设置的选项。
- $(prefix)/etc/gitconfig - 系统范围的设置。
当这些文件中的选项发生冲突时,本地设置将覆盖用户设置,用户设置覆盖系统范围配置。如果您打开任何这些文件,您将看到如下所示:
[user]name = John Smith
email = john@example.com
[alias]st = status
co = checkout
br = branch
up = rebase
ci = commit
[core]editor = vim
您可以手动编辑这些值与完全相同的效果git config。
示例
安装Git之后,首先要做的就是告诉你你的名字/电子邮件,并自定义一些默认设置。典型的初始配置可能如下所示:
# Tell Git who you are
git config --global user.name "John Smith"git config --global user.email john@example.com
# Select your favorite text editor
git config --global core.editor vim
# Add some SVN-like aliases
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.up rebase
git config --global alias.ci commit
这将产生~/.gitconfig上一节中的文件。