目录

1. 介绍2. 安装Git3. 配置Git3.1 设置用户名和电子邮件地址1. 使用全局设置2. 使用项目特定设置

3.2 如何配置全局和项目特定的Git设置1. 配置全局设置2. 配置项目特定设置

4. 创建仓库4.1 在本地创建新的仓库4.2 在远程创建新的仓库4.3 将现有项目初始化为Git仓库5. 基本操作

5. 远程仓库与本地关联5.1 `git clone`5.2 `git remote add origin `

6. 推送代码6.1 `git push -u origin main`6.2 `git push`

7. 登录验证和SSH协议7.1 SSH协议7.2 Git中的SSH1. SSH 密钥生成2. SSH 连接建立3. 认证过程4. 验证过程5. 数据传输过程

7.3 SSH优势

本系列使读者能够快速上手并有效地使用Git进行版本控制。

1. 介绍

解释什么是Git,它的作用以及为什么它对于软件开发团队如此重要。

Git是一种分布式版本控制系统,旨在管理软件开发项目的代码。它由Linus Torvalds于2005年创建,并且成为了目前最流行的版本控制系统之一。

作用:

版本控制: Git能够跟踪文件的更改历史,记录每一次修改、添加或删除,以及谁在何时进行了这些更改。团队协作: Git允许多个开发者同时在同一项目上工作,而不会相互干扰。它提供了分支(Branch)的功能,使得团队成员可以并行开发不同的功能,然后合并(Merge)它们的工作。备份和恢复: 所有的项目历史都存储在本地和远程仓库中,这使得开发者可以轻松地备份和恢复项目到之前的任意状态。跟踪变更: Git可以精确地追踪文件的每一次更改,包括谁进行了更改,以及修改了什么内容。分布式开发: 每个开发者都可以在本地拥有完整的项目副本,这意味着即使在没有网络连接的情况下也能继续工作,同时也减少了对中央服务器的依赖。

为什么对软件开发团队如此重要:

协作效率: Git使得团队成员能够轻松地共享代码,并且无需担心覆盖或丢失其他人的更改,从而提高了团队的协作效率。版本控制: 通过Git,团队可以跟踪项目的每一个变化,并且可以轻松地回滚到之前的任何状态,这有助于减少错误和问题的出现。灵活性: Git的分支功能使得团队可以同时进行多个并行开发任务,而不会相互干扰,从而提高了开发的灵活性和效率。安全性: Git通过权限控制和加密传输确保代码的安全性,防止未经授权的访问和更改。

总之,Git作为一种强大的版本控制工具,不仅为软件开发团队提供了高效的协作平台,而且保障了代码的安全性和可追溯性,因此在现代软件开发中不可或缺。

2. 安装Git

官方网站提供了适用于不同操作系统的安装指南(Windows、macOS、Linux),包括使用命令行和图形用户界面两种方式的安装步骤。

本地查看 git 版本:

git --version

3. 配置Git

设置用户名和电子邮件地址,以便在提交代码时进行身份验证。以及介绍如何配置全局和项目特定的Git设置。

3.1 设置用户名和电子邮件地址

要设置用户名和电子邮件地址以便在提交代码时进行身份验证,可以按照以下步骤操作:

1. 使用全局设置

可以先通过如下命令查看是否有全局配置:

git config --global --list

如果你希望在所有的Git仓库中使用相同的用户名和电子邮件地址,可以使用全局设置。

打开命令行终端(例如,在Windows中可以使用命令提示符或PowerShell,在macOS和Linux中可以使用终端)。 输入以下命令来设置全局用户名:

git config --global user.name "Your Name"

替换 "Your Name" 为你想要设置的用户名。

输入以下命令来设置全局电子邮件地址:

git config --global user.email "your.email@example.com"

替换 "your.email@example.com" 为你想要设置的电子邮件地址。

2. 使用项目特定设置

可以先通过如下命令查看当前项目是否有配置:

git config --local --list

如果你希望在特定的Git仓库中使用不同的用户名和电子邮件地址,可以使用项目特定的设置。在这种情况下,将省略 --global 标志。

在你的项目目录中打开命令行终端。 输入以下命令来设置项目特定的用户名:

git config user.name "Your Name"

替换 "Your Name" 为你想要设置的用户名。

输入以下命令来设置项目特定的电子邮件地址:

git config user.email "your.email@example.com"

替换 "your.email@example.com" 为你想要设置的电子邮件地址。

完成以上步骤后,你的用户名和电子邮件地址就已经设置好了。在你提交代码时,Git会使用这些信息来标识你的身份。

在Git中,即使你不设置用户名和电子邮件地址,你仍然可以使用Git进行基本的版本控制操作,比如提交更改、创建分支等。Git不会强制要求设置这些信息,但是为了保证代码提交的可追溯性、团队协作的效率以及项目的安全性,设置用户名和电子邮件地址是十分重要的步骤,是使用Git时应该重视的事项之一。

3.2 如何配置全局和项目特定的Git设置

要配置全局和项目特定的Git设置,你可以使用 git config 命令。以下是如何配置这两种类型设置的方法:

1. 配置全局设置

全局设置适用于当前用户的所有Git仓库,这意味着无论你在哪个仓库中都会使用相同的配置。一般使用 --global。

2. 配置项目特定设置

项目特定设置只适用于当前Git仓库,这意味着每个仓库可以有不同的配置。一般使用 --local。

完成上述配置后,你的Git配置就已经设置好了。你可以在任何Git操作中使用这些配置,比如提交代码时,Git会使用你设置的用户名和电子邮件地址来标识你的身份。

4. 创建仓库

解释什么是仓库(Repository),以及如何在本地或远程创建新的仓库。以及介绍如何将现有项目初始化为Git仓库。

仓库(Repository)是一个存储项目代码和相关文件的地方,它可以是本地的一个文件夹,也可以是托管在远程服务器上的代码仓库。在一个仓库中,你可以保存项目的所有版本历史、分支信息以及相关的元数据。

4.1 在本地创建新的仓库

要在本地创建一个新的仓库,可以按照以下步骤进行:

打开命令行终端或者使用Git图形用户界面。 进入你想要作为仓库的根目录。 使用 git init 命令来初始化一个新的Git仓库,这将在当前目录下创建一个隐藏的 .git 文件夹,用来存储Git的版本控制信息。 如果需要,可以添加项目文件到仓库中,使用 git add 命令来添加文件到暂存区。 使用 git commit 命令来提交文件到仓库,这样就完成了本地仓库的创建和初始化。

4.2 在远程创建新的仓库

要在远程创建一个新的仓库,通常是在代码托管服务(如GitHub、GitLab、Bitbucket等)中进行。以GitHub为例:

登录到你的GitHub账号。 点击页面右上角的加号按钮(“+”),然后选择 “New repository”。 输入仓库名称、描述等信息,并选择是否设置为公开或私有仓库。 点击 “Create repository” 完成仓库创建。

4.3 将现有项目初始化为Git仓库

如果你已经有一个现有的项目,并希望将其初始化为Git仓库,可以按照以下步骤进行:

打开命令行终端或者使用Git图形用户界面。 进入你的项目目录。 使用 git init 命令来初始化一个新的Git仓库,这将在当前目录下创建一个隐藏的 .git 文件夹,用来存储Git的版本控制信息。 如果需要,可以添加项目文件到仓库中,使用 git add 命令来添加文件到暂存区。 使用 git commit 命令来提交文件到仓库,这样就完成了项目的初始化,并将其转换为Git仓库。

通过以上步骤,你可以在本地或远程创建新的Git仓库,并将现有项目初始化为Git仓库,从而开始使用Git进行版本控制。

5. 基本操作

解释Git的基本工作流程,包括添加文件、提交更改、查看状态、查看历史记录等。演示如何使用Git命令行和图形用户界面执行这些操作。

5. 远程仓库与本地关联

以 Github 为例。

5.1 git clone

这是第一个方式,远端创建的新项目,然后将其拉到本地。

你可以使用 git clone 命令。这个命令可以从远程仓库中克隆(复制)整个项目到你的本地计算机上。具体来说,使用 git clone 命令的步骤如下:

打开命令行终端。 在命令行中,进入你想要存放项目的目录。例如,使用 cd 命令进入到你的项目存放目录:

cd path/to/your/directory

使用 git clone 命令来克隆远程仓库。假设远程仓库的URL是 https://github.com/username/repository.git,那么克隆命令就是:

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

如果你使用的是SSH协议的URL,命令会是:

git clone git@github.com:username/repository.git

Git会在当前目录下创建一个与远程仓库同名的文件夹,并将远程仓库的所有文件复制到这个文件夹中。

等待克隆完成。Git会自动下载远程仓库的所有文件,并在本地创建一个与远程仓库同名的文件夹。

一旦克隆完成,你就可以在本地计算机上使用该项目了。你可以进入克隆得到的项目文件夹,进行修改、提交、推送等操作,与任何其他本地Git仓库一样。

5.2 git remote add origin

这是第二个方式,远端创建了新项目,并希望将本地的项目与其链接。

git remote add origin 是一个用于将远程仓库链接到本地仓库的命令。

用法如下:

是远程仓库的地址。这个地址可以是HTTP、HTTPS、SSH等协议的URL,用于指定远程仓库的位置。比如,如果你要将远程仓库的URL设置为 https://github.com/username/repository.git,那么命令就是:

git remote add origin https://github.com/username/repository.git

当你执行了 git remote add origin 命令后,Git会将指定的远程仓库地址关联到名为 origin 的远程仓库上。这样,你就可以使用 origin 这个名称来代表这个远程仓库,方便你在进行远程操作时引用它,比如推送代码到远程仓库或者拉取远程仓库的更新等。

一旦执行了 git remote add origin 命令,你就可以使用其他Git命令来与远程仓库进行交互,例如 git push 推送本地提交到远程仓库,或者 git pull 拉取远程仓库的更新到本地等。

6. 推送代码

6.1 git push -u origin main

对于上述关于远程仓库与本地关联的第二种方式,一般还需要用 git push -u origin main 命令将本地分支的更改推送到远程仓库,并将本地分支与远程仓库的分支进行关联。

下面是 GitHub 示例:

git remote add origin https://github.com/username/repository.git

git branch -M main

git push -u origin main

具体来说,每个部分的含义如下:

git push: 这是Git的推送命令,用于将本地的提交推送到远程仓库。 -u: 这是 --set-upstream 的缩写。使用 -u 参数,可以将本地分支与远程仓库的分支进行关联。一旦关联完成,之后的推送操作就可以简化为 git push,Git会自动将更改推送到已关联的远程分支。 origin: 这是远程仓库的名称。在之前使用 git remote add 命令关联本地仓库与远程仓库时,通常会使用 origin 作为远程仓库的名称。你也可以根据需要使用其他名称。 main: 这是你要推送到远程仓库的本地分支的名称。通常情况下,远程仓库的主分支(如GitHub的默认分支)也被称为 main 或 master。

因此,git push -u origin main 的作用是将当前本地分支的更改推送到名为 origin 的远程仓库的 main 分支,并将本地分支与远程仓库的 main 分支进行关联。

6.2 git push

在下述情况,我们可以直接使用 git push 命令进行推送:

已经设置了默认远程分支: 如果你在之前使用 git push -u 命令将本地分支与远程分支进行关联,那么之后的推送操作就可以直接使用 git push 命令。Git会自动将更改推送到已关联的默认远程分支。 当前分支与远程分支一一对应: 如果当前的本地分支与远程分支存在一一对应关系,即它们的名称相同,那么你也可以直接使用 git push 命令进行推送。

例如一个基于 main 创建的名为 feature 的特性分支,其更改需要推送到远程仓库。

首先,确保你当前在 feature 分支上。

git checkout feature

如果你之前已经使用过 git push -u origin feature 命令将本地的 feature 分支与远程仓库进行关联,那么你可以直接执行以下命令:

git push

这个命令会自动将当前分支(即 feature 分支)的更改推送到远程仓库的 feature 分支中。

如果你还没有使用过 git push -u origin feature 命令将本地分支与远程分支进行关联,你需要先执行这个命令进行关联(如果远程仓库中没有名为 feature 的分支,那么 git push -u origin feature 命令会创建一个新的名为 feature 的分支,并将本地的 feature 分支推送到远程仓库中),然后才能使用 git push 命令直接推送更改到远程仓库。

总之,只要当前分支与远程分支一一对应,并且已经进行了关联,你就可以直接使用 git push 命令来推送你的更改到远程仓库中。

7. 登录验证和SSH协议

如果你之前没有配置过SSH密钥,而且执行了 git push -u origin feature 命令,Git会尝试使用HTTPS协议进行通信。在这种情况下,Git会要求你输入远程仓库的用户名和密码来进行身份验证。

注意,通过https协议时,每次推送都要填写用户名和密码。

7.1 SSH协议

SSH(Secure Shell)是一种网络协议,用于在网络上安全地进行远程登录和执行命令。它通过加密的方式来保护通信的安全性,防止信息被窃取或篡改。

SSH协议通常用于以下几个方面:

远程登录(SSH登录): 通过SSH协议,用户可以远程登录到其他计算机或服务器上,并在远程系统上执行命令,就像是在本地计算机上操作一样。SSH登录提供了一种安全的远程管理方式,用于管理和维护远程服务器。 文件传输(SCP、SFTP): SSH协议还提供了安全的文件传输功能,其中包括SCP(Secure Copy)和SFTP(SSH File Transfer Protocol)。使用这些工具,用户可以在本地计算机和远程服务器之间传输文件,而且传输过程是加密的,确保文件传输的安全性。 远程命令执行(SSH命令执行): 除了远程登录之外,SSH还允许用户在远程计算机上执行命令,而不需要登录到远程系统的交互式会话中。这对于自动化脚本和远程管理非常有用。

7.2 Git中的SSH

在软件开发中,SSH协议经常用于与远程Git仓库进行通信。当你通过SSH协议与远程Git仓库进行通信时,你可以在不需要每次输入用户名和密码的情况下进行认证。

这是通过在本地计算机上生成一对公钥和私钥来实现的。公钥保存在远程Git仓库中,私钥保存在本地计算机上。当你与远程Git仓库通信时,远程仓库会要求你提供私钥进行身份验证,如果私钥匹配远程仓库中的公钥,则认证成功。

在 GitHub 和计算机设备之间进行 SSH 交互涉及到加密、解密和认证等过程。下面是简要的交互过程以及涉及的加解密步骤:

1. SSH 密钥生成

用户在计算机设备上生成 SSH 密钥对,包括公钥和私钥。公钥和私钥保存在计算机设备上的 ~/.ssh 目录下。将这个公钥在 GitHub-安全设置-SSH 中添加。

2. SSH 连接建立

用户通过 SSH 客户端向 GitHub 服务器发起连接请求。GitHub 服务器返回其公钥给客户端,该公钥通常存储在 ~/.ssh/known_hosts 文件中。

3. 认证过程

用户通过 SSH 客户端向 GitHub 服务器发送认证请求,该请求包含用户的身份信息以及用于加密通信的随机数据。GitHub 服务器使用其存储的用户公钥对随机数据进行加密。服务器将加密后的数据发送给客户端。

4. 验证过程

客户端收到服务器发送的加密数据后,使用之前存储的服务器私钥对数据进行解密。客户端将解密后的数据与原始随机数据进行比较。如果匹配,认为服务器是可信的。

这个认证和验证过程中,GitHub 服务器使用用户的公钥对随机数据进行加密,以确保只有对应的私钥可以解密该数据。客户端使用存储在本地的私钥对服务器发送的加密数据进行解密,以获取原始的随机数据。

5. 数据传输过程

认证通过后,双方使用会话密钥(通过 Diffie-Hellman 密钥交换协议协商而来)对真实需要被传递的通信数据进行加密和解密。客户端和服务器之间的所有数据传输都经过加密处理,保证了数据的机密性和完整性。

在整个 SSH 连接建立和数据传输过程中,加密和解密保证了数据的安全性,使得用户可以安全地与 GitHub 服务器进行通信,例如进行代码推送、拉取等操作,而不用担心数据被窃取或篡改。

7.3 SSH优势

以下是SSH相比HTTPS协议的几个优势:

身份验证: SSH协议使用公钥和私钥对来进行身份验证。在SSH通信中,用户使用私钥进行身份验证,而远程服务器使用与用户关联的公钥进行验证。这种方式比基于用户名和密码的身份验证更安全,因为私钥通常比密码更难被破解。HTTPS协议通常使用用户名和密码进行身份验证,相比之下,这种方式更容易受到暴力破解攻击。 连接持续性: SSH连接是持久的,一旦建立连接,它可以保持活动状态并在需要时重新使用,从而减少了每次连接的开销。相比之下,HTTPS连接通常是临时的,每次通信都需要建立一个新的连接,这可能会增加通信的延迟和开销。 端口灵活性: SSH协议通常使用22号端口进行通信,但是可以通过配置更改端口号。相比之下,HTTPS协议通常使用443号端口,无法更改。

总的来说,SSH协议在身份验证和连接持续性方面具有优势,特别是在需要保护通信安全性和身份验证的场景下,如远程登录、文件传输和远程命令执行。HTTPS协议也提供了加密传输和身份验证功能,但是在某些方面不如SSH协议那样灵活和安全。

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: