【学习笔记】使用分布式的代码管理工具 - Git
本文最后更新于 2024-05-08,文章可能存在过时内容,如有过时内容欢迎留言或者联系我进行反馈。
前言
目前在公司干了三年多了,一直以来我都是使用的SVN,但是我发现用Git的还是比用SVN的要多,所以抽空学习了一下Git的使用方式,先看看两者的区别。
以下是SVN和Git之间的一些主要区别:
架构差异:
SVN:是一个集中式版本控制系统。这意味着有一个中央服务器,所有开发者的工作副本都直接与这个中央仓库交互。
Git:是一个分布式版本控制系统。每个开发者的工作副本都是一个完整的代码库,包含完整的历史记录,这意味着开发者可以在离线状态下进行大部分操作,并在需要时与其他仓库同步。
分支和合并:
SVN:在SVN中,分支操作相对昂贵,因为它们通常涉及到复制整个代码库的一部分。
Git:Git的分支非常轻量级,创建和切换分支几乎瞬间完成。Git鼓励使用分支进行开发,这使得实验和特性开发更加方便。
性能:
SVN:由于它的集中式架构,SVN的操作通常需要与中央服务器进行交互,这可能在网络延迟较大的情况下影响性能。
Git:Git的大多数操作都是在本地执行,这意味着它们非常快速。只有在与其他仓库同步时才需要与远程服务器交互。
历史记录:
SVN:SVN的历史记录是线性的,每次提交都会添加到中央仓库的历史中。
Git:Git的历史记录是全局的,不仅仅包括自己的提交,还包括其他开发者的提交。Git的提交历史是一个复杂的图结构,可以处理多线历史和合并。
安全性:
SVN:SVN的权限控制通常在服务器端进行,可以细粒度地控制用户对特定目录的访问。
Git:Git的权限控制通常是在服务器端使用钩子脚本(hooks)来实现的,虽然它本身不提供内置的细粒度权限控制,但可以通过第三方服务如GitLab或GitHub来实现。
网络依赖性:
SVN:由于是集中式的,许多操作需要网络连接到中央服务器。
Git:Git可以在完全离线的情况下进行大部分操作,只有在推送到远程仓库或从远程仓库拉取更新时才需要网络连接。
数据完整性:
SVN:SVN依赖于文件系统的时间戳和大小来检测文件的改变,这可能导致某些情况下数据的不一致。
Git:Git使用SHA1哈希来确保数据的完整性。每个文件和提交都会生成一个唯一的哈希值,Git使用这些哈希值来跟踪和验证数据。
总的来说,Git的分布式特性和对分支和合并的优化使其在灵活性和性能方面优于SVN,特别是在大型项目和分布式团队协作的场景中。然而,SVN的集中式模型在某些情况下可能更简单,尤其是在小型团队或对权限控制有特定需求的环境中。随着Git的流行,许多原本使用SVN的项目和团队都已经迁移到了Git。
简介
Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。Git易于学习,占地面积小,具有闪电般的快速性能。它超越了Subversion、CVS、Perforce和ClearCase等传统的SCM工具,具有廉价的本地分支、方便的暂存区域和多个工作流等功能。
Git最初由Linus Torvalds设计,用于更好地管理Linux内核开发过程。自2005年发布以来,Git迅速成为全球最流行的版本控制系统,被广泛用于各种项目,包括开源和私有项目。
Git的主要特点包括:
分布式:Git是一个分布式版本控制系统,这意味着每个开发人员都有一个完整的代码库,包括历史记录。这允许在没有网络连接的情况下进行工作,同时还可以轻松地与其他开发人员的代码库进行同步和协作。
性能:Git在处理大型项目时速度非常快,这是因为它是为性能而设计的。Git使用哈希值来标识对象,这允许它在几秒钟内比较和分析大量数据。
安全性:Git使用SHA1哈希算法来确保代码的完整性和一致性。这意味着在Git中几乎不可能发生数据损坏或丢失。
灵活性和可扩展性:Git支持多种不同的工作流和扩展,可以满足不同团队和项目的需求。开发人员可以根据自己的需求自定义和扩展Git。
分支:Git的分支模型是其最强大的功能之一。Git允许轻松地创建、合并和删除分支,这使得开发人员可以安全地尝试新功能或修复错误,而不会影响主代码库。
社区和支持:Git拥有一个庞大的社区,提供大量文档、教程和工具,以帮助开发人员更好地使用和理解Git。
总之,Git是一个功能强大、灵活且易于使用的版本控制系统,适用于各种规模的项目。它已经成为全球范围内开发人员协作和代码管理的首选工具。
常用命令
初始化配置
git config --global user.name "Your Name"
:设置你的用户名称。
git config --global user.email "your_email@example.com"
:设置你的电子邮件地址。
git config --global credential store
:存储配置。
省略(local):本地配置,只对本地仓库生效
--global:全局配置,所有仓库生效
--system:系统配置,对所有用户生效
创建仓库
git init <project-name>
:初始化一个新的Git仓库。省略project-name则表示在当前目录下创建
git init -b <branch>
:初始化仓库并创建分支。
git clone <url>
:从远程仓库克隆。
添加和提交
git add <file>
:将文件添加到暂存区。
git add .
表示添加所有文件到暂存区
git commit -m "Commit message"
:将暂存区的更改提交到仓库。只有添加到暂存区的文件才会被条件到仓库,工作区的文件是不会被提交到仓库的。
git commit --amend
:修改最后一次提交。
查看状态
git status
:显示当前仓库的状态。git diff
:显示暂存区和工作目录之间的差异。git diff --cached
:显示暂存区和上一个提交之间的差异。
git diff <commit> <commit>
:比较两个提交之间的差异。
分支管理
git branch
:列出所有分支。git branch <new-branch>
:创建一个新的分支。
git checkout <branch>
:切换到指定的分支。
git switch <branch>
:Git v2.23版本提供该命令切换到指定分支。git checkout -b <branch>
:创建并切换到新的分支。
git branch -d <branch>
:删除一个已经合并的分支。git branch -D <branch>
:强制删除一个分支git branch -m <old-branch> <new-branch>
:分支重名命。
git merge <branch>
:将一个分支合并到当前分支。
git pull
:从远程仓库获取并合并指定分支。
远程操作
git remote -v
:列出所有远程仓库。git remote add <name> <url>
:添加一个新的远程仓库。git fetch <remote>
:从远程仓库获取数据。git pull <remote> <branch>
:从远程仓库获取并合并指定分支。git push <remote> <branch>
:将本地分支推送到远程仓库。
撤销更改
git revert <commit>
:创建一个新的提交,这个提交会撤销指定提交的更改。
git reset --hard <commit>
:将当前分支重置到指定提交。
删除文件
git rm <file>
:从工作目录中删除文件并添加到暂存区。
git rm --cached <file>
:把文件从暂存区删除,但保留在当前工作区中。
查看历史
git log
:显示提交日志。git log --oneline
:简洁显示提交日志。
git show <commit>
:显示指定提交的完整差异。git log --oneline --graph --decorate --all
:查看图形化的提交日志。alias graph="git log --oneline --graph --decorate --all"
:由于这个命令太长,我们通过这个设置,就能直接使用graph
就能查看图形化的提交日志啦。
标签管理
git tag <tag>
:创建一个新标签。
git tag -d <tag>
:删除一个标签。
git push <remote> --tags
:推送所有本地标签到远程仓库。
其他
git stash
:将当前工作进度保存到堆栈。git stash pop
:从堆栈中恢复工作进度。git submodule <command>
:管理子模块。
这些命令是Git日常使用的基础,但Git的功能远不止这些。为了更好地掌握Git,建议阅读官方文档,并实际操作以加深理解。
细节展示
git中的特殊文件
.git:Git仓库的元数据和对象数据库
.gitignore:忽略文件,不需要提交到仓库的文件
.gitattributes:指向当前分⽀的指针
.gitkeep:使空⽬录被提交到仓库
.gitmodules:记录⼦模块的信息
.gitconfig:记录仓库的配置信息
工作区域
文件状态
Git Reset的三种模式
同步仓库
Merge
优点:不会破坏原分支的提交历史,方便回溯和查看。
缺点:会产生额外的提交节点,分支图比较复杂。
Rebase
优点:不会新增额外的提交记录,形成线性历史,比较直观和干净。
缺点:会改变提交历史,改变了当前分支branch out的节点。
避免在共享分支使用
参考
【【GeekHour】一小时Git教程】 https://www.bilibili.com/video/BV1HM411377j/?share_source=copy_web&vd_source=05f7cdfdda7e7b00ca3ce929f5b3c400
【git远程库操作详解,git关联远程库,git关联多个远程库,git关联github,git关联gitee,2023年git最新入门教程,2023年git最新入】 https://www.bilibili.com/video/BV1CD4y1j7VN/?share_source=copy_web&vd_source=05f7cdfdda7e7b00ca3ce929f5b3c400
- 感谢你赐予我前进的力量