Git最简入门

文章目录

  • 几个基本概念
    • 版本控制
    • Git的由来
    • 分布式 vs 集中式
      • Git
      • SVN
    • Git、GitHub、GitLab、GitWeb、Gitee的区别
  • 动手进行版本控制
    • 初始化Git
    • 使用情景一:开发新项目
    • 使用情景二:在已有项目上开发
    • 设置代理
  • 参考

几个基本概念

版本控制

在工作学习中,备份是一个十分重要的习惯,只有经历了硬盘损坏才明白数据无价的道理。

回想过去自己的备份习惯,通常是整个项目文件夹拷贝加上日期,有时候会加上个版本号。然而,这种方式虽然简单但却有着致命的缺点。首先,没有对文件进行更改追踪,就不能具体知道每个版本分别修改了什么(常常出现找不到代码的情况);其次,整个项目拷贝通常占用较大的存储空间。个人开发者还勉强能够接受,一旦涉及多人协同开发,这种管理方式往往是不可行的。

Git作为各大企业使用的版本控制工具,就像一个高级的时间机器,不仅仅能够让你回溯过去查看历史,甚至还能更改历史。

为了提高开发效率,学习并掌握Git是十分有必要的。

Git的由来

话说Git和著名的Linux是同宗同源,都是由Linus Torvalds开发的。21世纪初,Linux在世界上引起了一波开源浪潮,许多的开发者都向Linux提交代码,当时代码管理的任务是由微软的BitKeeper工具来实现的。但本着开源的思想,Linux开发者希望将 BitKeeper开源,因此触犯了微软的利益,结束了BitKeeper提供的服务。

这迫使 Linux 社区寻找或创建一个新的版本控制工具,最终,Linus Torvalds 用了两周时间开发了 Git,一直流传至今,成为当下最热门的分布式版本控制系统

分布式 vs 集中式

与分布式版本控制系统相对的还有集中式版本控制系统,最经典的就是Git和SVN,它们的差别如下:

Git

完整的代码库:每个参与者的机器上都有代码的完整拷贝。这不仅包括当前的代码快照,还包括整个历史记录。
不依赖中央服务器:虽然可以有一个“主”存储库供开发者推送更改,但每个开发者的本地存储库都可以独立工作。
更强大的分支和合并:DVCS通常提供更高级和灵活的分支和合并功能。
离线工作:由于每个开发者都有完整的代码库,因此他们可以离线工作,并在稍后同步更改。

SVN

中央存储库:所有的版本历史都存储在一个中央服务器上,开发者通常只获取代码的最新版本。
完全依赖中央服务器:如果中央服务器出现问题,可能会暂时阻止开发者进行版本控制操作,或者在最坏的情况下导致数据丢失(除非有备份)。
速度:由于所有操作都需要与中央服务器通信,某些操作可能会较慢。
需要网络连接:开发者需要连接到中央服务器才能提交更改,虽然本地工作可能仍然是可能的。
Git最简入门_第1张图片

Git、GitHub、GitLab、GitWeb、Gitee的区别

  • GitHub:全球最大的代码托管平台
  • Gitee:国内最大的代码托管平台,因GitHub在国内较慢应运而生
  • GitWeb:轻量化的基于Web界面的Git存储库,适用于个人搭建在服务器上
  • GitLab:与GitHub类似的代码托管平台,相对于GitWeb有较好的权限管理功能,适用于搭建在团队的服务器上
  • Git:以上这些平台都是基于Git工具

动手进行版本控制

实践出真知。这里以GitHub为例,提供了两种最常见的情况下使用Git的方法。推荐在Windows环境下使用Git Bash
Git最简入门_第2张图片

初始化Git

初始化在环境配置阶段仅需要完成一次,在不更换电脑和不修改Github账户的情况下无需再操作。

  1. 初始化本地的git用户信息,该信息只用于标记操开发者,不用于身份验证:
git config --global user.name "Your Name"
git config --global user.email "Your Email"
  1. 建立安全连接,建议使用SSH(Secure SHeel)的方式进行连接。首先在本地生成ssh key,回车按照默认信息即可:
ssh-keygen -t rsa -C "Your Email"
  1. 添加ssh key到GitHub,GitHub上依次点击头像->settings->SSH and GPG keys->New SSH keys

Git操作的对象通常是一个仓库,因此每个项目工程都应该建立一个仓库,而不建议一个仓库下放多个项目文件。

使用情景一:开发新项目

该情景适用于在完成一个新项目的第一个版本后,需要将该版本备份的情况。

  1. 在GitHub上新建一个远程仓库,仓库名称尽量项目名称保持一致
  2. 在项目下初始化一个本地仓库:
git init
  1. 将本地仓库链接远程仓库:
git remote add origin 
  1. 修改主分支为main,否则将会默认添加到master分支:
git branch -m main
  1. 将项目代码添加到暂存区:
git add .
  1. 提交更改至本地版本库:
git commit -m "Your commit message here"
  1. 拉取远程仓库到本地进行合并:
git pull origin main

注意:如果提示 fatal: refusing to merge unrelated histories 是因为本地仓库和远程仓库的历史修改信息不同步(此时远程仓库可能不为空)。解决方案是不考虑他们的历史是否有关联(由于是新仓库,该操作合理):

git pull origin main --allow-unrelated-histories
  1. 推送到main分支:
git push origin main
  1. 回到GitHub即可看到新提交的文件

使用情景二:在已有项目上开发

该情景适用于在已有项目上继续开发新的功能,或者基于已有项目进行学习和开发。

由于克隆的仓库中本身存在git仓库,因此不需要使用git init来初始化一个仓库

  1. 从远程仓库中克隆一个到本地仓库:
git clone 
  1. 进入仓库目录:
cd 
  1. 切换到要推送的分支(如果你不在那里):
git checkout main
  1. 执行所需的代码更改,并将它们添加到暂存区:
git add 
  1. 提交更改至本地版本库:
git commit -m "Your commit message here"
  1. 拉取最新的远程更改以确保没有冲突(可选,但推荐):
git pull origin main
  1. 推送更改到远程的main分支:
git push origin main

设置代理

  1. 打开SSH配置文件,没有就新建一个:
touch ~/.ssh/config
  1. 在配置文件中添加代理,这里我用的是socks代理,开启v2ray后转发至10808端口:
Host github.com
ProxyCommand connect -S 127.0.0.1:10808
  1. 重启git后生效,即可加速下载

参考

  • https://git-scm.com/

你可能感兴趣的:(杂谈,git)