超详细的Git学习笔记
从B站搜到的尚硅谷视频学习了Git,记录了一下学习的内容,收获很大
学习地址:
https://www.bilibili.com/video/BV1vy4y1s7k6?p=11&share_source=copy_web
文章目录
Git介绍 分布式版本控制工具 VS集中式版本控制工具
- Git是什么?
免费开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目
- Git有什么优点?
易于学习,占地面积小,性能极快。具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion 、CVS、Perforce和ClearCase 等版本控制工具
-
什么是版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
版本控制最重要的是可以记录文件修改历史记录,从而让用户能够看到历史版本,方便版本切换
(情景:自己在写东西时,不确定修改后的下一版本是否比上一个版本好,这时候就需要退回上一个版本,把每个版本的文件都另存一份,就能轻松退回上一个版本,就能实现一个简单的版本控制)
-
为什么要用到版本控制工具?
个人开发过渡到团队协作
(情景:在团队协作开发的时候,甲乙两个同学都需要修改自己那部分内容,他们将原先的内容从公司的服务器上下载下来,然后进行修改,修改完成时,如果甲乙都上传文件并覆盖,那么必定有一个同学的被另一个同学的替换掉,这时候就需要版本控制工具,来将两个人修改的结合起来)
-
版本控制工具
-
集中式版本控制工具
CVS、SVN(Subversion)、VSS…
都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们通过客户端连接到这台服务器,取出最新的文件或者提交更新。
-
好处:每个人都可以在一定程度上看到项目中其他人正在做什么,管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易
-
坏处:中央服务器的单点故障。如果服务器一小时不能工作,那么这一个小时内,谁都无法提交更新,也就无法协同工作.
-
-
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs…
每台客户端就是一个代码库,每个人在自己的本地计算机上做版本控制,在写代码之前,要把远程库上的代码克隆下来到自己的本地库,然后基于自己的本地库做版本控制,在自己的电脑上写好后,再推送到远程库,就算远程库没了,也可以再自己电脑上做版本控制。
优点:每个人手上都有一份完整的,包含历史记录的代码
-
-
Git工作机制
工作区(代码存放的本地目录) ——【通过
git add
命令添加到暂存区】—— 暂存区(在工作区写代码后,添加到暂存区,暂存区的代码是可以删除和修改的) ——【通过git commit
命令提交到本地库,本地库的代码是不能删除和修改的】—— 本地库 ——【通过git push命令推送到远程库】——远程库
-
Git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库
- 局域网
- GitLab
- 互联网
- GitHub(外网)
- Gitee码云(国内网站)
- 局域网
Git安装 基于官网发布的最新版本2.32.0.2 安装
Git官网:Git (git-scm.com),可以在搜索引擎直接搜,通常第一个就是Git
下载安装步骤:
-
进入官网后,点击右边的小电脑上面的Download for Windows,电脑就能自动下载Git
-
下载完成后打开Git安装文件
-
协议界面直接下一步
-
选择好安装目录后下一步
-
Select Components选项内容勾选(使用默认的就行,然后直接下一步):
-Additional icons //创建快捷方式 --On the Desktop //桌面上 -Windows Explorer integration //右键菜单 ✔ --Git Bash Here //Git的命令行客户端 ✔ --Git GUI Here //Git的GUI客户端(图形化界面) ✔ -Git LFS (Large File Support) //大文件的支持 ✔ -Associate .git* configuration files with the default text editor //配置默认编辑器 ✔ -Associate .sh files to be run with Bash //关联.sh格式文件 ✔ -Check daily for Git for Windows updates //每天检查Git是否使用Windows更新 -(NEW!)Add a Git Bash Profile to Windows Terminal //(新!)将 Git Bash 配置文件添加到窗口终端
-
Select Start Menu Folder选择开始菜单的位置,下一步
-
Choosing the default editor used by Git选择默认编辑器,根据自己的情况而定 下一步(视频里用的Vim,也可以用自己熟悉的编辑器)
-
Adjusting the name of the initial branch in new repositories是否要修改初始化分支的名字 默认让Git决定就行 下一步
-Let Git decide //让Git决定,以后无论创建哪个库,都是用master作为名字(默认) -Override the default branch name for new repositories //自定义初始化分支名字
-
Adjusting your PATH environment是否要修改环境变量 根据自己的情况而定 下一步
-Use Git from Git Bash only //只在Git Bash客户端里面使用Git(不会修改环境变量)(默认) -Git from the command line and also from 3rd-party software //可以在Git Bash里面使用Git,也可以在第三方软件的控制台等里面使用Git -Use Git and optional Unix tools from the command Prompt //会修改掉一些Windows工具(一般不选这个)
-
Choosing HTTPS transport backend选择后台客户端连接协议,默认OpenSSL就行了 下一步
-Use the OpenSSL library //使用OpenSSL协议进行连接 -Use the native Windows Secure Channel library
-
Configuring the line ending conversion配置行末换行符 默认选第一个就行 下一步
-Check Windows-style ,cimmit Unix-style line endings //自动选择样式 -Checkout as-is ,commit Unix-style line endings -Checkout as-is ,commit as-is
-
Configuring the terminal emulator to use with Git Bash配置Git Bash终端类型 默认选第一个就行 下一步
-Use MinTTY(the default terminal of MSYS2) -Use Windows' default console window //这个需要用dos命令
-
**Choose the default behavior of
git pull
**选择默认的从远程库拉取代码到本地库的行为 默认就行 下一步-Default(fast-forward or merge) -Rebase -Only ever fast-forward
-
Choose a credential helper凭据管理器 选第一个 下一步
-Git Credential Manager Core //选择跨平台的凭据管理器 -Git Credential Manager //选择windows的凭据管理器 -None
-
Configuring extra options其他配置
-Enable file system caching //使用文件缓存机制,默认勾选 -Enable symbolic links //使用符号连接,勾选
-
Configuring experimental options 实验室功能 视频中不勾选 然后安装
-Enable experimental support for pseudo consoles //允许在Git Bash里面运行第三方程序 -Enable experimental built-in file system monitor //启用实验内置文件系统监视器 (自动允许内置文件系统监视器,以加快包含许多文件的工作树中的常见操作,如`git status` ,`git add`,`git commit`等 这个视频中的Git版本没有,应该可以勾选
-
然后就安装完成了,安装完成后在桌面右击可以看到Git的快捷菜单
Git命令 基于开发案例 详细了解git的常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git rm --cached 文件名 | 删除暂存区文件 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
设置用户签名
-
鼠标右击Git Bush Here
-
输入下面的命令并回车(用户名和邮箱输入自己定的用户名和邮箱)
git config --global user.name 【这里写用户名】 git config --global user.email 【这里写邮箱】
-
完成后可在用户C盘的用户目录下找到.gitconfig 里面存有自己的用户签名
说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的.Git首次安装必须设置一下用户签名,否则无法提交代码
注意:这里的用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系
初始化本地库
- 在需要创建本地库的目录里右击打开Git Bush Here
- 输入命令
git init
然后回车 - 然后就能在目录下看到.git目录了,没有显示的可以点击菜单栏的 查看 —— 隐藏的项目
查看本地库状态
初始化好的本地库,就可以查看本地库的状态了,使用命令git status
就可以查看了
什么项目都没有创建的情况下 会显示
On branch master
No commit yet
nothing to commit (create/copy files and use "git add" to track)
可以创建一个文件在里面
然后再用git status
这时候会显示(发现一个未被追踪过的文件,需要用git add
命令添加暂存区)
On branch master
No commit yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
添加暂存区
输入命令git add 【这里输入文件名】
我的是git add hello.txt
,就把文件存到暂存区
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
用git rm --cached 【文件名】
可以删除暂存区的内容,git rm --cached hello.txt
删除后可以再用git add 【文件名】
添加到暂存区
提交本地库
使用命令git commit -m "日志信息" 文件名
将暂存区的文件提交到本地库,形成自己电脑上的历史版本
git commit -m “first commit” hello.txt
执行后再允许 git status 会显示
On branch master
nothing to commit, working tree clean
可以通过 git reflog
查看历史记录,输入后会显示
c5b235a (HEAD -> master) HEAD@{0}: commit (initial): first commit
//其中的前7位是缩减版的版本号,是版本号的前七位
//(HEAD -> master)代表指针指向当前版本
可以通过git log 查看版本的详细信息,输入后会显示
commit c5b235add282638e3f41d30ed3ebc2bb7a676f6e (HEAD -> master) //版本号
Author: zqq <991521874@qq.com>
Date: Mon Jul 19 16:29:03 2021 +0800
first commit
修改文件
修改自己的文件,修改完保存,然后输入命令git status
,会显示
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
//检测到文件被修改了,需要重新添加暂存区,提交本地库
使用git add hello.txt
和 git commit -m "second commit" hello.txt
之后 显示如下
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master 622bb3c] second commit
1 file changed, 1 insertion(+), 1 deletion(-)
此时输入git log
就可以查看历史版本的详细信息,如下
commit 622bb3c70c8270ff345b61856c77787e8c77d10e (HEAD -> master)
Author: zqq <991521874@qq.com>
Date: Mon Jul 19 16:41:51 2021 +0800
second commit
commit c5b235add282638e3f41d30ed3ebc2bb7a676f6e
Author: zqq <991521874@qq.com>
Date: Mon Jul 19 16:29:03 2021 +0800
first commit
版本穿梭
使用 git reset --hard 【版本号(前七位就行)】
先使用git reflog
查看版本信息,显示
622bb3c (HEAD -> master) HEAD@{0}: commit: second commit //此时指向的是第二个版本
c5b235a HEAD@{1}: commit (initial): first commit
然后使用git reset --hard c5b235a
,此时指向第一个版本,此时会发现目录下文件的内容也变成了第一个版本的内容,用git reflog
命令显示如下
c5b235a (HEAD -> master) HEAD@{0}: reset: moving to c5b235a
622bb3c HEAD@{1}: commit: second commit
c5b235a (HEAD -> master) HEAD@{2}: commit (initial): first commit //此时指向的是第一个版本
能从第二个版本切到第一个版本,同时也可以再切回第二个版本,切完以后会改变提交的文件内容
Git分支操作 分支特性 分支创建 分支转换 分支合并 代码合并冲突解决
什么是分支
在版本控制过程中,同时推进多个任务,可以为每个任务创建单独的分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,(情景:可以想象成副本,主分支的已经上线使用,然后需要加入新的功能的时候,把主分支的内容拷贝下来,作为一个分支,新的内容在这个分支上开发完以后,再将新分支合并到主分支)
分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
-
查看分支
命令
git branch -v
可以查看分支,结果如下master c5b235a first commit
-
创建分支
命令
git branch 【分支名】
可以创建分支,git branch hot-fix
后git branch -v
结果如下hot-fix c5b235a first commit * master c5b235a first commit
-
切换分支
git后面还是master,说明当前还是master分支
使用
git checkout 【分支名】
可以切换分支 先git checkout hot-fix
然后git branch -v
,可以看到切换到了 hot-fix 分支* hot-fix c5b235a first commit master c5b235a first commit
-
修改分支
切换完分支以后,就可以修改工作区的内容(.git文件所在目录下)
修改完以后,需要
git add 【文件名】
git commit -m "【版本信息】" 【文件名】
我这边是
git add hello.txt
git commit -m "hot-fix first commit" hello.txt
然后
git reflog
, 可以看到指向了hot-fix分支a6f5eea (HEAD -> hot-fix) HEAD@{0}: commit: hot-fix first commit c5b235a (master) HEAD@{1}: checkout: moving from master to hot-fix c5b235a (master) HEAD@{2}: reset: moving to c5b235a 622bb3c HEAD@{3}: commit: second commit c5b235a (master) HEAD@{4}: commit (initial): first commit
-
合并分支
想把hot-fix 合并到master分支,需要先切换到master分支,然后再master分支下执行命令
git merge hot-fix
,就可以把hot-fix 合并到master分支下我这边是
git checkout master
切换完以后发现.git目录所在目录的hello.txt文件内容又变成了之前master的内容,然后git merge hot-fix
,此时发现分支合并了,hello.txt文件的内容变成了hot-fix的内容 -
产生冲突
合并分支时,两个分支在同一个文件的同一位置有两套完全不同的修改。Git无法替我们决定使用哪一个,必须人为决定新代码内容
先修改master分支文件的内容
git add hello.txt
后git commit -m "master test" hello.txt
再修改hot-fix分支文件的内容
git checkout hot-fix
后git add hello.txt
后git commit -m "master test" hello.txt
此时执行
git checkout master
切换master,然后合并git merge hot-fix
,会显示如下内容Auto-merging hello.txt CONFLICT (content): Merge conflict in hello.txt Automatic merge failed; fix conflicts and then commit the result.
此时执行命令
git status
,会提示两个文件都修改了,就需要手动合并代码On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: hello.txt no changes added to commit (use "git add" and/or "git commit -a")
-
解决冲突
出现冲突合并失败后,打开hello.txt文件,会再文件中标记出来,手动将文件中的内容合并,然后删除下面的合并提示```<<<<<<< HEAD``及其后面的内容都是合并提示,修改完以后保存,然后添加到暂存区,提交到本地库,(master|MERGING)状态下,提交时不用写文件名,实现手动合并
git add hello.txt
添加到暂存区git commit -m "merge test"
然后就手动合并成功了
Git团队协作机制
团队内协作
团队中甲本地库写好了基础代码以后,用push命令推送 到远程库
团队中乙拥有甲授予的权限,乙从远程库clone代码下来进行拓展修改,完成后push到远程库
甲再从远程库中用pull命令拉取远程库中修改过的代码,这样就实现了团队代码的同步
跨团队协作
A团队中的代码遇到解决不了的问题,请求B团队帮忙
B团队的
人通过fork命令作为分支,将A团队的远程库代码复制过来,作为自己的远程库
B团队从自己的远程库clone下来,然后再自己本地库进行修改,完成后push到自己的远程库
B团队完成后,需要pull request向A团队发送一个请求,然后A团队审核
A团队审核后,使用merge将代码合并过来,然后用拉取到本地库,实现跨团队协作
GitHub
GitHub官网https://github.com
创建远程库
-
1.登录GitHub后,点击网页右上角的+号,选择 new Repository(新建存储库)
-
2.远程库的名字和本地库的名字最好相同,(本地库的名字指.git文件夹所在的文件夹名)
输入好远程库名称后,会自动检测是否可用
-
3.公有库私有库的选项,因为是测试,默认用公有库就行
-
4.直接点最下方的Create repository,就创建好了一个远程库
-
5.此时会弹出一个页面,可以选择远程库的链接,有两种不同协议的链接 HTTPS 和 SSH
我们先用HTTPS的链接,可以直接点后面的按钮复制链接
https://github.com/zqq2017123491/git-demo.git
-
查看远程库链接别名的命令
git remote -v
,此时是没有别名的 -
创建远程库链接别名的命令
git remote add git-demo https://github.com/zqq2017123491/git-demo.git
此时查看别名,结果如下:(出现两个别名,说明这个别名既可以拉取,也可以推送)
git-demo https://github.com/zqq2017123491/git-demo.git (fetch) git-demo https://github.com/zqq2017123491/git-demo.git (push)
-
代码推送 Push
基本语法git push 别名 分支
比如我把master分支推送,那就git push git-demo master
执行后会弹窗让我们登录,可以用浏览器的账号登录,登录后会提示我们认证
绑定后会提示Authentication Succeeded,认证成功,Git Bash会显示如下
Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 8 threads
Compressing objects: 100% (16/16), done.
Writing objects: 100% (24/24), 1.84 KiB | 471.00 KiB/s, done.
Total 24 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/zqq2017123491/git-demo.git
* [new branch] master -> master
然后就可以在github的库里看到自己推送的文件了
代码拉取 Pull
在github上可以直接点文件右上角的🖊修改文件内容, 改完以后需要在下方的commitchanges里面输入版本信息然后提交,这样就可以开始pull的尝试了
代码拉取的命令 git pull 链接别名 分支
,我这里是git pull git-demo master
,结果如下,此时打开.git所在目录的文件就能看到改完后的内容了,说明拉取成功
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 671 bytes | 5.00 KiB/s, done.
From https://github.com/zqq2017123491/git-demo
* branch master -> FETCH_HEAD
26143e9..0e77469 master -> git-demo/master
error: could not spawn fsmonitor--daemon in the background
Updating 26143e9..0e77469
error: could not spawn fsmonitor--daemon in the background
Fast-forward
hello.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
代码克隆 Clone
项目搭建好后,同一个团队的其他人可以通过Clone来获取代码,在尝试Clone之前先删除windows凭据管理器下github的账号信息,Clone代码是不需要登录账号的,Clone需要先知道远程库的链接
-
在windows开始菜单搜索框搜索 “凭据管理器”,然后删除github的登录凭据
-
新建一个文件夹,在里面右击打开Git Bush
-
执行命令
git clone 【远程库链接】
git clone https://github.com/zqq2017123491/git-demo.git
结果如下
Cloning into 'git-demo'... remote: Enumerating objects: 27, done. remote: Counting objects: 100% (27/27), done. remote: Compressing objects: 100% (11/11), done. remote: Total 27 (delta 8), reused 23 (delta 7), pack-reused 0 Receiving objects: 100% (27/27), done. Resolving deltas: 100% (8/8), done.
此时会发现刚才创建的目录下多了一个文件夹,打开后就是.git所在的目录
使用
git remote -v
可以查看链接别名结果如下
origin https://github.com/zqq2017123491/git-demo.git (fetch) origin https://github.com/zqq2017123491/git-demo.git (push)
团队内协作
-
创建远程库的人邀请团队成员
-
在GitHub打开远程库,然后点击右上方的设置菜单
-
选择左侧的Manage access
-
点击Invite a collaborator
-
输入团队人的用户名或者邮箱,会自动弹出用户,选中就可以了
-
然后再最底下点击Pending Invite邀请用户,就可以获取一个邀请链接
https://github.com/zqq2017123491/git-demo/invitations
-
-
团队成员接受邀请,推送修改的内容
-
登录团队成员的账号
-
然后在浏览器中打开邀请链接
-
点击Accept invitation 接受邀请
-
然后就可以在修改文件内容后,登录团队成员的账号 进行推送了
执行
git add hello.txt
执行
git commit -m "other test push" hello.txt
执行
git push origin master
同样需要登录认证
结果如下:(然后团队内的成员就都能在github中看到内容了)
Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/zqq2017123491/git-demo.git 0e77469..90b33e0 master -> master
-
-
创建远程库的人拉取修改后的文件
-
先将凭据管理器中成员的github账号删除
-
在github上登录创建远程库的账号
-
打开之前的文件夹
-
右击打开Git Bash
-
执行
git pull 【链接】 【分支】
我这边是git pull git-demo master
,执行结果:remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 Unpacking objects: 100% (3/3), 270 bytes | 1024 bytes/s, done. From https://github.com/zqq2017123491/git-demo * branch master -> FETCH_HEAD 0e77469..90b33e0 master -> git-demo/master error: could not spawn fsmonitor--daemon in the background Updating 0e77469..90b33e0 error: could not spawn fsmonitor--daemon in the background Fast-forward hello.txt | 1 + 1 file changed, 1 insertion(+)
-
然后就能使创建远程库的那个工作区和远程库的同步了
-
跨团队协作
想要和其他团队合作,登录账号后,打开其他人团队的远程库连接地址,或者通过搜索的方式找到远程库,然后点击右上方头像下面的Fork
,就可以在自己账号上创建一个同样的远程库,可以clone下来修改,也可以直接在GitHub里面改,完成后选择上方的Pull requests菜单,点击Create pull request按钮,可以输入标题和评论,就完成了请求,然后点Create pull request,等待对方团队审核
对方团队登录后,也要点击Pull requests菜单,查看修改的内容,进行审核,审核通过以后,点击上面的conversation菜单,点Merge pull request按钮然后点Confirm merge,合并到自己的项目中,就合并完成
SSH免密登录
远程仓库的Code下拉框里,还有一个SSH连接
-
先打开自己电脑C盘 "用户"文件夹,在"用户"文件夹下,找到自己电脑用户的文件夹打开
-
如果里面有.ssh,先删除
-
然后右击 Git Bash Here
-
输入命令
ssh-keygen -t rsa -C 【描述内容】
,输入完成后,按几下回车ssh-keygen 是生成免密登录协议 -t 指定用哪种加密算法来生成,这边的rsa是一种非对称加密算法 -C 描述,自己定,可以用来描述这个免密登录协议是给哪个账号的
敲完结果如下
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/99152/.ssh/id_rsa): Created directory '/c/Users/99152/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/99152/.ssh/id_rsa Your public key has been saved in /c/Users/99152/.ssh/id_rsa.pub The key fingerprint is: SHA256:qDF2Aiqfrrw+VW2xFvJRBedxCgeIFUm3C+vAZzqHkoM coderZqq The key's randomart image is: +---[RSA 3072]----+ | ++=*+= . | | o *. * + | | . +.=. o | | . ... Bo . | |o *o=+S. | |...+.*B | | E++.+ o | |.o o o | |o=+ | +----[SHA256]-----+
-
此时发现目录下生成了一个.ssh文件夹,里面有一个私钥和一个公钥,复制公钥(id_rsa.pub)里面的内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBdkPYGxBXWLc1zlvy+d2CKB6CHJJgVeN3txMwEYB2gAKb9glPcee40CCO7oYX0ih/aeJ8Akek1Bh+rkHku7JjkAdmFNCG3dtU8NqjnPF1yXcpB8saKP9ixbYEO9MqZUd2GQmTUN8e59orLSLDjXLnV4FqH9X0+g/GIPvEasB8n6LRc8LHcvXn3dTvgMIIaoI6V7CT2fu8Wa8nQod5KHioNxL25rULz72jt90BLVavbMyqvEz21j84DDWrTjxQgK0wYJP+kvLkNZbGH2bJyKopYLKoSh8SJPEZg6EpsyYniAiy1P76IMX/t3CIhEIxLPKXo3ugBN6lnAg9N6lZDP3QqmBM9ezMKB9sQZdh9/oXNUltinTMWXs4O+voqP3tvQsDsMryYxjO/Lsj0zfJBPFsxi9OBqP09KKB1mLNbnUi65eSAZp08W6ziD48hijsX74wmuGPUg3wDomBdKpmwO/EhKazTZkzxsUl+YKhyrNHQM/1bKyzONiwcmwhtiqAhMM = coderZqq
-
登录GitHub,点击头像下拉菜单,选择Settings,然后选择左侧菜单栏中的SSH and GPG keys
点击New SSHkey,随便起个名字,然后再key里面粘贴公钥
-
打开本地工作区的目录(.git所在目录),右击打开git-demo
-
执行命令
git pull 【ssh链接】
我这边是
git pull git@github.com:zqq2017123491/git-demo.git
,得到如下结果,输入yes回车The authenticity of host 'github.com (13.229.188.59)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?
然后能得到如下结果,此时可以发现工作区(.git所在目录)的文件内容已经拉取好了,可以修改其中的内容,然后在push试一下
修改完内容,然后执行命令
git add hello.txt
然后git commit -m "coderZqq commit" hello.txt
然后git push git@github.com:zqq2017123491/git-demo.git master
结果如下,到Github上检查一下,修改成功!Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 291 bytes | 291.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:zqq2017123491/git-demo.git 0f0b69a..34de50c master -> master
IDEA 集成 Git
配置Git忽略文件
-
为什么要忽略他们?
与项目实际功能无关,不参与服务器上部署运行。把它们忽略掉能屏蔽IDE工具之间的差异
-
怎么忽略?
创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是git.ignore)
-
需要在c盘的用户目录下,找到自己的用户文件夹,在里面创建一个git.ignore文件,记事本打开,将下面内容复制进去并保存(要忽略的文件)
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/# Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar hs_err_pid* .classpath .project .settings target .idea *.iml
然后打开用户目录下的.gitconfig文件里面进行配置(在后面加入两行内容,路径根据自己的路径来写)
[core] excludesfile = C:/Users/99152/git.ignore
注意:这里路径用的是"/" 不是"\"
保存后就配置完成
-
定位Git程序
打开IDEA,创建一个Maven工程
打开file——Settings ,找到Version Control,找到Git,然后再第一行设置下Git的安装目录
找到Git的安装目录的bin目录下的git.exe,然后点OK,然后点Test,此时会有个弹窗,说明IDEA已经定位到Git程序,然后点OK就行
初始化本地库
点击IDEA上方菜单的VCS——import into Version Control——Create Git Respository
选中的目录就是当前项目的根目录然后点OK,此时右击项目,就能看到Git,并且pom.xml文件变红了,代表文件未被追踪,可以在pom.xml文件右击,选择Git——Add,就能添加到暂存区
此时可以创建一个类,会自动提示是否需要将文件添加到暂存区
写完类以后,可以将这个类添加到暂存库,也可以把整个项目添加到暂存库
点击添加时,会询问是否提交忽略文件,点取消
添加完后,会自动追踪到文件,后面修改文件可以直接点提交
点击提交,在Commit Message里面输入版本信息,就可以提交
提交完成后,可以在IDEA下方的Version Control中,Log里面查看已经提交的版本,选中某一个版本可以查看版本的详细信息
切换版本
提交多个版本后,可以在Log里面查看,然后选中一个版本右击,选择Checkout Reversion,就可以切换到选中的版本
分支
创建分支
法1:右击项目名,选择Git,找到Repository,选择Branches,然后点击New Branches,创建分支
法2:点击IDEA右下角,有个Git:master,同样点击New Branches ,创建分支
创建完以后,右下角就从master变成你的分支名
切换分支,可以通过右下角的Git:分支名,然后选择想要切换的分支,Checkout,进行切换
合并分支
修改完自己创建的分支后,提交到本地库,在下方的Log可以看到黄色的头指针在自己新创的分支上
切换到master分支,然后点击右下角的Git:分支,选择刚才创建的分支,然后选Merge into current,就能合并分支。
合并分支代码冲突
在创建和修改了新分支的内容,同时修改了master分支的内容,就会产生冲突,可以在合并时弹出来的页面进行修改,点击左右两边的箭头合成
IDEA集成GitHub
IDEA登录GitHub
在IDEA的Settings里面找到Version Control 里面的GitHub(没有可以直接在Plugins里面下载),点击里面的Add account,登录GitHub
登录不上可以点击Enter token ,需要先去GitHub申请个Token
GitHub token申请方法
在GitHub官网,点击头像下拉,选择Settings,Developer settings,找到Personal access tokens
Generate new token将口令的权限打满,生成完以后把口令复制下来
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
然后就可以通过个人口令来登录GitHub了
IDEA分享项目到GitHub
IDEA可以直接点击VCS菜单中的import into Version Control ,Share Project On GitHub将项目分享到GitHub,(不需要在GitHub中创建远程库,他会自动创建一个远程库)
IDEA Push推送项目到远程库
-
直接右击项目,选择Git——Repository——Push,就可以将项目推送到远程库
-
或者点VCS菜单下的Git——Push,也可以推送
用HTTPS协议可能push很慢,可以将GitHub远程库的SSH复制下来,然后在Push的时候点击别名,选择Define Remote ,修改别名,将SSH的链接粘贴进去,选中修改好的别名再push会快一些
IDEA Pull拉取远程仓库代码到本地
如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题
也是在Git菜单下,有个Pull,直接点击就可以拉取
同样的可以切换SSH链接来拉取
IDEA clone 克隆代码到本地
重新找一个文件夹,打开IDEA,在IDEA的初始界面有个Get from Version Control,点击后选择Git,输入地址和路径,就能把代码克隆到本地
Gitee码云
码云官网: https://gitee.com
码云创建远程库
登录账号后,点击右上角的"+",就可以创建远程库了,和GitHub类似,码云也是支持SSH免密登录的,配置方法和GitHub一样
IDEA集成Gitee码云
需要在settings的Plugins里面下载一个Gitee
然后就可以在Git里面修改路径,push自己的项目了
码云连接GitHub进行代码的复制和迁移
在码云里面创建仓库的时候,可以直接在最下方找到导入已有仓库,在GitHub里面复制远程库的HTTPS链接,然后在码云里面粘贴,然后直接点击创建按钮,就可以把GitHub的项目复制过来
如果GitHub的项目更新以后,在码云项目名字后面,有个刷新按钮,就可以进行项目同步
GitLab 基于局域网的托管中心
在使用GitLab之前,需要有一台服务器,没有的可以使用VMware虚拟机来搭建
这里用的是CentOS 7作为服务器的操作系统(我没有使用B站教程中的材料)
-
VMware下载链接:
链接:https://pan.baidu.com/s/1dxE9mYk-39gir8b4vxaBfA
提取码:1s2r -
GitLab官网: https://about.gitlab.com
-
CentOS 7 下载链接:
链接:https://pan.baidu.com/s/1IlTfOHwo_FAA4pbb_ghoSQ
提取码:1e2e
GitLab服务器的搭建和部署
服务器准备
-
准备一个CentOS7以上版本服务器,内存4G,磁盘50G
-
关闭防火墙,配置好主机名和IP,保证服务器可以上网
-
点击虚拟机上的编辑菜单,选择虚拟网络编辑器
-
点击弹出框右下角的更改设置,然后选中VMent8,修改子网ip,主要改后面两位(我这边设置的是192.168.8.0)
-
点NAT设置,修改网关IP,我设置的是192.168.8.2
-
点击DHCP设置,修改起始ip为192.168.8.128 结束ip为192.168.8.254
-
然后在windows开始菜单搜索框搜索“网络连接”,
打开后找到自己的WLAN,右击属性,共享,选择一个家庭网络,选VMWare NetworkAdapter VMnet8然后保存
然后选中VMWare NetworkAdapter VMnet8,右击属性,双击Internet协议版本4(TCP/IPv4)
点击使用下面的IP地址,IP地址、子网掩码、网关设置要和vmware里面的设置一致
我的是:
ip地址:192.168.8.1 子网掩码:255.255.255.0 默认网关:192.168.8.2
-
root连接服务器,执行指令
cd /etc/sysconfig/network-scripts/
-
执行指令
vi ifcfg-ens33
按i进行编辑 -
在里面修改
BOOTPROTO=none
(代表静态分配IP)修改ONBOOT=yes
,在最后面加上IP和网关 DNS1,我的是 -
IPADDR=192.168.8.100 #IP地址 NETMASK=255.255.255.0#子网掩码 #这里的ip和前面设置的C:\Windows\System32\drivers\etc\host的ip地址一致实现映射 GATEWAY=192.168.8.2 #网关 必须和VMware里面的网关相同 DNS1=8.8.8.8
-
编辑完成 按
esc
键 然后输入:wq
保存退出 -
然后执行
service network restart
-
然后可以
ping www.baidu.com
试试看是否能正常联网 -
然后修改主机名,
vi /etc/hostname
改成git-server,然后重启服务器
-
-
打开自己电脑的 C:\Windows\System32\drivers\etc\host
在里面加入映射,如下所示,在最后加上ip和主机名(这里的映射服务器上暂时没配置,因为我这边没配置静态ip,只能先用DHCP协议联网,方便后面GitLab相关文件的下载,我在安装好GitLab后进行了配置)
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost 127.0.0.1 activate.navicat.com 192.168.8.100 gitlab-server
在服务器上执行
ifconfig
命令,没有的话需要在服务器上安装ifconfig先执行
yum search ifconfig
然后执行yum install -y net-tools.x86_64
,就能安装成功成功后执行ifconfig,就可以看到ip地址变成了我们设置的ip地址
在服务器上安装GitLab
由于没有使用视频中提供的资源,所以我是自己在服务器上下载gitlab,安装过程如下
我的这个系统已经有了ssh、postfix和防火墙,所以直接执行下面内容
sudo yum install curl policycoreutils openssh-server openssh-clients
-
启动ssh服务
sudo systemctl enable sshd sudo systemctl start sshd
-
添加http服务到firewalld(–permanent表示永久生效)
sudo firewall-cmd --permanent --add-service=http
-
重启防火墙
sudo systemctl reload firewalld
-
启动postfix
sudo systemctl start postfix systemctl enable postfix.service//设为开机启动
-
新建 /etc/yum.repos.d/gitlab-ce.repo
命令:
cd / cd etc cd yum.repos.d vi gitlab-ce.repo
内容为(配置清华镜像) 按
i
键开始编辑[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1
然后按
esc
输入:wq
然后执行
sudo yum makecache sudo yum install gitlab-ce
初始化GitLab服务
执行命令
gitlab-ctl reconfigure
初始化GitLab服务启动GitLab服务
执行命令
gitlab-ctl start
启动GitLab服务如需停止服务,执行命令
gitlab-ctl stop
使用浏览器访问gitlab-server或者http://192.168.8.100,就可以进入GitLab页面登录,修改密码后登录
gitlab修改管理员账户密码
- 先进入到gitlab的bin目录
cd /opt/gitlab/bin
- 打开控制台
gitlab-rails console
- 获取管理员账户
user=User.where(id:1).first
- 修改密码
user.password="xxx"//这边是设置密码
- 保存用户
user.save!
- 退出
quit
- 然后就可以在网页中用刚才修改的密码登录管理员账户了,管理员账户用户名是root
- 先进入到gitlab的bin目录
IDEA集成GitLab
-
可以在IDEA的Settings Plugins搜索gitlab,然后安装GitLab插件
-
点击File——Settings——Version Control——GitLab,选择Add New GitLab Server
-
输入GitLab服务器地址
https://gitlab-server/
选择HTTPS协议,然后点击OK -
打开浏览器创建一个GitLab远程库,点击Clone,复制远程库链接,修改链接中的gitlab.example.com为自己的地址,我的是gitlab-server,也可以是192.168.8.100
-
剩下的Git的的操作就和IDEA集成Gitee一样了