如何在Linux中使用Git版本控制系统【综合指南】
版本控制(修订控制或源代码控制)是一种记录文件或文件集合随时间变化的方式,以便您以后可以调用特定版本。版本控制系统(或简称VCS)是一种记录文件系统上文件更改的工具。
版本控制系统有很多,但 Git 是目前最流行和最常用的,尤其是在源代码管理方面。版本控制实际上可以用于计算机上几乎任何类型的文件,而不仅仅是源代码。
版本控制系统/工具提供了多种功能,允许个人或一群人:
- 创建项目的版本。
- 准确跟踪变化并解决冲突。
- 将更改合并到通用版本中。
- 回滚并撤消对选定文件或整个项目的更改。
- 访问项目的历史版本以比较随时间的变化。
- 查看谁最后修改了可能导致问题的内容。
- 创建项目的安全异地备份。
- 使用多台机器处理单个项目等等。
在 Git 等版本控制系统下的项目主要分为三个部分,即:
- 存储库:用于记录项目文件的状态或更改的数据库。它包含新项目所需的所有 Git 元数据和对象。请注意,这通常是您从网络或远程服务器上的另一台计算机克隆存储库时复制的内容。
- 工作目录或区域:存储您可以处理的项目文件的副本(进行添加、删除和其他修改操作)。
- 暂存区域:Git 目录中的一个文件(在 Git 下称为索引),用于存储有关更改的信息,您准备将其提交(保存一个文件或一组文件的状态)到存储库。
VCS 主要有两种类型,主要区别在于存储库的数量:
- 集中版本控制系统(CVCS):这里每个项目团队成员都有自己的本地工作目录,但是,他们只将更改提交到一个中央存储库。
- 分布式版本控制系统(DVCS):在此之下,每个项目团队成员都可以获得自己的本地工作目录和可以进行提交的 Git 目录。个人在本地进行提交后,其他团队成员无法访问更改,直到他/她将更改推送到中央存储库。 Git 是 DVCS 的一个示例。
此外,Git 存储库可以是裸(没有工作目录的存储库)或非裸(具有工作目录的存储库)目录)。 共享(或公共或中央)存储库应始终是裸露的 - 所有 Github 存储库都是裸露的。
学习使用 Git 进行版本控制
Git 是一个免费、开源、快速、强大、分布式、易于使用且流行的版本控制系统,对于大型项目非常高效,并且具有出色的分支和合并系统。它的设计目的更像是处理存储在 Git 目录中的迷你文件系统的一系列快照。
Git 下的工作流程非常简单:您对工作目录中的文件进行修改,然后有选择地将那些已更改的文件添加到暂存区域,作为下一次提交的一部分。
准备就绪后,您可以进行提交,这会从暂存区域获取文件并将该快照永久保存到 Git 目录中。
要在 Linux 中安装 Git,请使用适合您选择的发行版的命令:
sudo apt install git [On Debian/Ubuntu]
sudo yum install git [On CentOS/RHEL]
安装 Git 后,建议您通过提供您的全名和电子邮件地址来告诉 Git 您是谁,如下所示:
git config --global user.name “Aaron Kili”
git config --global user.email “[email ”
要检查您的 Git 设置,请使用以下命令。
git config --list
创建一个新的 Git 存储库
共享存储库或集中式工作流程非常常见,这就是我们将在这里演示的内容。例如,我们假设您的任务是为组织中各个部门的系统管理员/程序员设置一个远程中央存储库,以处理名为 bashscripts 的项目,该项目将存储在 >/projects/scritpts/ 在服务器上。
SSH 到远程服务器并创建必要的目录,创建一个名为 sysadmins 的组(将所有项目团队成员添加到该组,例如用户 admin),并设置适当的权限这个目录。
mkdir-p /projects/scripts/
groupadd sysadmins
usermod -aG sysadmins admin
chown :sysadmins -R /projects/scripts/
chmod 770 -R /projects/scripts/
然后初始化一个裸项目存储库。
git init --bare /projects/scripts/bashscripts
此时,您已经成功初始化了一个裸 Git 目录,它是项目的中央存储设施。尝试列出目录以查看其中的所有文件和目录:
ls -la /projects/scripts/bashscripts/
克隆 Git 存储库
现在,通过 SSH 将远程共享 Git 存储库克隆到本地计算机(如果您安装并适当配置了 Web 服务器,也可以通过 HTTP/HTTPS 克隆,就像Github 上大多数公共存储库的情况),例如:
git clone ssh://admin@remote_server_ip:/projects/scripts/bashscripts
要将其克隆到特定目录 (~/bin/bashscripts),请使用以下命令。
git clone ssh://admin@remote_server_ip:/projects/scripts/bashscripts ~/bin/bashscripts
您现在在非裸存储库(带有工作目录)中有一个项目的本地实例,您可以创建项目的初始结构(即添加README.md 文件,不同类别脚本的子目录,例如 recon 存储侦察脚本,sysadmin ro 存储 sysadmin 脚本等):
cd ~/bin/bashscripts/
ls -la
检查 Git 状态摘要
要显示工作目录的状态,请使用status命令,它将显示您所做的任何更改; Git 不跟踪哪些文件;那些已经发生的变化等等。
git status
Git 阶段更改并提交
接下来,使用带有 -A
开关的 add 命令 暂存所有更改并进行初始提交。 -a
标志指示命令自动暂存已修改的文件,-m
用于指定提交消息:
git add -A
git commit -a -m "Initial Commit"
将本地提交发布到远程 Git 存储库
作为项目团队负责人,现在您已经创建了项目结构,您可以使用推送命令将更改发布到中央存储库,如图所示。
git push origin master
现在,您的本地 git 存储库应该与项目中央存储库(来源)保持同步,您可以通过再次运行 status 命令来确认这一点。
git status
您还可以通知您的同事通过将存储库克隆到他们的本地计算机来开始处理该项目。
创建一个新的 Git 分支
分支允许您在不触及代码库(主分支)的情况下处理项目的功能或快速修复问题。要创建新分支然后切换到该分支,请分别使用 branch 和 checkout 命令。
git branch latest
git checkout latest
或者,您可以创建一个新分支,然后使用带有 -b
标志的 checkout 命令 一步切换到该分支。
git checkout -b latest
例如,您还可以基于另一个分支创建新分支。
git checkout -b latest master
要检查您所在的分支,请使用branch命令(星号字符表示活动分支):
git branch
创建并切换到新分支后,在其下进行一些更改并进行一些提交。
vim sysadmin/topprocs.sh
git status
git commit add sysadmin/topprocs.sh
git commit -a -m 'modified topprocs.sh'
将一个分支的更改合并到另一个分支
要将测试分支下的更改合并到master分支中,请切换到master分支并进行合并。
git checkout master
git merge test
如果您不再需要某个特定分支,可以使用 -d
开关将其删除。
git branch -d test
从远程中央存储库下载更改
假设您的团队成员已将更改推送到中央项目存储库,您可以使用拉取命令将任何更改下载到项目的本地实例。
git pull origin
OR
git pull origin master #if you have switched to another branch
检查 Git 存储库并执行比较
在最后一节中,我们将介绍一些有用的 Git 功能,这些功能可以跟踪存储库中发生的所有活动,从而使您能够查看项目历史记录。
第一个功能是Git log,显示提交日志:
git log
另一个重要功能是 show 命令,它显示各种类型的对象(例如提交、标签、树等):
git show
您需要了解的第三个重要功能是 diff 命令,用于比较或显示分支之间的差异、显示工作目录和索引之间的更改、磁盘上两个文件之间的更改等等。
例如,要显示主分支和最新分支之间的差异,您可以运行以下命令。
git diff master latest
另请阅读:托管开源项目的 10 个最佳 Git 替代方案
概括
Git 允许团队人员使用相同的文件一起工作,同时记录文件随时间的变化,以便他们以后可以回忆起特定版本。
这样,您就可以使用 Git 来管理源代码、配置文件或存储在计算机上的任何文件。您可能需要参阅 Git 在线文档以获取更多文档。