Git简介
git lab指令
启动
gitlab-ctl start
关闭
gitlab-ctl stop
关闭防火墙
systemctl stop firewalld
开启防火墙
systemctl start firewalld
Git指令
git init 项目初始化
git status 查看当前状态
git log 查看日志
git log -2 查看最近两次的提交
git log --pretty=oneline 一行
git log --pretty=format:"%h - %an ,%ar : %s" 指定格式 shal值前面的一部分- 作者 ,什么时候提交:提交注释
git add .
git commit -m "xx"
git push
git add remote origin xxx
git push origin master
git config 查看帮助指令
Git是一个分布式版本控制系统。版本控制系统又分为:集群式版本控制系统(常见的有cvs、svn)、分布式版本控制系统(常见的有Git)。Git的官网是 Git,Git起源于Linus系统,因为BitMover公司不再向Linux社区提供BitKeeper软件免费的软件授权,因此有一些Linux大神创建了Git分布式版本控制系统,并且上传了Linux系统的源码。Git是以全量的方式管理版本即每一个版本都包含全部的文件,可以时刻保持数据的完整性。
git优势:
- 本地版本控制
- 重写提交说明
- 可以“后悔”
- 分支系统
svn:增量
git:全量(每一个版本都包含全部的文件,时刻保持数据的完整性)
Git内部具有三种状态:
- 已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。
- 已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。
- 已提交(committed):表示数据文件已经顺利提交到Git数据库中。
三个区
Git在管理项目时,文件流转的三个工作区域是:工作区域->暂存区域->对象区域。因此,基本的Git工作流程如下:在本地的工作目录对文件进行写操作;然后对修改后的文件进行add(处于 modified 状态),保存到暂存区域(处于 stage 状态);最后提交更新(处于 commited 状态),将保存在暂存区域中的文件版本永久转存到Git的本地仓库中。关于Git的安装和环境的配置,这里就不多说了,本篇主要是记录,自学过程中的知识点。
- 工作区
- 暂存区
- 对象区
工作区–>暂存区
git add . 将当前目录的所有文件都进行提交
gir add xxx 指提交指定的文件
暂存区->工作区
git rm --cached xxx
git teset head xxx
暂存区–>对象区
git commit -m "xxx" xxx为本次提交的注解
对象区–>服务器
git push
对象区–>工作区
文件的内容被修改
撤销修改
如果某个文件已提交,并且对其进行了修改。可以放弃修改(还原到已提交的状态)
git checkout -- xxx 放弃工作区中的修改
合并add 和commit:
git commit -am '注释'
第一次不能使用,以后可以使用
删除文件
git 删除
git rm xxx
干了两件事情,将本地文件删除,操作命令–》暂存区
删除之后文件被放到暂存区,要想彻底删除好需要再提交一次
git commit -m "彻底删除"
后悔删除
暂存区恢复到工作区
git reset HEAD hello.txt
删除动作还原
git checkout -- hello.txt
操作系统删除
rm xxx
删除本地文件
操作状态在工作区
重命名文件
重命名文件涉及了两个文件,将原文件删除,创建新文件
git指令
git mv aa.txt bb.txt
在暂存区中
操作系统指令
mv aa.txt bb.txt
在工作区中
注意:操作之后调用git status
查看状态的提示
注释重写
注释重写(重写提交说明)
git commit --amend -m '修正'
将上一次的提交注释进行重写
Git的安装
网上关于Git的安装有很多的教程,这里就不详细记录了,基本就是一路下一步就可以了。
Git的使用
Git官网新建仓库
加号–>new repository–>填写仓库名,描述–>create
Git项目初始化
git init
在本地新建一个文件夹,鼠标右键选择 Git Bash Here
输入指令git init
这样的话就将该文件夹纳入到了Git的管理。在本地文件夹会出现一个隐藏的目录.git目录,它是一个版本控制的目录。
设置邮箱、用户名
当我们每次使用git push
来将文件推到远程仓库的的时候,会发现每次都需要输入用户名和密码,为了解决它,可以给项目配置用户名,邮箱,这样每次push的时候就不需要再次输入用户名和密码,配置的方式分为三种,分别是:
git config --global
(基本不用)给整个计算机一次性设置
git config –global user.name “mumulx”
git config –global user.email “2606964863@qq.com”
git config --system
(推荐)给当前用户一次性设置cd ~ 切换到当前用户得系统文件夹 cat .gitconfig 查看给当前用户设置的用户名和密码 git config --system user.name 'mumulx' git config --system user.email '1819778796@qq.com'
git config --local
给当前项目一次性设置cd .git/ cat config 查看项目得配置文件 git config --local user.name 'mumulx' git config --local user.email '1819778796@qq.com' git config --local --unset user.name git config --local --unset user.email 删除配置
删除配置
git config --local --unset user.name git config --local --unset user.email 删除配置
他们的优先级是3>2>1,也就是说会采用就近的原则进行设置,而且当修改了配置文件时只对修改之后的提交有效。修改之前的提交仍然使用的是之前的配置(用户名、邮箱)
本地配置的邮箱与用户名并没有实际的意义,可以与远程仓库的用户名邮箱不一样,知识标识一下代码时谁写的。
commit的随机数
查看提交日志会发现commit后面又一串字符
commit eb125a18e9b9d7ffeb2e30236ce5fbe6d6d110ce
eb125a18e9b9d7ffeb2e30236ce5fbe6d6d110ce
:sha1计算的结果
sha1 、md5 加密算法 、随机数 ,用于区分 是哪一次的提交(并且不重复,理论上会重复,但是几率太小因此认为不会重复)
忽略文件
创建忽略文件:.gitignore
touch .gitignore
编辑忽略文件
通配符 :
* 任意字符
*.properties
!b.properties 除了
dir/:忽略dir目录中的所有文件
dir/*.txt
dir/*/*.txt :能够忽略 dir/abc/a.txt,dir/xyz/a.txt ,不能 dir/xyz/123/a.txt
dir/**/*.txt :任意级别目录
空目录:默认就是忽略的
分支
查看分支 git branch
git branch -a
git branch -av
创建分支 git branch 分支名
切换分支 git checkout 分支名
删除分支 git branch -d 分支名 (不能删除当前分支)
其他不能删除的情况: 包含 “未合并”的内容,删除分支之前 建议先合并
强行删除 git branch -D 分支名
创建新分支 并切换 :git checkout -b 分支名
git checkout -b new_branch
合并分支 git merge 分支名
git merge new_branch
分支最近一次提交的shal值
git branch -v
细节:
如果在分支A中进行了写操作,但此操作局限在工作区中进行(没add commit)。在master中能够看到该操作。 如果分支A中进行了写操作 进行了commit(对象区),则master中无法观察到此文件
如果在分支A中进行了写操作,但此操作局限在工作区中进行(没add commit)。删除分支A 是可以成功的。
分支:一个commit链,一条工作记录线
分支名(master) :指向当前的提交(commit)
HEAD:指向当前分支(HEAD->分支名)
如果一个分支靠前(dev),另一个落后(master)。则如果不冲突, master可以通过 merge 直接追赶上dev,称为 fast forward。
fast forward本质就是 分支指针的移动.注意:跳过的中间commit,仍然会保存。
fast forward:
- 两个分支 fast forward 归于一点commit
- 没有分支信息(丢失分支信息)
git在merge 时,默认使用fast fast forward ;也可以禁止 :
git merge --no-ff
- 两个分支 fast forward ,不会归于一点commit (主动合并的分支 会前进一步)
- 分支信息完整(不丢失分支信息)
合并:merge more采用ff.
合并:如果冲突 ,需要解决冲突。
解决冲突:
git add xxxx
git commit -m "xx"
git add xxxx(告知git,冲突已解决)
注意:master在merge时 如果遇到冲突 并解决,则解决冲突 会进行2次提交: 1次是最终提交,1次是将对方dev的提交信息commit也拿来了
如果一方落后,另一方前进。则落后放可以直接通过merge合并到前进方,不会冲突。
当两个分支处在同一个位置时,尝试合并分支会冲突。
查看日志方法
git log --graph
git log --graph --pretty=oneline --abbrev-commit
合并add 和commit:
git commit -am '注释'
版本穿梭:
在多个commit之间 进行穿梭。 回退、前进
回退到上二次commit: git reset --hard HEAD^^
回退到上n次commit: git reset --hard HEAD~n
跳转到任意一次commit: git reset --hard sha1值的前几位
通过sha1值 直接回退 ,需要结合git reflog使用。
git reflog:查看记录,记录所有操作。可以帮助我们 实现“后悔”操作。需要借助于 良好的 注释习惯
checkout的放弃与游离操作
checkout:放弃修改。放弃的是 工作区中的修改。 相对于暂存区或对象区
reset: 将之前增加到暂存区中的内容 回退到工作区
checkout:
git checkout shal值
版本穿梭(游离状态)
- 修改后、必须提交
创建分支的好时机
git branch mybranch 2735603 创建分支 git chekcout master;切换分支
分支重命名:
git branch -m master master2
stash:保存现场
建议(规范) :在功能未没有开发完毕前,不要commit
规定(必须) : 在没有commit之前,不能chekcout切换分支 (不在同一个commit阶段)
如果还没有将某一个功能开发完毕 就要切换分支:建议
1. 保存现场(临时保存,stash)
2. 切换
保存现场:
git stash 名字随机产生
git stash save "mystash" 自定义名字
查看现场:
git stash list
还原现场(默认还原最近一次):
git stash pop (将原来保存的删除, 用于还原内容)
git stash apply (还原内容,不删除原保存的内容)
git stash apply stash@{1} 指定某一次现场
保存的现场以栈的顺序存储,先进后出
手工删除现场:
git stash drop stash@{0}
(了解即可) 如果不同的分支 在同一个commit阶段在,在commit之前,可以chekcout切换分支;操作的文件的记录是一致的
当保存现场后忘记还原现场,而对文件进行了修改并am了可能会造成冲突,解决冲突的方法与上面一致
Tag标签 :适用于整个项目,和具体的分支没关系
创建标签(在commit之后)
git tag v1.0
git tag -a xxx -m "xxxx"
查看标签
git tag
git tag -l 'v1.0' 指定查询
git tag -l 'v*' 模糊查询
删除标签
git tag -d 标签名
blame:责任
git blame a.txt 查看a.txt的所有提交commit sha1值,以及每一行的作者
差异性diff
linux 命令
diff a.txt b.txt 粗略信息,只显示哪些不一样的
diff -u a.txt b.txt 详细信息
@@ -4,4 +4,6 @@ 4:从第4行开始,6 比较6行
-:原文件
+:对比的文件
无符号表示一样
diff:比较的是文件本身,源文件-那几行再+那几行就是b文件了
git 比较差异
暂存区 和工作区的差异
git diff
git diff :比较的区中的文件
git diff :暂存区 和工作区的差异
工作区 和 某个对象区的差异
git diff commit的sha1值: 对象区和 工作区的差异 git diff head:最新 对象区和 工作区的差异
对象区和 暂存区的差异
git diff --cached commit的sha1值 : 对象区和 暂存区的差异 git diff --cached HEAD : 最新对象区和 暂存区的差异
push
push:本地->github
pull:github->本地 , pull = fetch + merge
rm -rf * :当前目录中的文件、子文件目录全部删除(不会删除隐藏文件、不过回收站)
.....rm ..... -rf / ......:不要执行,删除整个计算机中的全部文件
github的仓库中,默认的说明文档README.md
推送:
git remote add origin https://github.com:mumulx/xiaochengxu.git
标识,将origin标识为 https://github.com:mumulx/xiaochengxu.git
,使用关键字origin代表后面的一串
(ssh)git remote add origin git@github.com:mumulx/xiaochengxu.git
标识,将origin标识为 git@github.com:mumulx/xiaochengxu.git
(master)
git push -u origin master
推送到master分支中 后续修改推送时 只需要
git push
ssh配置:
本地 私钥 ,远程github存放公钥
ssh-keygen 生成:私钥(本机) 公钥(github)
一路回车,生成的文件在当前用户的文件夹/.ssh文件夹中
id_rsa 私钥
id_rsa_pub 公钥
可以将公钥 存放在github中的两个地方:
- 项目的setting中,只要当前项目可以和 本机 免秘钥登录
- 账号的settings中, 账户的所有项目 都可以和本机免秘钥
将公钥中的内容粘贴到github中
注意:远程增加ssh的公钥时
1. 删除回车符
2. 可写权限
git remote show origin
显示远程仓库的信息
分支
dev:开发分支,频繁改变
test:基本开发完毕后,交给测试实施人员的分支
master:生产阶段,,很少变化
bugfix:临时修复bug分支
dev -> test (merge dev) -> master (merge test ) -> ….
git remote show 查看当前的服务器列表
git remote show origin 查看具体的服务器信息
git会在本地维护 origin/master
分支,通过该分支 感知远程github的内容
origin/master
一般建议 不要修改,是一个只读分支
远程到本地
git clone git@github.com:mumulx/xiaochengxu.git 会将项目名也下载下载,项目名就是文件夹名
git clone git@github.com:mumulx/ mytest1 指定文件夹名
clone项目时将版本库也下载下来了,操作和原先的一摸一样
pull/push:推送,改变指针
Fast-forward :更新, 如果发现 更新的内容 比自己先一步(commit 的sh1值 在自己之前),则 会自动合并
冲突:
根据提示发现有
fetch first
git pull
着两个字段,而
pull = fetch + merge
有冲突:
解决冲突
pull =fetch + merge merge: vi 解决冲突 -> git add . ->commit
总结:
pull -> vi -> add -> commit ->push
pull =fetch + merge
git pull
git fetch 将远程文件拉到本地
git merge 合并和origin/master分支合并
冲突的原因时merge
图形化工具
git gui : gitk 、gui 、github desktop
gitk
命令行输入
gitk
gui
右键选择
git gui here
命令行
git gui
日志
本地日志
git log 查看本地日志
查看github分支的日志:
git log origin/master
git log remotes/origin/master
git log refs/remotes/origin/master
分支:就是一个指針,commit的sha1值
分支:
git branch -av 查看本地分支和本地的远程分支
分支分为: * 本地分支 * 远程分支 * 追踪分支(本地的远程分支)
本地分支->远程:
方法一:(本地在dev分支中)
git push -u origin dev
方法二:(在本地的test分支中)
git push --set-upstream origin test
远程->本地
pull :远程->追踪
git pull 将远程分支拉到本地的追踪分支
追踪->本地
方法一:
git checkout -b dev origin/dev 创建一个dev分支,并切换到dev分支,dev分支和origin/dev关联起来
方法二:
git checkout -b test --track origin/test git checkout --track origin/aaa
删除分支
删除本地分支
git branch -d 分支名
推送分支语法
git push origin src:dest
将本地的src分支推送到远端的dest分支
git push origin dev:dev2
git push origin HEAD:dev2
head:当前分支
删除远端分支
git push origin :test
git push origin --delete dev
git pull origin ccc2:ccc3
相当于 git pull
+ : git checkout -b dev origin/分支名
本地没有a分支,但本地却感知远端的a分支。需要将a分支删除掉
检测那些分支时不需要的:
git remote prune origin --dry-run
清理无效的 追踪分支(本地中感知的远程分支)
git remote prune origin
将远端分支 拉去到本地某个新分支 :
git fetch origin master:refs/remotes/orogin/helloworld
将远端的master分支拉到本地的helloworld追踪分支
给命令起别名:
git config --global alias.ch checkout
使用ch
将相当于使用了checkout
指令
标签
查看本机标签
git tag
创建本机标签
git tag v1.0 简单标签,只存储当前的commit的sha1值
git tag -a v2.0 -m "我的v.2.0版本" (创建一个新对象,会产生一个新的commit/sha1)存储信息,其中包含了当前的commit的sha1值
推送标签
git push origin v1.0 v2.0 推送指定的标签
git push origin --tags 推送本地所有标签
git push origin v1.0
完整
git push origin refs/tags/v1.0:refs/tags/v1.0
获取远程标签
git pull
如果远端新增标签,则pull 可以将新增的标签拉去到本地;如果远程是删除标签,则pull无法感知
git fetch orgin tag v4.0
删除远程标签
git push origin :refs/tags/v1.0
注意:如果将远程标签删除,其他用户无法直接感知,需要用户自己手工删除
git gc :压缩
git gc
objects
、refs
目录中记录了很多commit的sha1值,如果执行gc 则会将这么多sha1值 存放到一个 压缩文件中packed-refs
refs :标签、head、remote
objects:对象 ,git 每一次version的全量内容
git裸库
创建裸库
git init --bare
没有工作区的 工作仓库 ,存在于服务端.不能add
submodule :子模块
应用场景 :在一个仓库中 引用另一个仓库的代码。
在github上如果新建项目,并且ssh连接 则必须配置ssh,如果给项目单独配置ssh则,一个密钥只能对应一个项目
第一次:指定仓库地址、分支
git remote add origin xxx
git push -u origin master
本地A仓库引用B仓库
git submodule add B仓库ssh地址
推到远程仓库
git add .
git commit -m "xx"
git push
A中有B库,但B push之后 A无法直接感知 ,需要主动操作:pull
进入A/B中pull
cd B/ git pull
将B库更新到远程
cd .. git add . git commit -m "xx" git push
直接在A中 迭代pull(将A中的所有submodule全部pull):
git submodule foreach git pull
更新远程的submodule
git add . git commit -m "x" git push
注意:本地仓库直接使用
git pull
不会更新模块中的内容
如果clone的项目包含submodule,则clone方法
git clone sshxxxx --recursive
删除submodule
工作区
rm -rf B rm -rf .gitmoudles
暂存区
git rm --cached B
对象区
将删除后的
git add . git commit -m ""
远程
git push
建议:submodule 单向操作
substree:双向、简单
substree
加入子模块
git subtree
查看指令帮助
给子模块起别名
git remote add subtree-origin 子模块ssh地址
本地仓库引入子模块
git subtree add -P 本地项目名 模块地址 模块分支 git subtree add -P subtree subtree-origin master
等价
git subtree add --prefix subtree subtree-origin master
另一种方式
git subtree add -P subtree2 subtree-origin master --squash
–squash:合并commit,为了防止 子工程干扰父工程
squash:减少commit的次数,会将提交封装起来
加了squash之后:
- 会产生新的提交(很容易冲突)
- 往前走两步commit
–结论: 在做subtree
如果加squash,以后每次都加 (git subtree开头的命令,要么都加 要么都不加)
如果不加,都不要加
-如果是同一个祖先,则可能不会冲突
-如果不是同一个祖先,很可能冲突
在subtree submodule容易冲突(有2个跟解决) -> vi add commit push
- 会产生新的提交(很容易冲突)
推送远程
git push
本地更新子模块
git 子模块文件夹名 pull -P subtree 子模块ssh地址 分支名
git suntree pull subtree subtree-origin master
本地更新远程模块
git push
核心流程:
子->父中子 有反应
修改子工程 push
将github中的子工程更新到 父中子模块(本地)
git subtree pull -P subtree subtree-origin master
父中子模块 的更新情况 推送到 对应的github上(父-子)
修改 父工程中子模块->子模块
如何将 本地修改的内容(父-子) 推送到 远程中真实的子模块中:
cd 子模块
进行修改
git add .
git commit -m "xx"
git push 更新父工程远程的子模块文件
cd .. 进入父工程
git 本地模块文件夹名 push -P subtree subtree-origin master 更新对应子模块远程仓库
git subtree push -P subtree subtree-origin master
冲突
冲突:修改同一文件的同一行、不是同一祖先、不规范
cherry-pick
如果写了一半(已经提交),发现写错分支,需要将已提交的commit转移 分支
每次只能转移(复制)一个commit ,内容会被复制,但是sha1会变
在想要转移到的分支中
git cherry-pick shal值
在转移的分支中删除提交
git checkout shal值
git branch -D dev 删除分支
git checkout -b dev 创建分支
思路: cherry-pick 复制到应该编写的分支上;
把写错分支删除(checkout 旧节点,删除分支);
新建分支
cherry-pick 在复制的时候,不要跨commit节点复制
rebase:变基(衍合)
改变分支的根基
git rebase 转移的分支名
rebase会改变提交历史
rebase之后的提交线路 是一条直线
shal值会改变
编写代码的地方
如果B转到A ;
cherry-pick:在A中操作
rebase:在B中操作
rebase也会冲突:
解决冲突
vi ... add . 告知程序已解决 git rebase --continue 继续trbase
忽略冲突(放弃rebase所在分支的修改,直接使用其他分支)
git rebase --skip
终止,还原成rebase之前的场景
git rebase --abort
建议:
reabase分支 只在本机操作,不要推送github
不要在master上直接rebase
rebase到的分支的头节点不会前进,因此可以merge两个分支–fast-forward
IDEA使用gradle整合gretty进行web开发
git - gradle
jar :maven
gradle ->Maven
下载、解压缩
gradle ->maven
gradle实际是在maven仓库中获取 jar,因此引用jar包时去maven中搜索
build.gradle—pom.xml
配置
配置jdk
cmd开发
GRADLE_HOME:gradle安装目录
GRADLE_USER_HOME 本地仓库(本地存放JAR的目录)
PATH:%GRADLE_HOME%\bin
idea开发 (本地仓库)额外
idea:settings-gradle :Service directory path
idea新建gradle项目
File-->new->Gradle 勾选web->设置坐标-->勾选Use auto-import自动导入
下载的jar包在resp/caches/modules-2/files-2.1中
build.gradle配置
apply plugin : 'java'
apply plugin : 'war'
apply plugin : 'idea'
apply plugin : 'maven'
apply plugin : 'org.akhikhl.gretty'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:2.0.0'
}
}
repositories {
mavenCentral()
}
//私服
//dependencies{
//repositories {
// maven{
// url:xxx
// }
//}
//}
if (!project.plugins.findPlugin(org.akhikhl.gretty.GrettyPlugin))
project.apply(plugin: org.akhikhl.gretty.GrettyPlugin)
gretty {
httpPort=8080
contextPath = '/MyGradlePro'
host="localhost"
httpEnabled = true
servletContainer = "tomcat8"
scanInterval = 1
fastReload = true
loggingLevel = "DEBUG"
consoleLogEnabled = true
debugPort = 8887
debugSuspend = true
}
//sourceSets {
// main{
// java{
// srcDir 'src/main/nn'
// }
// resources{
// srcDir 'src/main/yy'
// }
//
// }
//}
//plugins {
// id 'java'
// id 'war'
//}
group 'com.mumu.gradle'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.6'
}
tasks.withType(JavaCompile){
options.encoding = "UTF-8"
}
[compileJava,javadoc,compileTestJava]*.options*.encoding = "UTF-8"
IDEA右侧有Gradle的工具箱
web服务器
gradle或maven中 可以通过编码配置 产生web服务器环境
gradle:gretty
gretty -》tomcat
apply plugin: 'war'
apply plugin : 'org.akhikhl.gretty'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:2.0.0'
}
}
repositories {
mavenCentral()
}
if (!project.plugins.findPlugin(org.akhikhl.gretty.GrettyPlugin))
project.apply(plugin: org.akhikhl.gretty.GrettyPlugin)
gretty {
httpPort=8080
contextPath = '/MyGradlePro'
host="localhost"
httpEnabled = true
servletContainer = "tomcat8"
scanInterval = 1
fastReload = true
loggingLevel = "DEBUG"
consoleLogEnabled = true
debugPort = 8887
debugSuspend = true
}
编码
//编码
tasks.withType(JavaCompile){
options.encoding = "UTF-8"
}
[compileJava,javadoc,compileTestJava]*.options*.encoding = "UTF-8"
执行
加前缀gradle xxx
appRun 运行
appRunDebug 调试
--结束: 按任意键
appStart
appStartDebug
--结束:appStop
idea右侧gradle子目录gretty有诸多命令
运行:
gradle appRun 、gradle appStart -》直接访问
调试: 1. 配置
debugPort = 8888 (5005)
debugSuspend = true
启动
gradle appRunDebug/gradle appStartDebug
监听服务
配置run-- Configuration - Remote name随便取 host:localhost port:8887
启动调试,idea的debug按钮
访问
访问8080
新建servlet
右键– new–Create new Servlet
自动生成的文件
@WebServlet(name = "MyServlet")
改成
@WebServlet(urlPatterns = "/MyServlet")
web.xml注意
metadata-complete="false">,应为false
源码
package org.mumu.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/MyServlet")
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("do post");
int a =10;
int b=9;
a=a+b;
System.out.println(a);
System.out.println(b);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
在idea中使用git托管项目(版本控制)
将idea中默认的cmd更换 bash.exe 重启
file-->setting-->Terminal-->设置Shell path路径为git安装目录/bin/bash.exe
创建忽略文件
.gitignore
build
out
.gradle
.idea
初始化
git init
git add .
git commit -m "xxxx"
git remote add origin xxxx
git push origin master
本地更新idea
git pull
clone项目到本地
file –> new–>Project from Version Control –>Git
复制远程的地址
构建项目 (gradle项目)
gradle build
菜单栏VCS中也有Git的操作指令,快捷键
右键文件也有Git的快捷键
右键项目也有
解决冲突图形化界面
右键–>git–>resolve Conficts….
GitLab
下载 gitlab-ce-12.7.2-ce.0.el7.x86_64.rpm
gitlab ee(收费)
gitlab ce
yum install -y curl policycoreutils-python openssh-server
systemctl enable sshd
systemctl start sshd
systemctl start firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
yum install postfix
systemctl enable postfix
systemctl start postfix
EXTERNAL_URL="https://192.168.2.150"
将下载的文件传到linux中
rpm -ivh gitlab-ce-12.7.2-ce.0.el7.x86_64.rpm
gitlab-ctl reconfigure
等待时间较长,会一致出现action run,不用理它,耐心等待
启动
gitlab-ctl start
关闭
gitlab-ctl stop
访问
可以先关闭防火墙
systemctl stop firewalld
访问
centos7init
192.168.2.150
用户名
root
设置密码
rootroot
登录
创建组,创建项目
之前EXTERNAL_URL="https://192.168.2.150"
忘记设置
补救
eclipse 推送git
首选项 team–>git—configuration 配置邮箱和目录 General—-NetWorkConnection–>ssh2
第一次发布
右键Team--->share 设置本地存储仓库
右键-->Team->add to index 加入暂存区
右键-->Team-->commit 提交到本地分支
右键 -->team-->remote-->push 选择项目 填写账号邮箱 密码 -->next-->master-->add Sp 将项目推送到远程分支
提交
右键-->Team->add to index 加入暂存区
右键-->Team-->commit 提交到本地分支
右键-->Team-->push 提交到远程仓库
commit时
commit and push或commit的区别
commit按钮:不能单独的Push某一个文件,只能Push整个项目
commit and push可以单独Push某一个文件
第一次下载:
import--->git fro-->clone url
更新
指定文件–>右键–>Team–》repository–>pull
git冲突的解决:
发现冲突
1.进入同步视图右键—-team - –synchronized…I 红色:冲突
2。
添加到本地暂存区 add to index 提交到本地分支 commit 更新服务端的分支内容到本地分支 pull
修改冲突:直接修改或者merge tool(修改代码) (—>已经变为了普通本地文件) –将服务端文件进行更新
add to index
commit push
git多个人团队协作开发
github中 该项目-settings–collaborators 增加合作者:
发送邀请链接
合作伙伴:打开该链接、 接受邀请、clone项目、修改、add \commit\push