Git开始使用Git


备注

Git是一个免费的分布式版本控制系统,它允许程序员通过“快照”(提交)在当前状态下跟踪代码更改。利用提交允许程序员协同测试,调试和创建新功能。所有提交都保存在所谓的“Git存储库”中,可以托管在您的计算机,私有服务器或开源网站上,例如Github。

Git还允许用户创建代码的新“分支”,这允许不同版本的代码彼此并存。这使得一个分支包含最新稳定版本,不同分支包含正在开发的一组新功能,而另一个分支包含一组不同功能的情况。 Git创建了这些分支的过程,然后将它们合并在一起,几乎无痛。

Git为您的代码提供了3个不同的“区域”:

  • 工作目录 :您将完成所有工作的区域(创建,编辑,删除和组织文件)
  • 暂存区域 :您将列出对工作目录所做更改的区域
  • 存储库 :Git永久存储您作为项目的不同版本所做的更改

Git最初是为管理Linux内核源而创建的。通过使它们更容易,它鼓励小型提交,分叉项目和在叉之间合并,以及拥有许多短期分支。

习惯于CVS或Subversion的人最大的变化是每个结账不仅包含源树,还包含项目的整个历史。常见的操作包括修改版本,检查旧版本,提交(到您的本地历史记录),创建分支,签出不同的分支,合并分支或补丁文件都可以在本地完成,而无需与中央服务器通信。因此,消除了潜在的延迟和不可靠性的最大来源。只需获取最新更改,并将本地更改发布给其他开发人员,只需与“上游”存储库进行通信即可。这将以前的技术限制(无论谁拥有存储库拥有项目)转变为组织选择(您的“上游”是您选择同步的任何人)。

版本

发布日期
2.13 2017年5月10日
2.12 2017年2月24日
2.11.1 2017年2月2日
2.11 2016年11月29日
2.10.2 2016年10月28日
2.10 2016年9月2日
2.9 2016年6月13日
2.8 2016年3月28日
2.7 2015年10月4日
2.6 2015年9月28日
2.5 2015年7月27日
2.4 2015年4月30日
2.3 2015年2月5日
2.2 情节中字
2.1 2014年8月16日
2.0 2014年5月28日
1.9 2014年2月14日
1.8.3 2013年5月24日
1.8 2012年10月21日
1.7.10 2012-04-06
1.7 2010-02-13
1.6.5 2009-10-10
1.6.3 2009-05-07
1.6 2008-08-17
1.5.3 2007-09-02
1.5 2007-02-14
1.4 2006-06-10
1.3 2006-04-18
1.2 2006-02-12
1.1 2006-01-08
1.0 2005-12-21
0.99 2005-07-11

创建第一个存储库,然后添加和提交文件

在命令行中,首先验证您是否安装了Git:

在所有操作系统上:

git --version
 

在类UNIX操作系统上:

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 版本控制的文件,请在运行add 命令之前创建并填充名为.gitignore 的文件

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

git commit -m "Initial commit"
 

使用给定的消息创建新的提交 。提交就像是整个项目的保存或快照。您现在可以将其推送或上传到远程存储库,稍后您可以在必要时跳回到它。
如果省略-m 参数,则将打开默认编辑器,您可以在其中编辑并保存提交消息。

添加遥控器

要添加新远程数据库,请在存储库所在目录中的终端上使用git remote add 命令。

git remote add 命令有两个参数:

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

注意:在添加遥控器之前,您必须在git服务中创建所需的存储库,添加遥控器后,您将能够推/拉提交。

克隆存储库

git clone 命令用于将现有Git存储库从服务器复制到本地计算机。

例如,要克隆GitHub项目:

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

要克隆BitBucket项目:

cd <path where you'd 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

Git安装

让我们开始使用一些Git。首先要做的就是安装它。你可以通过多种方式获得它;两个主要的是从源安装它或为您的平台安装现有的包。

从源安装

如果可以,从源代码安装Git通常很有用,因为您将获得最新版本。每个版本的Git都包含有用的UI增强功能,因此如果您愿意从源代码编译软件,那么获取最新版本通常是最佳选择。许多Linux发行版也包含非常旧的包;因此,除非您使用最新的发行版或正在使用backport,否则从源代码安装可能是最好的选择。

要安装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以获取更新:

$ 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/

图1-7。 Git OS X安装程序。另一个主要方法是通过MacPorts( http://www.macports.org)安装Git。如果您安装了MacPorts,请安装Git via

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

您不必添加所有额外内容,但是您可能希望包含+ svn,以防您必须使用Git和Subversion存储库(请参阅第8章)。

Homebrew( http://brew.sh/)是另一种安装Git的方法。如果您安装了Homebrew,请安装Git via

$ brew install git
 

在Windows上安装

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

http://msysgit.github.io
 

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

关于Windows用法的注意事项:你应该使用Git和提供的msysGit shell(Unix风格),它允许使用本书中给出的复杂命令行。如果由于某种原因需要使用本机Windows shell /命令行控制台,则必须使用双引号而不是单引号(对于包含空格的参数),并且必须引用以抑扬音重音结尾的参数(^ )如果它们是最后一行,因为它是Windows中的延续符号。

了解一个命令

要获取有关任何git命令的更多信息 - 即有关命令的功能,可用选项和其他文档的详细信息 - 请使用--help 选项或help 命令。

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

git diff --help
git help diff
 

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

git status --help
git help status
 

如果您只想快速帮助向您显示最常用的命令行标志的含义,请使用-h

git checkout -h
 

为Git设置SSH

如果您使用Windows打开Git Bash 。如果您使用的是MacLinux,请打开终端。

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

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

$ ls -al ~/.ssh 
# Lists all the files in your ~/.ssh directory
 

检查目录列表以查看是否已有公共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
 

设置上游远程

如果您克隆了一个fork(例如Github上的一个开源项目),您可能没有对上游存储库的推送访问权限,因此您需要两个fork,但能够获取上游存储库。

首先检查远程名称:

$ 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
 

如果已经存在upstream (它在某些 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
 

设置您的用户名和电子邮件

You need to set who you are *before* creating any commit.  That will allow commits to have the right author name and email associated to them.
 

推送到远程存储库时 (例如,使用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
 

要声明单个存储库的标识,请在repo中使用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.nameuser.email 并尝试进行提交,您将看到:

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

共享代码

要共享代码,请在远程服务器上创建一个存储库,您将复制本地存储库。

为了最大限度地减少远程服务器上的空间使用,您需要创建一个裸存储库:一个只包含.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