Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
集中式和分布式的区别?
最常见的集中式版本控制系统是SVN,版本库是集中放在中央处理器中的,而干活的时候,用的都是自己电脑,所以首先要从中央服务器那里得到最新的版本,然后开始干活,干完活后,需要把自己做完的活推送到中央服务器。而且集中式版本控制系统是必须联网才能工作的,一旦断网,所有人都干不成活了,可想而知,集中式版本控制系统的局限性有多大。
Git是目前世界上最流行的分布式版本控制系统,它没有中央处理器,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上,随时都可以将自己在工作区间做的修改提交到本地仓库,最后将自己的本地版本仓库推动到远程版本仓库进行合并,效率可想而知是可控的贼高。
Git | SVN | |
---|---|---|
核心区别 | 分布式 | 集中式 |
存储方式 | 按元数据方式存储 | 按文件方式存储 |
分支 | Git 必杀技能,将 Git 从版本控制系统的家族中区分出来 | 版本控制系统中的另外一个目录 |
全局版本号 | Git 没有(目前 Git 跟 SVN 缺少的最大特征) | SVN 有全局版本号 |
内容完整性 | Git 内容存储使用的是SHA-1哈希算法,确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏 | 在这方面 SVN 性能是低于 Git |
安全性 | Git 每个分支都有一个完整的版本库,某个分支的电脑坏掉了,不要紧可以随便从别人那里赋值一份就可了 | SVN 版本控制系统的中央服务器一旦挂掉,所有人 all 都么的活干了 |
版本控制是管理信息修改的艺术,他是一个开发者最重要的工具之一,由于开发者经常性的修改代码,如果不做出一定的版本控制仅靠注释掉或者备份的形式进行,那么在经过一段时间后,先不说是否能记住更改的地方,能不能还原到想要的版本都是非常困难的。想象一下,一个高达几十上百人的开发团队并行进行工作,需要经常性的同时处理同一个文件,如果没有一定的版本控制机制,将会是怎样的混乱情况。
软件开发工作往往是多人协同作业,版本控制系统可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误 (Bug) 修正问题也可以通过版本控制中分支与合并的方法有效地解决。
版本控制优点
在进行软件开发时或者一些需要不断迭代的文档编写时出现下图这种情况,不仅占用磁盘空间,而且难以进行管理,很难知道每个版本进行哪些修改,另外若是在关键时刻电脑突然死机,这将是灾难性的,所以一个优雅的备份方式很重要。
备份是一个版本控制系统(例如 Git)提供的非常好的附带功能。每一个团队成员都会在他的本地有一个完整的项目副本,包括整个项目的历史记录。如果你所依赖的服务器宕机了,或者是你的存储硬盘坏,所有你需要的恢复文件都可以在另外的团队成员的 Git 本地仓库中得到,版本控制系统还会对每个版本进行一定的说明(前提是提交者具有很好的提交习惯),可以根据提交说明知道当前版本较之前的版本有何更改,当然他还提供对比功能,可以对文件进行对比,更加清楚的知道修改的地方。
当前节引自于 Git 详细安装教程博客 : Git 详细安装教程
在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
本篇我们只介绍在 Windows 下安装 Git,Git 各平台安装包下载地址为:http://git-scm.com/downloads
提示:记得开 VPN 加速器,否则下载速度实在太乌龟了。
选择安装组件
Check daily for Git for windows updates:是否每天检查更新
Add a Git Bash Profile to Windows Terminal:在 windows 终端窗口 添加 Git Profile 配置信息
选择开始菜单文件夹
方框内 Git 可改为其他名字,也可点击 “Browse…” 选择其他文件夹或者给"Don’t create a Start Menu folder" 打勾不要文件夹,点击 [next]。
选择默认的编辑器
Git 安装程序里面内置了 10 种编辑器供你挑选,比如 Atom、Notepad、Notepad++、Sublime Text、Visual Studio Code、Vim 等等,默认的是 Vim ,选择 Vim 后可以直接进行到下一步,但是 Vim 是纯命令行,操作有点难度,需要学习。如果选其他编辑器,则还需要去其官网安装后才能进行下一步。
第一种是让 Git 自己选择,名字是 master ,但是未来也有可能会改为其他名字;第二种是我们自行决定,默认是 main,当然,你也可以改为其他的名字。一般默认第一种,点击 [next] 到第七步。
注: 第二个选项下面有个 NEW! ,说很多团队已经重命名他们的默认主干名为 main . 这是因为2020 年非裔男子乔治·弗洛伊德因白人警察暴力执法惨死而掀起的 Black Lives Matter(黑人的命也是命)运动,很多人认为 master 不尊重黑人,呼吁改为 main.
Use Git from Git Bash only
This is the most cautious choice as your PATH will not be modified at all. You w only be able to use the Git command line tools from Git Bash.
仅从 Git Bash 使用 Git
这是最谨慎的选择,因为您的 PATH 根本不会被修改。您将只能使用 Git Bash 中的 Git 命令行工具。
Git from the command line and also from 3rd-party software
(Recommended) This option adds only some minimal Git wrappers to your PATH to avoid cluttering your environment with optional Unix tools.
You will be able to use Git from Git Bash, the Command Prompt and the Windov PowerShell as well as any third-party software looking for Git in PATH.
从命令行以及第三方软件进行 Git
(推荐)此选项仅将一些最小的 Git 包装器添加到PATH中,以避免使用可选的 Unix 工具使环境混乱。
您将能够使用 Git Bash 中的 Git,命令提示符和 Windov PowerShell 以及在 PATH 中寻找 Git 的任何第三方软件。
Use Git and optional Unix tools from the Command Prompt
Both Git and the optional Unix tools will be added to your PATH.
Warning: This will override Windows tools like "find"and "sort". Only use this option if you understand the implications.
使用命令提示符中的 Git 和可选的 Unix 工具
Git 和可选的 Unix 工具都将添加到您的 PATH 中。
警告:这将覆盖 Windows 工具,例如 "find" and "sort". 仅在了解其含义后使用此选项。
第一种是仅从 Git Bash 使用 Git。这个的意思就是你只能通过 Git 安装后的 Git Bash 来使用 Git ,其他的什么命令提示符啊等第三方软件都不行。
第二种是从命令行以及第三方软件进行 Git。这个就是在第一种基础上进行第三方支持,你将能够从 Git Bash,命令提示符(cmd) 和 Windows PowerShell 以及可以从 Windows 系统环境变量中寻找 Git 的任何第三方软件中使用 Git。推荐使用这个。
第三种是从命令提示符使用 Git 和可选的 Unix 工具。选择这种将覆盖 Windows 工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。一句话,适合比较懂的人折腾。
选择 SSH 执行文件
使用捆绑的 OpenSSH:这使用的 ssh.exe 是 Git 自带的
选择 HTTPS 后端传输
使用 OpenSSL 库 服务器证书将使用 ca-bundle.crt 文件进行验证。
配置行尾符号转换
P1 签出 Windows 样式,提交 Unix 样式的行结尾。
P2 按原样签出,提交Unix样式的行结尾。
P3 按原样签出,按原样提交。
配置终端模拟器和 Git Bash 使用
建议选择第一种,MinTTY 3功能比 cmd 多,cmd 只不过 比 MinTTY 更适合处理 Windows 的一些接口问题,这个对 Git 用处不大,除此之外 Windows 的默认控制台窗口(cmd)有很多劣势,比如 cmd 具有非常有限的默认历史记录回滚堆栈和糟糕的字体编码等等。
相比之下,MinTTY 具有可调整大小的窗口和其他有用的可配置选项,可以通过右键单击的工具栏来打开它们 git-bash 。
选择默认的 “git pull” 行为
git pull 就是获取最新的远程仓库分支到本地,并与本地分支合并。
选择凭证帮助程序
第一个选项是提供登录凭证帮助的,Git 有时需要用户的凭据才能执行操作;例如,可能需要输入用户名和密码才能通过 HTTP 访问远程存储库(GitHub,GItLab 等等)。
配置额外选项
启用文件系统缓存就是将批量读取文件系统数据并将其缓存在内存中以进行某些操作,可以显著提升性能。这个选项默认开启。
启用符号链接 ,符号链接是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用,类似于 Windows 的快捷方式,不完全等同 类Unix(如 Linux) 下的 符号链接。因为该功能的支持需要一些条件,所以默认不开启。
配置实验性选项
这是实验性功能,可能会有一些小错误之类的,建议不用开启。
安装成功 Git
Git Bash、Git CMD、Git FAQs、Git GUI、Git Release Note
Git Bash 是基于CMD的,在CMD的基础上增添一些新的命令与功能,平时主要用这个,功能很丰富。
命令 | 说明 |
---|---|
git init | 初始化 git,只有初始化了以后才可以使用 git 相关命令。 |
git clone | 获取远程项目,并下载到本地。远程库的地址在 GITHUB 项目中会有提供。 |
git status | 查看本地修改与服务器的差异。 |
git add | 将这些差异文件添加,这样就可以提交了。 |
git commit –m | “这里是注释” 提交更改到服务器。 |
git checkout master | 更改到 master 库。 |
git pull | 将服务器最新的更改获取到本地。 |
git merge local master | 将本地的 local 合并到远程的 master 上。 |
git push origin master | 正式提交到远程的 master 服务器上。 |
初始化 Git
Administrator@DESKTOP-AIMG6N1 MINGW64 ~
$ git init
Initialized empty Git repository in C:/Users/Administrator/.git/
获取 SSH 密钥
一路Enter(确认)就可以了
$ ssh-keygen -t rsa -C xxxxxx@qq.com
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Created directory '/c/Users/Administrator/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:+f8H6EU5Je+ZNdrhUwOk2YsZjq+SpcUENDm1oKSyeLs xxxxxx@qq.com
The key's randomart image is:
+---[RSA 3072]----+
| ..+o. .. |
| o .+o . +.. .|
| . . . o. + ..= |
|. o oo + =++|
|... S. + ++oO|
| . . =. ..o*.|
| . = .o . ..|
| . + ... .|
| E .. .... |
+----[SHA256]-----+
报错解决: https://blog.csdn.net/weixin_43888891/article/details/112429980
绑定ssh密钥
现在你就需要登录到你的 GitHub 上边添加这个密匙
Setting SSH 链接地址:https://github.com/settings/ssh/new
然后回到 Git bash 输入:ssh -T [email protected]
来检查是否成功绑定。如果输入之后选择 yes 出来是这样说明就成功了。
Administrator@DESKTOP-AIMG6N1 MINGW64 ~ (master)
$ ssh -T git@github.com
Hi wristwaking! You've successfully authenticated, but GitHub does not provide shell access.
其他设置
接下来还需要简单的设置一些东西
git config --global user.name “git账号”
git config --global user.email “git邮箱,注册时候的邮箱”
通过以上命令基本可以完成账号的设置。但是–global代表什么意思?
git config --local 仓库级别的设置,该设置只对当前仓库适用
git config --global 设置当前用户下的全局用户名
git config --system 设置系统级的用户名,对所有用户适用
代码克隆 clone
下面就要将你的库克隆下来到本地电脑中,方便以后进行上传代码。在库创建完成之后 会有一个网址出现在网页中,这个地址就是代码地址。git clone
命令会用的到。
git clone 地址(这个地址就是刚刚创建的库那个页面上代码地址)
Administrator@DESKTOP-AIMG6N1 MINGW64 ~/Desktop/HackerWaking/csdn (master)
$ git clone git@github.com:wristwaking/csdn.git
Cloning into 'csdn'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
注意:在执行命令过程有时候会让你输入账号密码啥的,这个不要输错了就行!
测试提交文件
打开本机刚才创建文件夹的目录,然后在其中创建一个任意格式,任意名称的文件。
然后在这个文件里面右键 git bash 进黑框框
git add我们新增的文件
git add . (注意 add 与 ‘.’ 之间有一个空格,此处为添加当前文件夹的全部内容)
git add xxx (此处为添加当前文件下名为 xxx 的文件)
Administrator@DESKTOP-AIMG6N1 MINGW64 ~/Desktop/HackerWaking/csdn/csdn (main)
$ git add project.py
之后输入然后 git commit -m “备注”
引号内的内容可以随意改动,这个语句的意思是 给你刚刚上传的文件一个备注,方便查找记忆而已。
$ git commit -m "first test"
[main 514d27d] first test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 project.py
然后在输入git push origin master
$ git push origin master
error: src refspec master does not match any
error: failed to push some refs to 'github.com:wristwaking/csdn.git'
问题的内容是:就是仓库为空
错误:SRC ReFSPEC主控器不匹配任何。
错误:未能将某些引用推到'github.com:wristwaking/csdn.git’
这边的原因:这边的主分支是 main,不是 master
解决方案:直接 git push origin main
$ git push origin main
Git 分支是指在版本控制系统 Git 中,用于并行开发和管理代码的一种功能。在 Git 中,每个分支都相当于一个独立的开发线,可以在不影响主线开发的情况下进行代码的修改和提交。
通过创建分支,可以在不影响主分支的情况下,开展新功能的开发、修复bug以及进行实验性的改动。在每个分支上可以进行独立的提交和合并操作,这样可以避免多人同时对同一份代码进行修改引发的冲突问题。
常见的 Git 分支有主分支(通常是 master 或 main)和特性分支。主分支用于稳定的发布版本,特性分支则用于开发新功能或修复 bug。分支间可以进行合并(merge)操作,将特性分支的修改合并到主分支中。
Git分支的使用可以提高多人协作开发的效率,并且有助于保留开发历史和追踪代码变更。
查看 branch 分支
使用如下的命令,可以查看当前Git仓库中所有的分支列表:
Administrator@DESKTOP-AIMG6N1 MINGW64 ~/Desktop/HackerWaking/csdn/csdn (main)
$ git branch
* main ## 注意:分支前面的*表示当前所处的分支
创建 branch 分支
使用如下的命令,可以基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样:(所以开发时我们需要在主分支上创建新分支)
git branch 分支名称
切换 branch 分支
使用如下的命令,可以切换到指定的分支上进行开发:
git checkout 分支名称
## -b 表示创建一个新分支
## checkout表示切换到刚才新建的分支上
git checkout -b 分支名称
删除 branch 分支
当把功能分支的代码合并到 master 主分支上以后,就可以使用如下的命令,删除对应的功能分支:
git branch -d 分支名称
合并 branch 分支
功能分支的代码开发测试完毕之后,可以使用如下的命令,将完成后的代码合并到 master主分支上:
1 切换到 master 分支
2 git checkout master
3 在 master 分支上运行 git merge 命令,将要合并分支的代码合并到 master分支
4 git merge 分支名称
将本地分支推送到远程仓库
如果是第一次将本地分支推送到远程仓库,需要运行如下的命令:
# -u表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带-u 参数
git push -u 远程仓库的别名 本地分支名称:远程分支名称
# 实际案例:
git push -u origin payment: pay
# 如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化:
git push -u origin payment
相对来说注册还是很简单的,只需要一个邮箱即可,邮箱写qq邮箱就行了,假如以后忘记密码了,是可以靠邮箱来找回密码的。
Github 官方登录页: https://github.com/login
官网全是英文的,目前的话,暂未发现有中文版的,对于英语不好的同学建议使用谷歌浏览器,谷歌浏览器可以翻译网页变为中文使用起来十分方便。
创建新的库 create a new repository
这里无非需要注意的就是库分为两种,分为了公有的私有的,上面解释的很清楚了,大家自行选择即可。
创建完成
在创建完成自己的库之后,下面就要让自己的电脑克隆一个自己所创建的库,方面自己电脑上的代码同步到GitHub你所创建的库当中。为了实现,就需要安装一个软件,Git Bash。