Git
1 什么是Git
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git官网: Git
历史版本
git小故事:
2 版本控制分类安装
1 本地版本控制:
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件。
2 集中版本控制:
所有的版本数据都保存在服务器上,协同开发者做修改和保存。代表产品 SVN
有问题: 可能服务器故障或者损坏,会丢失数据,丢失历史文件。
3 分布式版本控制: Git
所有版本信息仓库
3.1 Git安装下载
git官网 Git
下载较慢: 可以用 国内镜像. 可百度.
http://npm.taobao.org/mirrors/git-for-windows/
下载 一个版本。 下一步 一直安装。
安装成功会在 安装目录中 有 git的图标以及相关的程序。
安装选项配置:
也可以一直 无脑下一步。
git Bash: Unix与 Linux风格的命令行,使用多,推荐。
git cmd: windows风格的命令号
Git GUI: 图形化界面的 Git, 不建议使用
可以右键打开 Git, 也可以通过鼠标 滚轮 去调整大小。
3 基本的 linux 命令
tab 命令补全
1 ls命令
就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。 有颜色区分
2 cd 命令
cd(changeDirectory) 命令语法: 到某个目录
cd .. 回到上一目录
cd D:
3 pwd命令
pwd 命令用于查看当前工作目录路径。
4 mkdir 命令
mkdir 命令用于创建文件夹。
在当前目录下创建文件夹: mkdir tt
创建连环文件夹: mkdir -p cc/aa/dd
5 rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
删除文件: rm a.txt
删除目录: rm –r aa
6 touch命令
新建一个文件,
如: touch a.txt
7 mv 命令
移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。
当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。
mv a.txt D:/ceshi 移动文件 和修改名字,可以反复测试。
8 clear 清屏
Linux 常用命令学习 | 菜鸟教程
4 Git的环境配置:
查看配置: git config -l
对应文件在: D:\D\Git\Git\etc\gitconfig
查看系统配置: git config –system --list
查看用户自己配置的: git config --global --list (新用户报错,没有配置,要配置用户名,密码)
设置用户名和密码:
执行一下命令初始化配置信息即可:
--global 这是设计系统级别 ,如果不带—global,设计项目级别,在该项目系统级别有效。
作用:主要是为了区分不同的开发人员。
设置git的用户签名。必须设置。
配置用户名:git config --global user.name "输入你的用户名"
git config --global user.name lpc
配置邮箱信息:git config --global user.email "输入你的邮箱信息"
git config --global user.email 3487135834@163.com
git并不会验证你的邮箱
注意: 用户签名和将来登录 github和 码云没有任何关系。只是为了标识你是谁?
15 Git 的工作流程
一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
Git 的工作区 暂存区 和版本库
我们先来理解下 Git 工作区、暂存区和版本库概念:
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
git一般执行的流程:
1 在工作目录添加,修改文件
2 将需要进行版本管理的文件放入暂存区
git add [file name]
撤销从 暂存区中管理的文件 git rm --cached aa.txt
3 将暂存区的文件提交到 git本地仓库
git commit –m “commit message” [file name]
所以: git文件的三种状态: 已修改(modified),以暂存(staged),已提交(committed)
如果推送到远程仓库, 用 push命令。
5.1 Git创建仓库
git创建仓库的方法有两种:
1 创建本地全新仓库
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。
该文件是一个隐藏文件。
2 克隆远程仓库:
Git文件的状态:
·
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
· Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
· Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
· Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
5.2 查看文件状态:
1 #查看指定文件状态
2 git status [filename]
3
4 #查看所有文件状态
5 git status
6
7 #精简的方式显示文件状态
8 git status -s
5.3 git操作
在Git的workspace hello 文件夹中测试:
- git status
- 新建文件 hello
git add . 或者 git add 文件名
git add . 会把本地所有untrack的文件都加入暂存区
如果是把暂存区中的文件撤回为 工作区:
- 提交暂存区中的内容到本地仓库
- git commit -m "第一次提交",
5.4 git的操作日志.
回退命令:
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id 退到/进到 指定commit的sha码
git reflog 常用于恢复本地的错误操作。
git reset --hard 3860ecf
git log可以显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作 ,详细的日志
git reflog是显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。精简版本的日志 用HEAD指针管理。
git reflog常用于恢复本地的错误操作。
场景:我们commit了一个操作,发现提交的是错误的,我们进行了回退,git reset HEAD^,也进行了checkout 操作,就是把工作区的文件也回退还原了,这时候发现commit的没有问题。等于说删了不该删的了,咋整,想再回退到删除之前的。找到之前的版本号进行回退,使用git log发现那个提交的版本号记录根本不存在了。
可以观察自己仓库中的: .git目录下面的 HEAD 和 ref 中的 heads 的master
- Git的分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
分支的好处是: 同时推进多个功能的开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会影响其他分支的开发,失败的分支删除重新开始即可。
6.1 分支的基本操作
分支操作的命令:
git branch dev 创建一个开发分支
git branch –v 查看现在有哪些分支
修改分支之后,要添加到暂存区,提交到本地库。
在主分支的位置上,合并 开发分支。
分支正常 合并,前面的命令够用。
- 冲突合并
在分支合并中,两个分支在同一个文件的同一个位置都做了修改。Git无法决定使用哪一个,必须的认为决定使用哪一个分支。
演示:
在主分支上添加 一行,保存,提交。
切换到dev分支,在dev分支上同一位值写一行,保存,提交。
切换到主分支。用主分支合并dev分支。
看结果。
看真实文件。手动解决。
解决之后, 添加 提交就行。 不要加文件名。
7 Git团队协作机制
7.1 团队内协作
7.2 跨团队协作
8 Git的远程仓库
8.1 远程仓库的种类
git远程仓库有 gitbub, 码云, GitLab等
GitLab 地址The DevSecOps Platform | GitLab ,用于仓库管理的的开源项目,一般用在企业,学校内部网络,自己搭建git私服。
重点操作: 码云。
- 码云:
进入码云的官网,注册信息。
9.1 绑定QQ。
9.2 创建仓库
9.3 设置本机绑定 SSH 公钥,实现免密码登录.
1 找到 ssh目录, .ssh
如果没有.ssh目录,可以自己建一个。
2 ssh-keygen -t rsa
用该指令之后,一路回车。不用输入
有对应的两个文件,
把生成的公钥 贴近码云中。 public 文件
验证成功之后,可以用码云创建一个自己的仓库。
可以验证是否连通gitee
ssh –T git@gitee.com
手写
ssh -t -p 22 git@gitee.com
9.4 本地文件推送到仓库中
本地库和远程库建立联系
在 gitee上新建空仓库的时候,有提示
cd existing_git_repo
git remote add origin https://gitee.com/lpcboy/lpcone.git
git push -u origin master
本地库 搞好,提交了之后push.
也可以:
git remote add origin https://gitee.com/lpcboy/lpcone.git
git push –set-upstream origin master
https://blog.csdn.net/jqwei2/article/details/93535543
9.44 好的操作
1 在 gitee上新建一个仓库。
2 建一个仓库,按没有仓库的操作。
如果已经有仓库按照,已有仓库的操作。
如果 让输入密码: 输入正确。
如果用户名密码输入错误: 下一次还是错误的用户名密码。 Git是会保存用户名密码的。
在控制面板à 用户账户
删除即可,就会让你重新输入 密码。
操作就是正常的。
git add git commit git push
9.5 用 clone的形式 clone到本地。
https://gitee.com/lpcboy/helloone.git
克隆下来测试:
注意:一定要进入 git目录。
10 IDEA集成 git
新建一个 项目sb,
把远程copy下来的 git配置 copy进本项目中。
文件选中的状态.
git add .
可新建包,新建类 观察文件的颜色等。
可以提交到远程仓库 git push
也可以选中项目,提交.
第二种集成git的方式:
1 git中建好项目。
2.
3 导入到版本管理器.
在idea中使用Git提交代码到远程仓库_qq_43179622的博客-CSDN博客
提交不上 解决方案:
https://blog.csdn.net/snakemoving/article/details/79478947
过滤资源文件夹,哪些可以不用提交。
11 IDEA集成Git New
11.1 在idea中配置Git
配置git的安装目录,给Idea.
11.2 在码云中创建仓库
创建一个仓库就行。勾选的协议什么的可以不勾选。
记录SSH地址: https://gitee.com/lpcboy/lpcgit.git
11.3 建一个和码云中一样的项目
11.4 .gitignore的常用配置
https://www.cnblogs.com/haojile/p/13326536.html
把 .gitignore 放入项目跟目录下面。
11.5 把该项目变成git仓库
选中项目,然后 git管理该项目。
直接提交就好,过滤文件过滤了不用的配置。
11.6 提交到远程仓库
如果需要输入密码: 输入密码即可。
12 从远程仓库中下载代码
输入git的 ssh 地址。
协同开发的时候 ,永远 先 pull , 再push。
同时提交同一块代码 会冲突.
13 分支操作
1 创建分支:
dev
2 在分支上开发代码,提交到远程仓库。
3 把分支上的代码 合并到 主分支
1 切换到主分支 ,master àcheckout
2 站在主分支的角度,合并代码到本地
3 远程仓库
本地选中,push上去。