Git是一个分布式版本控制系统,就是一个软件,用于记录一个或若干个文件内容变化,以便于将来查阅特定版本修订情况的软件。
Github(GitHub: Let’s build from here · GitHub)https://github.com/https://github.com/
是一个为用户提供 Git 服务的网站,简单说就是一个可以放代码的地方 (不过可以放的当然不仅是代码)。Github 除了提供管理 Git 的 web 界面外,还提供了订阅、关注、讨论组、在线编辑器等丰富的功能。Github,被称之为全球最大的基友网站。
Git | 软件 |
Github | 放代码的网站 |
Git是目前世界上最先进的分布式版本控制系统
Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西都是一样的。我们使用Git并且有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC是一样的。我们可以把它当做一个开发者的PC就可以就是为了大家代码容易交流不关机用的。没有它大家一样可以工作,只不过“交换”修改不方便而已。git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git是LinusTorvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众多的参与者绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。到了2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds) 基于使用BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
git status
git commit-m 提交描述
git status
git add hello.php
git add test.php
git status
什么是仓库呢?仓库又名版本库,英文名 repository,我们可以简单理解成是一个目录用于存放代码的,这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除等操作 Git 都能跟踪到。
①在安装好后首次使用需要线进行全局配置
桌面控股摆出右键,点击“Git Bash Here” 以打开Git命令行窗口
git config --global user.name"xudefeng"
git config --global user.email"[email protected]"
②创建仓库
当我们需要让 Git 去管理某个新项目/已存在项目的时候,就需要创建仓库了。注意,创建仓库时使用的目录不一定要求是空目录,选择一个非空目录也是可以的,但是不建议在现有项目上来学习 Git,否则造成的一切后果概不负责!
注意:为了避免在学习或使用过程中出现各种奇葩问题,请不要使用包含中文的目录名(父目录亦是如此)。
指令:
mkdir pro_git 创建pro_git文件夹
cd pro_git 进入pro_git文件夹
③Git仓库初始化(让Git知道,它需要来管理这个目录)
指令:
添加到缓存区: git add 文件名
提交至版本库: git connit -m"注释内容"
查看当前状态:git status
仓库初始化: git init
表现:执行之后会在项目目录下创建“.git”的隐藏目录,这个目录是Git创建的,不能删除,也不能随意更改其中的内容。
说明:git add 指令,可以添加一个文件,也可以同时添加多个文件
语法1: git add 文件名
语法2: git add 文件名1 文件名2 ...
语法3: git add. [添加当前目录到缓存区中]
分为两步骤:
① 查看版本,确定需要回到的时刻点
指令:
git log
git log --pretty=oneline
②回退操作
指令:
git reset--hard 提交编号
案例:回到创建好第一个文件 readme.txt的时候
git reset--hard 黄色的版本号
注意:回到过去之后,要想再回到之前最新的版本的时候,则需要使用指令去查看历史操作,
已得到最新的 commit id
指令:
git reflog
小结:
1.要想回到过去,必须先得到 commit id,然后通过 git reset -hard 进行回退
2.要想回到未来,需要使用 git reflog 进行历史操作查看,得到最新的 commit id
3.在写回退指令的时候 commit id 可以不用写全,git 自动识别,但是也不能写太少,至少需要写前 4位字符
a.创建一个空目录,名称为shop
b.使用clone 指令克隆线上仓库到本地
语法: git clone 线上仓库地址
c.再仓库上做对应的操作(提交暂存区、提交本地仓库、提交线上仓库、拉去线上仓库)
提交到线上仓库的指令: git push
在首次往线上仓库提交内容的时候出现 403 的致命错误,原因是 不是任何人都可以往线上仓库提交内容,必须需鉴权
需要修改“.git/config”文件内容
在设置好用户名密码之后再次尝试 push 指令
如果看到类似上述效果(没有fatal错误)则
这样表示提交成功了
【验证】此时可以观察浏览器,刷新线上仓库的地址
拉取线上仓库:git pull
提醒:
在每天工作的第一件事就是先 git pull 拉取线上最新的版本 ;每天下班前要做的是 git push
将本地代码提交到线上仓库。
该方式与前面 https 方式相比,只是影响 github,对于用户的身份鉴权方式,对于 git 的具体操作(如提交本地、添加注释、提交远程等操作)没有任何影响。
生成公私钥对指令(需先自行安装 OpenSSH):ssh-keygen-trsa-C"注册邮箱”
步骤:
1⃣️生成客户端公私钥文件
2⃣️将公钥上传到Github
实际操作:
1⃣️打开提示
2⃣️创建公私钥文件
3⃣️ 找到公钥地址,用代码编辑器或者文本文档打开后缀为.pub的文件
复制全部
4⃣️上传公钥文件内容(id_rsa.pub)
保存即可
5⃣️执行后续git操作,与之前基于https协议操作一样
a、clone 线上仓库到本地 (git clone)
b、修改文件后添加缓存区
多人协同管理使用
在版本回退的章节里,每次提交后都会有记录,Git 把它们串成时间线,形成类似于时
间轴的东西,这个时间轴就是一个分支,我们称之为 master 分支。
在开发的时候往往是团队协作,多人进行开发,因此光有一个分支是无法满足多人同时开发的需求的,并且在分支上工作并不影响其他分支的正常使用,会更加安全,Git 鼓励开发者使用分支去完成一些开发任务。
分支相关指令:
查看分支: git branch
切换分支: git branch 分支名
创建分支: git checkout 分支名
删除分支: git branch-d 分支名
合并分支: git merge 被合并的分支名
对于新分支,可以使用“git checkout-b 分支名”指令来切换分支,-b 选项表示创建并切换,相当于是“删除分支: git branch-d 分支名 + 合并分支: git merge 被合并的分支名 ”两个操作指令。
查看分支:
注意:当前分支前面有个标记“ * ” 小梅花的标志
创建分支:
注意:小梅花标志和文字绿色的master是当前的分支
切换分支:
合并分支:
将dev分支的内容合并到主分支master中,合并后dev分支还在
删除分支:
git btanch -d dev 删除dev分支后 git branch 查看分支,这个时候就只有mester 主分支一个了
注意:在删除分支的时候,一定要先退出删除的分支 ,然后才能删除。
合并所有分支之后,需要将master分支提交线上远程仓库中。
案例:模拟产生冲突
1⃣️同事在下班之后修改了线上仓库代码
此时,我的本地仓库内容和线上的不一致。
2⃣️第二天上班的时候我没有做git pull拉取线上的文件,而是直接修改了本地的对应文件的内容。
3⃣️第二天下班需要将代码修改的提交到线上仓库(git push)
提交失败 提示我们要在再次push 之前先git pull操作
【解决冲突】
4⃣️先 git pull
此时git 已经将线上与本地仓库的冲突合并到对应的文件中
5⃣️打开冲突文件,解决冲突
解决方法:需要和同事(谁提交的 小A)进行商量,看代码如何保留,将改好的文件再次提交即可。
6⃣️重新提交 git push
1⃣️Github for Desktop
Github,出品的软件,功能完善,使用方便。对于经常使用 GitHub 的开发人员来说是非常便捷的工具。界面干净,用起来非常顺手,顶部的分支时间线非常绚丽。
2⃣️Source tree
老牌的 Git GUI 管理工具了,也号称是最好用的 Git GUI 工具。功能丰富,基本操作和高级操作都非常流畅,适合初学者上手。
3⃣️TortoiseGit
对于熟悉SVN的开发人员来说,这个小乌龟图标应该是非常友善了。TortoiseGit简称 tgit,中文名海龟Git。他与其前辈TortoiseSVN 都是非常优秀的开源版本控制客户端软件。
场景: 在项目目录下有很多万年不变的文件目录,例如 css、js、images 等,或者还有一些目录即便有改动,我们也不想让其提交到远程仓库的文档,此时我们可以使用“忽略文件”机制来实现需求。
忽略文件需要新建一个名为 .gitignorg 的文件,该文件用于声明忽略文件或不忽略文件的规则,规则对当前目录及其子目录生效。
注意: 该文件因为没有文件名,没办法直接在 windows 目录下直接创建,可以通过命令行 Git Bash 来 touch 创建。
常见规则写法有如下几种:
1⃣️ /mtk/ 过滤整个文件夹
2⃣️ *.zip 过滤所有.zip文件
3⃣️ /mtk/do.c 过滤某个具体文件
4⃣️ index.php 不过滤具体某个文件
在文件中以“#”开头的代表注释
案例:
1.现在本地仓库中新建一个js目录以及目录中的js文件
2.依次提交本地与线上
3. 新增.gitignore 文件
4.编写文件中的规则(根据需要编写)
5.再次提交本地与线上
观察线上仓库js目录中是否有新增index.js文件;
说明:忽略文件的操作已经生效了
命令如下:
1.clone (克隆) :从远程仓库中克隆代码到本地仓库
2.checkout (检出) :从本地仓库中检出一个仓库分支然后进行修订3.add (添加):在提交前先将代码提交到暂存区
4.commit (提交): 提交到本地仓库。本地库中保存修改的各个历史版本
5.fetch (抓取): 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
6.pull(拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
7.push (推送) :修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
本教程里的git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此为大家提前列举:
下载地址:Githttps://git-scm.com/
备注:
Git GUI: Git提供的图形界面工具
Git Bash: Git提供的命令行工具
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
1.打开Git Bash
2.设置用户信息
git config --global user.name "xudefeng"
git config --global user.email"[email protected]"
查看配置信息
git config --global user.name
git config --global user.email
有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。
1.打开用户目录,创建 .bashrc 文件
Git是目前世界上最先进的分布式版本控制系统