如何在 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 “aaronkilik@gmail.com”
要检查您的 Git 设置,请使用以下命令。
$ git config --list
创建一个新的 Git 存储库
共享存储库或集中式工作流程非常常见,我们将在此演示。例如,我们假设您被要求为组织中各个部门的系统管理员/程序员设置一个远程中央存储库,以处理名为bashscripts的项目,该项目将存储在服务器上的/projects/scritpts/下。
通过 SSH进入远程服务器并创建必要的目录,创建一个名为sysadmins的组(将所有项目团队成员添加到此组,例如用户管理员),并在此目录上设置适当的权限。
# 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 存储系统管理员脚本等):
$ cd ~/bin/bashscripts/ $ ls -la
检查 Git 状态摘要
要显示工作目录的状态,请使用status 命令,它将显示您所做的任何更改、Git 未跟踪的文件、已暂存的更改等等。
$ git status
Git 阶段更改和提交
接下来,使用带有开关的add 命令暂存所有更改-A
并进行初始提交。该-a
标志指示命令自动暂存已修改的文件,并-m
用于指定提交消息:
$ git add -A $ git commit -a -m "Initial Commit"
将本地提交发布到远程 Git 存储库
作为项目团队负责人,现在您已经创建了项目结构,您可以使用推送命令将更改发布到中央存储库,如下所示。
$ git push origin master
现在,您的本地 git 存储库应该与项目中央存储库(原点)保持同步,您可以通过再次运行status 命令来确认这一点。
$ git status
您还可以通过将存储库克隆到本地计算机来通知您的同事开始从事该项目。
创建一个新的 Git 分支
通过分支,您可以快速处理项目功能或解决问题,而无需接触代码库(主分支)。要创建新分支然后切换到该分支,请分别使用分支和签出命令。
$ git branch latest $ git checkout latest
或者,您可以创建一个新的分支,并使用带有标志的checkout 命令一步切换到该分支-b
。
$ git checkout -b latest
例如,您还可以基于另一个分支创建一个新的分支。
$ git checkout -b latest master
要检查您所在的分支,请使用分支命令(星号表示活动分支):
$ git branch
创建并切换到新分支后,在其下进行一些更改并进行一些提交。
$ vim sysadmin/topprocs.sh $ git status $ git commit add sysadmin/topprocs.sh $ git commit -a -m 'modified topprocs.sh'
将更改从一个分支合并到另一个分支
要将分支测试下的更改合并到主分支,请切换到主分支并执行合并。
$ git checkout master $ git merge test
如果您不再需要某个分支,您可以使用-d
开关将其删除。
$ git branch -d test
从远程中央存储库下载更改
假设您的团队成员已将更改推送到中央项目存储库,您可以使用pull 命令将任何更改下载到项目的本地实例。
$ 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
概括
Git允许团队中的人员使用相同的文件进行协作,同时记录文件随时间的变化,以便他们以后可以调用特定的版本。
这样,您就可以使用 Git 来管理源代码、配置文件或存储在计算机上的任何文件。您可能需要参考Git 在线文档以获取更多文档。