第 1.1 节:创建你的第一个仓库,然后添加和提交文件

在命令行中,首先确认已安装 Git:

在所有操作系统的命令行上,使用下面的命令,通过查看版本信息来确定git的安装情况:

git --version

也可以在类 UNIX 系统上直接查看git的安装路径等信息:

which git

如果执行上面的命令未返回任何内容,或报错命令未被识别,你可能需要在系统上安装 Git。可以从 Git 官网下载安装程序并运行安装,官网提供了清晰易懂的安装说明。

Git 安装完成后,需要配置你的用户名和电子邮件地址。这一步很重要。

接下来导航到你想要创建git版本控制仓库的目录下,使用命令创建并初始化一个空的 Git 仓库:

git init

这会创建一个名为 .git的隐藏文件夹,目录中包含 Git 正常运行所需的基础文件及目录。

接下来,检查 Git 将添加到新仓库中的文件;这一步需要特别注意:

git status

查看列出的文件列表;你可以告诉 Git 哪些文件需要置于版本控制之下(避免添加包含敏感信息的文件,如密码。或临时用于测试、笔记等的文件):

git add <file/directory name #1> <file/directory name #2> < ... >

如果列表中的所有文件都应与有权限访问仓库的每个人共享,一个命令即可将当前目录及其子目录中的所有文件添加进来:

git add .

这将“暂存”所有要添加到版本控制的文件,为首次提交做好准备。

对于你永远不想置于版本控制的文件,在运行添加命令前,创建并填充一个名为 .gitignore 的文件。

提交所有已添加的文件,以及提交信息:

git commit -m "Initial commit"

这将创建一个新的提交,附上给定的提交信息。提交就像是你整个项目的保存或快照。你现在可以将它推送到远程仓库,以后如有需要,也可以回溯到这个提交。

如果你省略了 -m 参数,你的默认编辑器将打开,你可以在其中编辑并保存提交信息。

添加远程仓库

要在终端使用 git remote add 命令添加新的远程仓库,该命令在你的仓库所在目录下执行。

git remote add 命令需要两个参数:

  1. 远程仓库名称,例如,origin
  2. 远程仓库 URL,例如,https://\/user/repo.git
git remote add origin https://<your-git-service-address>/owner/repository.git

注意:在添加远程仓库之前,你需要在 Git 服务上创建所需的仓库。添加远程仓库后,你将能够推送和拉取提交。

第 1.2 节:克隆仓库

git clone 命令用于将服务器上的现有 Git 仓库复制到本地机器。

例如,要克隆 GitHub 项目:

cd <path where you would like the clone to create a directory>
git clone https://github.com/username/projectname.git

要克隆 BitBucket 项目:

cd <path where you would like the clone to create a directory>
git clone https://yourusername@bitbucket.org/username/projectname.git

这将在本地机器上创建一个名为 projectname 的目录,其中包含远程 Git 仓库中的所有文件。这包括项目的源文件以及 .git 子目录,后者包含项目的完整历史和配置。

若要指定不同名称的目录,例如 MyFolder:

git clone https://github.com/username/projectname.git MyFolder

或者在当前目录下克隆:

git clone https://github.com/username/projectname.git .

注意:

  1. 当克隆到指定目录时,该目录必须为空或不存在。
  2. 你还可以使用 SSH 版本的命令:
git clone git@github.com:username/projectname.git

HTTPS 版本和 SSH 版本是等效的。然而,一些托管服务(如 GitHub)建议你使用 HTTPS 而非 SSH。

第 1.3 节:共享代码

要共享你的代码,你需要在远程服务器上创建一个仓库,并将你的本地仓库复制到该服务器。

为了尽量减少远程服务器上的空间使用,你创建一个裸仓库:一个仅包含 .git 对象且不会在文件系统中创建工作副本的仓库。作为额外的好处,你可以将此远程仓库设置为上游服务器,以便轻松与其他程序员共享更新。

在远程服务器上:

git init --bare /path/to/repo.git

在本地机器上:

git remote add origin ssh://username@server:/path/to/repo.git

(注意,ssh: 只是访问远程仓库的一种可能方式。)

现在将你的本地仓库复制到远程服务器:

git push --set-upstream origin master

添加 --set-upstream(或 -u)会创建一个上游(跟踪)引用,这将被无参数的 Git 命令使用,例如 git pull。

第 1.4 节:设置你的用户名和电子邮件

在创建任何提交之前,你需要设置你是谁。这将允许提交与正确的作者姓名和电子邮件相关联。

这与推送至远程仓库时的身份验证无关(例如,使用你的 GitHub、BitBucket 或 GitLab 账户推送至远程仓库)。

要为所有仓库声明身份,使用 git config --global。这将把设置存储在你的用户 .gitconfig 文件中:例如 $HOME/.gitconfig,在 Windows 上为 %USERPROFILE%/.gitconfig。

git config --global user.name "Your Name"
git config --global user.email mail@example.com

要为单个仓库声明身份,使用仓库内的 git config。

这将把设置存储在单个仓库的 $GIT_DIR/config 文件中,例如 /path/to/your/repo/.git/config。

cd /path/to/my/repo
git config user.name "Your Login At Work"
git config user.email mail_at_work@example.com

存储在仓库配置文件中的设置将优先于全局配置文件中的设置。

提示:如果你有多个身份(一个用于开源项目,一个用于工作,一个用于私人仓库等),并且你不想忘记为每个不同的仓库设置正确的身份:

移除全局身份

git config --global --remove-section user.name
git config --global --remove-section user.email

版本 ≥ 2.8

要强制 Git 只在仓库设置中查找你的身份,而不是全局配置:

git config --global user.useConfigOnly true

这样,如果你忘记为某个仓库设置 user.name 和 user.email 并尝试提交,你将看到:

no name was given and auto-detection is disabled
no email was given and auto-detection is disabled

第 1.5 节:设置上游远程仓库

如果你克隆了一个分叉(例如 GitHub 上的开源项目),你可能没有推送权限访问上游仓库,因此你需要既有自己的分叉,又要能够拉取上游仓库。

首先检查远程仓库名称:

$ git remote -v
origin https://github.com/myusername/repo.git (fetch)
origin https://github.com/myusername/repo.git (push)
upstream # this line may or may not be here

如果上游仓库已经存在(在某些 Git 版本中是这样),你需要设置 URL(当前它是空的):

$ git remote set-url upstream https://github.com/projectusername/repo.git

如果上游仓库不存在,或者你还要添加一个朋友/同事的分叉(当前它们可能不存在):

$ git remote add upstream https://github.com/projectusername/repo.git
$ git remote add dave https://github.com/dave/repo.git

第 1.6 节:了解一个命令

要获取有关任何 Git 命令的更多信息——即该命令的功能、可用选项及其他文档——使用 --help 选项或 help 命令。

例如,要获取有关 git diff 命令的所有可用信息,使用:

git diff --help
git help diff

同样,要获取有关 status 命令的所有可用信息,使用:

git status --help
git help status

如果你只想快速查看最常用命令行标志的含义,使用 -h:

git checkout -h

第 1.7 节:为 Git 设置 SSH

如果你使用的是 Windows 系统,请打开 Git Bash;如果你使用的是 Mac 或 Linux 系统,请打开终端。

在生成 SSH 密钥之前,你可以检查是否已存在任何现有的 SSH 密钥。

列出 ~/.ssh 目录中的内容:

$ ls -al ~/.ssh
# 列出 ~/.ssh 目录中的所有文件

查看目录列表,看看是否已经有一个你希望在 Bitbucket、GitHub(或其他类似)账户上使用的公钥 SSH 密钥。默认情况下,公钥的文件名是以下之一:

id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub

如果你看到一个你希望在 Bitbucket、GitHub(或其他类似)账户上使用的现有的公钥和私钥对,请复制 id_*.pub 文件的内容。

如果没有,你可以使用以下命令创建一个新的公钥和私钥对:

$ ssh-keygen

按 Enter 或 Return 键接受默认位置。在提示时输入并重新输入密码短语,或者留空。

确保你的 SSH 密钥已添加到 ssh-agent 中。如果 ssh-agent 还未运行,请在后台启动它:

$ eval "$(ssh-agent -s)"

将你的 SSH 密钥添加到 ssh-agent 中。注意,你需要将命令中的 id_rsa 替换为你私钥文件的名称:

$ ssh-add ~/.ssh/id_rsa

如果你想要将现有仓库的上游从 HTTPS 更改为 SSH,可以运行以下命令:

$ git remote set-url origin ssh://git@bitbucket.server.com:7999/projects/your_project.git

若要通过 SSH 克隆一个新的仓库,可以运行以下命令:

$ git clone ssh://git@bitbucket.server.com:7999/projects/your_project.git

第 1.8 节:Git 安装

让我们开始使用 Git。首先要做的是安装它。你可以通过多种方式安装它;两种主要方式是从源代码安装或为你的平台安装现有的软件包。

从源代码安装

如果可以的话,通常建议从源代码安装 Git,因为你会获得最新版本。Git 的每个版本通常都会包含一些有用的用户界面增强功能,所以如果你觉得从源代码编译软件比较舒服,获取最新版本通常是最佳选择。此外,许多 Linux 发行版包含的软件包版本非常旧;因此,除非你使用的是非常新的发行版或使用了回退包,否则从源代码安装可能是最佳选择。

要安装 Git,你需要安装 Git 依赖的以下库:curl、zlib、openssl、expat 和 libiconv。例如,如果你使用的是带有 yum(如 Fedora)的系统或带有 apt-get(如基于 Debian 的系统),你可以使用以下命令之一安装所有依赖项:

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

安装完所有必要的依赖项后,你可以从 Git 网站获取最新快照:http://git-scm.com/download 然后,编译并安装:

$ tar -zxf git-1.7.2.2.tar.gz
$ cd git-1.7.2.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

完成这些步骤后,你还可以通过 Git 本身获取更新:

$ git clone git://git.kernel.org/pub/scm/git/git.git

在 Linux 上安装

如果你希望在 Linux 上通过二进制安装程序安装 Git,你可以通常通过你的发行版自带的基本包管理工具来完成。如果你使用的是 Fedora,可以使用 yum:

$ yum install git

如果你使用的是基于 Debian 的发行版,如 Ubuntu,可以尝试 apt-get:

$ apt-get install git

在 Mac 上安装

在 Mac 上安装 Git 有三种简单的方法。最简单的方法是使用图形化 Git 安装程序,你可以从 SourceForge 页面下载。

http://sourceforge.net/projects/git-osx-installer/

另一种主要方法是通过 MacPorts 安装 Git(http://www.macports.org)。如果你已经安装了 MacPorts,可以通过以下命令安装 Git:

$ sudo port install git +svn +doc +bash_completion +gitweb

你不需要添加所有这些额外功能,但你可能希望包含 +svn,以防你以后需要使用 Git 与 Subversion 仓库一起工作(见第 8 章)。

Homebrew(http://brew.sh/)是安装 Git 的另一种选择。如果你已经安装了 Homebrew,可以通过以下命令安装 Git:

$ brew install git

在 Windows 上安装

在 Windows 上安装 Git 非常简单。msysGit 项目有一个非常简单的安装过程。只需从 GitHub 页面下载安装器 exe 文件并运行它:

http://msysgit.github.io

安装完成后,你将拥有一个命令行版本(包括稍后会派上用场的 SSH 客户端)和标准的 GUI。

关于 Windows 使用的说明:你应该使用提供的 msysGit Shell(Unix 风格),这样可以使用本书中给出的复杂命令行。如果你出于某种原因需要使用 Windows 原生 Shell / 命令行控制台,对于带有空格的参数,你需要使用双引号而不是单引号,并且如果你需要在行的末尾使用脱字符(^)作为参数,你也必须将其引起来,因为在 Windows 中脱字符是续行符号。