参考链接1:https://www.bilibili.com/video/BV1FE411P7B3?p=2&spm_id_from=pageDriver
参考链接2:https://mp.weixin.qq.com/s?__biz=MzU0Nzc5MDQxNw==&mid=2247489688&idx=1&sn=04f844db1bd6de22bb15267b9e71716a&chksm=fb4853a6cc3fdab08930dd06a6419850189fab72e754825d48adf39a390aa20765601c65dfc4&cur_album_id=1323908580084449280&scene=190#rd
版本控制:管理所有的文件,方便查看历史记录。备份以及恢复,多人开发的作用很大
当下最流行的
所有的版本数据都保存在服务器上,协同开发人员从服务器上同步更新或上传自己的修改
每个人都有全部的代码,不会因为网络或服务器坏了原因
存储在多个电脑上的不同版本的代码文件进行版本管理。类似于一个协同的办公软件,github能够提供对版本管理服务支持的一个服务器供应商(git类似于微信这款软件,github类似于微信服务器端,用来交换每个微信软件端的信息,微信只能用官方服务器,git允许任何电脑成为服务器),当然能够提供git服务器的还有码云(Gitee)、腾讯开发者平台(dev.tencent.com)
所有下载慢的话都可以找镜像
会卸载:要删除环境变量,然后用卸载
安装完毕直接启动
GIT Bash
GIT CMD:windows
GIT GUI :无用
常见的一些命令
cd : 改变目录
cd .. 回退到上一个目录,直接cd进入默认目录
pwd : 显示当前所在的目录路径
ls : 都是列出当前目录中的所有文件
touch :新建一个文件 如touch index.js就会在当前目录下新建一个index.js
rm :删除一个文件, rm index.js就会把index.js文件删除
mkdir :新建一个目录,就是新建一个文件夹
rm -r 删除一个文件夹,rm -r src 删除src目录
mv 移动文件, mv index.html src index.html 是我们要移动的文件,src是目标文件夹
reset 重新初始化终端/清屏
clear 清屏
history 查看命令历史
help 帮助
exit 退出
表示注释
查看配置:git config -1
Config file location
--global use global config file
--system use system config file
--local use repository config file
--worktree use per-worktree config file
-f, --file <file> use given config file
--blob <blob-id> read config from given blob object
Action
--get get value: name [value-regex]
--get-all get all values: key [value-regex]
--get-regexp get values for regexp: name-regex [value-regex]
--get-urlmatch get value specific for the URL: section[.var] URL
--replace-all replace all matching variables: name value [value_regex]
--add add a new variable: name value
--unset remove a variable: name [value-regex]
--unset-all remove all matches: name [value-regex]
--rename-section rename section: old-name new-name
--remove-section remove a section: name
-l, --list list all
-e, --edit open an editor
--get-color find the color configured: slot [default]
--get-colorbool find the color setting: slot [stdout-is-tty]
Type
-t, --type <> value is given this type
--bool value is "true" or "false"
--int value is decimal number
--bool-or-int value is --bool or --int
--path value is a path (file or directory name)
--expiry-date value is an expiry date
Other
-z, --null terminate values with NUL byte
--name-only show variable names only
--includes respect include directives on lookup
--show-origin show origin of config (file, standard input, blob, command line)
--show-scope show scope of config (worktree, local, global, system, command)
--default <value> with --get, use default value when missing entry
查看系统配置:git config –system –list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=d:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslverify=false
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
查看本地的全局配置:git config –global –list
user.name=Runnerxr
user.email=xiongrui1690347341@163.com
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslverify=false
用户名和密码是必须要配置的,告诉服务器,表明你是谁
所有的配置文件都是保存在本地
创建仓库的版本:
还比较好懂,这里的大致步骤都是廖雪峰网站上的,所以整理的还是比较清晰的,这些整理也是为了后面自己能够更好的管理着一些代码,让自己的远程或者同步变得更加的合理和流畅。这里我还是认为这个版本库确实很厉害,而且在后面的日子里面会运用的非常的频繁。
自己已经创建好了一个仓库了(在对应的为位置上),多了一个.git的目录,用来跟踪管理版本库的,不要手动的去修改目录里面的文件(修改会破坏仓库)
- 编写一个readme.txt文件
Git is a version control system.
Git is free software. - git add readme.txt(第一步)
- git commit -m “wrote a readme file” (第二步)
- -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
- 嫌麻烦不想输入-m “xxx”行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
- 1 file changed:1个文件被改动(我们新添加的readme.txt文件)
- 2 insertions:插入了两行内容(readme.txt有两行内容)
注意事项:
commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
- git add file1.txt
- git add file2.txt file3.txt
- git commit -m “add 3 files.”
git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。
以下为第二次的一些命令:
- git status
- git diff readme.txt
- git add readme.txt
- git status
- git commit -m “add distributed”
- git status
小结:
- 需要随时掌握工作区的状态,使用git status
- 如果git status告诉文件被修改过,用git diff可以查看修改的内容
工作区和暂缓区
工作区:working directory
版本库:repository
git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
直观的理解如下:
Git管理的文件分为:工作区,版本库,版本库又分为暂存区stage和暂存区分支master(仓库)
工作区>>>>暂存区>>>>仓库
- git add把文件从工作区>>>>暂存区,git commit把文件从暂存区>>>>仓库,
- git diff查看工作区和暂存区差异,
- git diff –cached查看暂存区和仓库差异,
- git diff HEAD 查看工作区和仓库的差异,
- git add的反向命令git checkout,撤销工作区修改,即把暂存区最新版本转移到工作区,
- git commit的反向命令git reset HEAD,就是把仓库最新版本转移到暂存区。
管理和修改
git跟踪管理的是修改,而非文件
撤销修改
删除文件
远程仓库
为了学习GIT搭建服务器是小题大做,可以用github提供的git仓库的托管服务,免费获取git的远程仓库(也就是最为一个初级的程序员最应该需要做到的地方)
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key:在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "xiongrui1690347341@163.com"
放在了用户的主目录里面.ssh目录,找到id_rsa和id_rsa.pub 这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。一路回车之后就会创建一个.ssh目录
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
- 设置SHH Key的原因:github需要识别你推送的提交确实是你推送的,不是别人冒充的,git支持SSH协议,github只要知道了你的公钥,就可以确认只有你自己可以推送
- GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
- 在GitHub上免费托管的Git仓库,任何人都可以看到
- 不想让别人看到Git库:
- 让GitHub把公开的仓库变成私有的:不可读更不可写
- 自己动手,搭建一个git服务器,别人看不见,用于公司内部的开发必备
添加远程仓库
在本地创建了一个git仓库,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作
自己已经关联了一个仓库learngit,仓库是空的,从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,之后就可以把本地的内容推送到Github仓库了:命令如下:
git remote add origin git@github.com:Runnerxr/learngit.git
添加之后,远程仓库的名称就是origin(Git的默认叫法,很直观的就能看出是远程库)
把本地库的内容推送到远程库上面
git push -u origin master
解释:
- 用git push命令,实际上是把当前的分支master推送到远程
- 原先仓库是空的,第一次推送master分支,加上-u参数,git不但会把本地的master分支内容推送到远程新的master,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时可以简化命令
推送成功之后,只要本地做了提交,就可以通过命令,把本地的master分支的最新修改推送至Github,就有了 真正的分布式版本库。
git push origin master
从现在起,只要本地做了提交,就可以通过命令
git push origin master
把本地的master 分支的最新修改推送至Github,拥有了真正的分布式版本库!
小结如下:
- 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
- 关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;
- 关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
- 每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
分布式版本的好处:在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,当有网络的时候,再把本地提交推送一下就完成了同步
从远程库克隆
现在是从零开始,先创建远程库,然后从远程库克隆
- 创建一个仓库,名字叫:gitskills
- 勾选“Initialize this repository with a README”,自动创建一个README
.md文件 - 远程仓库准备好了,然后用git clone 克隆一个本地库:”git clone git@github.com:Runnerxr/gitskills.git”
- 如果有多人协同开发,每个人各自从远程克隆一份就行
- Github给的地址:(Git支持多种协议)
- https://github.com/Runnerxr/gitskills.git(默认的git://使用的ssh,是最快的)
- 也可以使用https等其他的协议(很慢,而且每次推送都需要输入口令,但是有些公司只开放http端口)
分支管理
作用:
- 创建一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而自己在自己的分支上干活,想提交就提交,直到开发完毕,再一次性合并到原来的分支上,既安全,又不影响别人工作。
- git的分支无论创建、切换和删除分支,git能快速完成
目前自己已经有的几个远程仓库
1、Runnerxr.github.io(主要想用于记录和更新Gridea里面的一些内容,但是前提是Gridea这个博客能够正常完整的使用下去)
2、bear-blog(Hexo + github + vercel 静态博客免费部署方案)
3、learngit(学习git的时候特意建立的学习的仓库)
4、VS-(平时线下的VScode上的一些代码的上传)
以下是根据非解构上面的一篇文章一步步的进行相应的创建,尽量把过程写的详细一点