git基础概念和操纵

打印 上一主题 下一主题

主题 885|帖子 885|积分 2665

一、分布式版本控制器和会合式

Git、SVN 和 CVS 都是常用的版本控制体系,以下是它们的相关介绍及对比:
1.基本概念



  • Git:是一种分布式版本控制体系,它允许每个开辟者在本身的当地呆板上拥有完整的版本库,包括所有的提交历史和文件版本。开辟者可以在当地举行提交、分支管理等操纵,然后再将当地的更改推送到远程服务器或与其他开辟者共享。
  • SVN:即Subversion,是一种会合式版本控制体系。它有一个中央服务器,所有的版本信息都存储在服务器上,开辟者通过网络连接到服务器举行提交、更新等操纵,当地只生存最新版本的文件和一些临时工作目次。
  • CVS:即 Concurrent Versions System,是最早的广泛使用的版本控制体系之一,也是会合式的。它以类似的方式工作,有一个中央服务器来存储版本数据,开辟人员从服务器获取和提交更改。
2.主要特点



  • Git

    • 分布式:每个**开辟者的当地环境都是一个完整的版本库**,这使得开辟者可以在没有网络的情况下举行开辟、提交等操纵,之后再与远程堆栈同步。
    • 高效的分支管理:创建、切换和合并分支非常快速和高效,使得开辟人员可以轻松地举行并行开辟,例如同时举行新功能开辟、bug 修复等不同使命,互不干扰。
    • 数据安全:采用哈希算法对数据举行校验和存储,确保数据的完整性和同等性。如果数据在传输或存储过程中发生损坏,Git 能够检测到并提示错误。

  • SVN

    • 会合式管理:所有版本数据会合存储在服务器上,便于统一管理和维护,管理员可以方便地控制用户的访问权限,确保代码的安全性和规范性。
    • 简朴易用:对于小型团队或简朴项目,SVN 的操纵相对简朴,容易上手。开辟人员只必要关注与服务器之间的交互,举行提交和更新操纵即可。
    • 支持原子提交:可以将多个文件的修改作为一个原子操纵提交到服务器,要么全部成功,要么全部失败,保证了版本库的同等性。

  • CVS

    • 历史悠久:具有很长的发展历史,有大量的开源项目使用 CVS 举行版本控制,积累了丰富的使用履历和相关工具。
    • 基本功能完备:提供了版本控制的基本功能,如提交、更新、检察历史记录等,能够满足一般项目标版本管理需求。
    • 广泛的体系支持:可以在多种操纵体系上运行,包括 UNIX、Windows 等,具有较好的跨平台性。

3.使用场景



  • Git:适用于大型分布式开辟项目,尤其是**开源项目和必要频仍举行分支和合并的项目**。像 Linux 内核开辟、GitHub 上的众多项目等都使用 Git 举行版本控制。
  • SVN:适合团队规模较小、对权限管理要求较高、工作流程相对简朴的项目。例如一些企业内部的小型项目,开辟人员必要严格按照规定的权限和流程举行代码管理。
  • CVS:对于一些历史遗留项目大概对版本控制功能要求不高、追求简朴实用的项目,CVS 仍然可以发挥作用。一些传统的科研项目、小型软件公司的老项目大概还在使用 CVS。
4.操纵下令示例



  • Git

    • 克隆堆栈:git clone <repository_url>

    • 提交更改:git add <file>
      然后 git commit -m "Commit message"
    • 推送更改:git push origin <branch_name>

  • SVN

    • 克隆堆栈:svn checkout <repository_url>
    • 提交更改:svn add <file> 然后 svn commit -m "Commit message"
    • 更新文件:svn update

  • CVS

    • 检出模块:cvs checkout <module_name>
    • 提交更改:cvs commit -m "Commit message"
    • 更新文件:cvs update

二、git基本概念

Git 是一个分布式版本控制体系,以下为你详细介绍其一些基本概念:

1.堆栈(Repository)



  • 定义:堆栈是存储项目所有文件和版本历史的地方。它包罗了项目从创建以来的所有提交记录、分支信息等。
  • 分类

    • 当地堆栈:存在于开辟者当地计算机上的堆栈,开辟者可以在当地堆栈举行各种版本控制操纵,如提交、分支管理等,无需网络连接
    • 远程堆栈:存储在远程服务器上的堆栈,通常用于团队协作开辟,多个开辟者可以通过网络与远程堆栈举行交互,共享代码和版本信息。

  • 创建堆栈

    • 创建当地堆栈:使用 git init
      下令可以将一个平凡的当地目次初始化为一个 Git 堆栈。
    • 克隆远程堆栈:使用 git clone <repository_url>
      下令可以将远程堆栈复制到当地。

2.提交(Commit)



  • 定义:提交是将当地工作目次中的更改生存到当地堆栈的操纵。每次提交都会天生一个唯一的哈希值(如 SHA - 1)来标识该提交,同时包罗提交的作者、提交时间、提交说明等元数据。
  • 操纵流程 :

    • 起首使用 git add <file>
      下令将工作目次中修改的文件添加到暂存区。
    • 然后使用 git commit -m "commit message"
      下令将暂存区的文件更改提交到当地堆栈,其中 "commit message" 是对本次提交的扼要描述。

3.暂存区(Staging Area)



  • 定义暂存区也称为索引(Index),它是工作目次和当地堆栈之间的一个中间地域。开辟者可以选择将工作目次中的部分或全部更改添加到暂存区,然后再将暂存区的更改一次性提交到当地堆栈
  • 作用:暂存区提供了一种灵活的方式来组织和管理提交内容,允许开辟者将不同类型的更改分别提交,使提交记录更加清晰和有意义。
  • 操纵下令

    • git add <file>
      :将指定文件的更改添加到暂存区。
    • git add .
      :将当前工作目次下所有更改的文件添加到暂存区。
    • git reset <file>
      :将指定文件从暂存区移除,但不影响工作目次中的文件。

4.分支(Branch)



  • 定义:分支是 Git 中非常重要的概念,它允许开辟者在不影响主分支的情况下,独立地举行新功能开辟、bug 修复等工作。每个分支都有本身独立的提交历史,可以在必要时将分支合并到其他分支。
  • 主分支:通常情况下,每个堆栈都有一个默认的主分支,定名为 master 或 main,它代表项目标稳固版本。
  • 操纵下令

    • git branch
      :检察当地分支列表。
    • git branch
      <branch_name>:创建一个新的分支。
    • git checkout <branch_name>
      :切换到指定的分支。
    • git checkout -b <branch_name>
      :创建并切换到一个新的分支。
    • git merge <branch_name>
      :将指定分支合并到当前分支。

5.标签(Tag)



  • 定义:标签是对某个特定提交的一个固定引用,通常用于标记项目标重要版本,如发布版本、里程碑等。标签类似于分支,但它是静态的,不会随着新的提交而移动。
  • 操纵下令

    • git tag:检察所有标签。
    • git tag <tag_name>:为当条件交创建一个轻量级标签。
    • git tag -a <tag_name> -m "tag message":为当条件交创建一个带注释的标签。
    • git push origin <tag_name>:将当地标签推送到远程堆栈。

6.远程(Remote)



  • 定义:远程是指远程堆栈的别名,通过远程可以方便地与远程堆栈举行交互。默认情况下,克隆远程堆栈时会主动创建一个名为 origin 的远程。
  • 操纵下令

    • git remote -v
      :检察当前堆栈的远程信息。
    • git remote add <remote_name> <repository_url>
      :添加一个新的远程堆栈。
    • git push <remote_name> <branch_name>
      :将当地分支的更改推送到远程堆栈。
    • git pull <remote_name> <branch_name>
      :从远程堆栈拉取并合并更改到当地分支。

7.HEAD



  • 定义:HEAD 是一个特殊的引用,它指向当前地点的分支或提交。当切换分支时,HEAD 会随之移动到新的分支或提交上。
  • 作用:HEAD 用于标识当前工作的位置,在举行提交、合并等操纵时,Git 会根据 HEAD 的指向来确定操纵的目标。
三、git优缺点

1.Git 的优点

分布式特性



  • 离线工作每个开辟者的当地环境都有完整的版本库,包罗所有提交历史和文件版本。这意味着开辟者可以在没有网络连接的情况下举行一样平常开辟工作,如提交代码、创建分支、检察历史记录等。例如,在飞机上、偏远地域等没有网络的环境中,开辟者依然能够继续手中的项目开辟,等网络规复后再将当地的修改同步到远程堆栈。
  • 数据安全:由于每个开辟者的当地都有完整的版本库副本,纵然远程堆栈出现故障(如服务器硬件损坏、网络攻击等),也可以从多个开辟者的当地堆栈中规复数据。而且,Git 使用哈希算法对数据举行校验和存储,能有效防止数据在传输或存储过程中发生损坏。
  • 高效协作分布式的架构使得多个开辟者可以并行地举行开辟工作,各自在当地堆栈举行修改和提交,然后再将当地的更改推送到远程堆栈举行合并。这种方式大大提高了开辟效率,减少了开辟者之间的等候时间。
强大的分支管理



  • 快速创建和切换:Git 创建和切换分支的操纵非常快速,几乎是瞬间完成。这使得开辟者可以轻松地在不同的功能开辟、bug 修复等使命之间举行切换,而不会影响其他工作。例如,当开辟者正在举行一个新功能的开辟时,忽然发现一个紧急的 bug 必要修复,此时可以快速切换到一个新的分支举行 bug 修复,修复完成后再切换回原来的功能开辟分支继续工作。
  • 并行开辟:多个开辟者可以在不同的分支上同时举行开辟,互不干扰。每个分支都有本身独立的提交历史,开辟完成后可以将这些分支合并到主分支上。这种并行开辟的方式极大地提高了团队的开辟效率,尤其适用于大型项目标开辟。
灵活的工作流程



  • 多种工作流支持:Git 支持多种不同的工作流程,如 GitFlow、GitHub Flow、GitLab Flow 等。团队可以根据项目标特点和需求选择适合的工作流程。例如,GitFlow 适用于有明白发布周期的项目,它定义了主分支(master)、开辟分支(develop)、功能分支(feature)、发布分支(release)和热修复分支(hotfix)等不同类型的分支,每个分支都有特定的职责和使用规则;而 GitHub Flow 则更简朴轻量级,适用于快速迭代的项目,夸大快速将功能合并到主分支。
  • 自定义工作流:除了上述常见的工作流程,Git 还允许团队根据自身的实际情况自定义工作流程,以满足特定的开辟需求。
社区支持和生态体系



  • 广泛使用:Git 是目前最盛行的版本控制体系,被广泛应用于各种开源项目和商业项目中。大量的开辟者使用 Git 举行项目开辟,这意味着在碰到问题时可以很容易地在社区中找到解决方案。
  • 丰富的工具和服务:围绕 Git 形成了丰富的生态体系,有许多优秀的工具和服务可供选择。例如,GitHub、GitLab、Bitbucket 等代码托管平台,提供了代码托管、协作开辟、问题跟踪、一连集成等一系列功能;还有许多可视化的 Git 客户端工具,如 SourceTree、GitKraken 等,方便开辟者举行操纵。
2.Git 的缺点

学习曲线较陡



  • 概念复杂:Git 有许多复杂的概念,如堆栈、提交、暂存区、分支、标签、远程等,对于初学者来说,理解这些概念并把握它们之间的关系必要耗费肯定的时间和精力。例如,暂存区的概念大概会让初学者感到狐疑,不清楚为什么必要将文件添加到暂存区再举行提交。
  • 下令繁多:Git 的下令非常多,而且有些下令的使用方式和参数比力复杂。例如,git rebase 下令可以用于整理提交历史,但使用不当大概会导致数据丢失或辩论难以解决。对于初学者来说,记着这些下令并精确使用它们是一个挑衅。
辩论解决复杂



  • 辩论频仍:由于 Git 支持并行开辟,多个开辟者在不同的分支上举行修改,当合并分支时,很容易出现辩论。尤其是在多人同时修改同一文件的同一部分时,辩论的解决会比力麻烦。
  • 解决难度大:解决辩论必要开辟者对代码有深入的理解,并且要手动合并辩论的部分。在一些复杂的项目中,辩论大概涉及多个文件和多个提交,解决起来非常耗时且容易出错。
占用磁盘空间大



  • 完整副本存储:由于每个开辟者的当地都有完整的版本库副本,包罗了项目标所有历史记录和文件版本,这会占用大量的磁盘空间。对于一些大型项目,版本库大概会到达几百兆甚至几个吉字节,这对于磁盘空间有限的开辟者来说大概是一个问题。
  • 数据冗余:在分布式环境中,多个开辟者的当地堆栈大概会存在大量的数据冗余,进一步增加了磁盘空间的占用。
网络带宽要求高



  • 克隆和推送数据量大:当克隆一个远程堆栈时,必要下载整个版本库的内容,包括所有的提交历史和文件版本,这会斲丧大量的网络带宽。同样,当推送当地的更改到远程堆栈时,如果更改的内容较多,也会占用较多的网络带宽。在网络带宽有限的情况下,克隆和推送操纵大概会非常缓慢。
四、git常用指令

Git 有众多指令,下面按照不同的使用场景为你介绍常用指令:
堆栈操纵

1. 初始化堆栈

  1. git init
复制代码


  • 说明:在当前目次下初始化一个新的 Git 堆栈,会在该目次下创建一个 .git 隐藏文件夹,用于存储版本控制相关的信息。
2. 克隆远程堆栈

  1. git clone <repository_url>
复制代码


  • 说明:将远程堆栈(如 GitHub、GitLab 上的堆栈)复制到当地。<repository_url> 是远程堆栈的地址,可以是 HTTPS 或 SSH 格式。例如:
  1. git clone https://github.com/user/repo.git
复制代码
提交操纵

1. 添加文件到暂存区

  1. git add <file>
复制代码


  • 说明:将指定的文件添加到暂存区。如果要添加当前目次下的所有文件,可以使用:
  1. git add .
复制代码
2. 提交暂存区的文件到当地堆栈

  1. git commit -m "commit message"
复制代码


  • 说明:将暂存区的文件更改提交到当地堆栈,-m 后面跟着本次提交的描述信息,用于说明本次提交做了哪些更改。
3. 一次完成添加和提交操纵

  1. git commit -am "commit message"
复制代码


  • 说明:此下令仅适用于已被 Git 跟踪的文件,它会将所有已跟踪文件的更改添加到暂存区并提交到当地堆栈。
分支操纵

1. 检察分支

  1. git branch
复制代码


  • 说明:检察当地堆栈的所有分支,当前地点分支会以绿色表现并带有 * 号。
2. 创建新分支

  1. git branch
  2. <branch_name>
复制代码


  • 说明:创建一个名为 <branch_name> 的新分支,但不会切换到该分支。
3. 切换分支

  1. git checkout <branch_name>
复制代码


  • 说明:切换到指定的分支。
4. 创建并切换到新分支

  1. git checkout -b <branch_name>
复制代码


  • 说明:这是一个组合下令,相称于先实行 git branch
    <branch_name> 再实行 git checkout <branch_name>

5. 合并分支

  1. git merge <branch_name>
复制代码


  • 说明:将指定的 <branch_name> 分支合并到当前地点的分支。
6. 删除分支

  1. git branch
  2. -d <branch_name>
复制代码


  • 说明:删除指定的当地分支,条件是该分支已经合并到其他分支。如果要强制删除未合并的分支,可以使用 -D 选项。
远程堆栈操纵

1. 检察远程堆栈信息

  1. git remote -v
复制代码


  • 说明:表现当前堆栈配置的所有远程堆栈的名称和对应的 URL。
2. 添加远程堆栈

  1. git remote add <remote_name> <repository_url>
复制代码


  • 说明:添加一个新的远程堆栈,<remote_name> 是为远程堆栈指定的别名,通常使用 origin 作为默认别名。
3. 从远程堆栈拉取代码

  1. git pull <remote_name> <branch_name>
复制代码


  • 说明:从指定的远程堆栈的指定分支拉取代码,并将其合并到当前当地分支。如果不指定 <branch_name>,默认拉取当前分支对应的远程分支。
4. 将当地代码推送到远程堆栈

  1. git push <remote_name> <branch_name>
复制代码


  • 说明:将当地的指定分支推送到远程堆栈的对应分支。如果是第一次推送该分支,可以使用 -u 选项,这样之后再推送该分支时就可以直接使用 git push 下令,例如:
  1. git push -u origin <branch_name>
复制代码
检察历史记录

1. 检察提交历史

  1. git log
复制代码


  • 说明:表现当前分支的提交历史,包括提交的哈希值、作者、提交时间和提交说明等信息。
2. 简便检察提交历史

  1. git log
  2. --oneline
复制代码


  • 说明:以简便的一行格式表现提交历史,只表现提交的哈希值前几位和提交说明。
撤销操纵

1. 撤销暂存区的文件

  1. git reset <file>
复制代码


  • 说明:将指定文件从暂存区移除,但不会改变工作目次中的文件内容。
2. 撤销工作目次的修改

  1. git checkout -- <file>
复制代码


  • 说明:丢弃工作目次中指定文件的修改,使其规复到上一次提交时的状态。
3. 回退到指定提交

  1. git reset --hard <commit_hash>
复制代码


  • 说明:将当地堆栈的 HEAD、分支指针和工作目次都回退到指定的提交,<commit_hash> 是提交的哈希值。使用 --hard 选项会彻底丢弃回退点之后的所有更改,请谨慎使用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表