Git自学笔记

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在管理项目时,文件流转的三个工作区域是:工作区域->暂存区域->对象区域。因此,基本的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 '注释'
第一次不能使用,以后可以使用

删除文件

  1. git 删除

    git rm xxx

    干了两件事情,将本地文件删除,操作命令–》暂存区

    删除之后文件被放到暂存区,要想彻底删除好需要再提交一次

    git commit -m "彻底删除"
    
    • 后悔删除

      1. 暂存区恢复到工作区

        git reset HEAD hello.txt 
        
      2. 删除动作还原

        git checkout -- hello.txt
        
  2. 操作系统删除

    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的时候就不需要再次输入用户名和密码,配置的方式分为三种,分别是:

  1. git config --global(基本不用)给整个计算机一次性设置

git config –global user.name “mumulx”
git config –global user.email “2606964863@qq.com”

  1. git config --system(推荐)给当前用户一次性设置

    cd ~ 切换到当前用户得系统文件夹
    cat .gitconfig 查看给当前用户设置的用户名和密码
    
    git config --system user.name 'mumulx'
    git config --system user.email '1819778796@qq.com'
    
  2. 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 删除配置
    
  3. 删除配置

    git config --local --unset user.name
    git config --local --unset user.email 删除配置
    

他们的优先级是3>2>1,也就是说会采用就近的原则进行设置,而且当修改了配置文件时只对修改之后的提交有效。修改之前的提交仍然使用的是之前的配置(用户名、邮箱)

本地配置的邮箱与用户名并没有实际的意义,可以与远程仓库的用户名邮箱不一样,知识标识一下代码时谁写的。

commit的随机数

查看提交日志会发现commit后面又一串字符

commit eb125a18e9b9d7ffeb2e30236ce5fbe6d6d110ce 

eb125a18e9b9d7ffeb2e30236ce5fbe6d6d110ce:sha1计算的结果
sha1 、md5 加密算法 、随机数 ,用于区分 是哪一次的提交(并且不重复,理论上会重复,但是几率太小因此认为不会重复)

忽略文件

  1. 创建忽略文件:.gitignore

    touch .gitignore

  2. 编辑忽略文件

通配符 :

*       任意字符

    *.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

细节:

  1. 如果在分支A中进行了写操作,但此操作局限在工作区中进行(没add commit)。在master中能够看到该操作。 如果分支A中进行了写操作 进行了commit(对象区),则master中无法观察到此文件

  2. 如果在分支A中进行了写操作,但此操作局限在工作区中进行(没add commit)。删除分支A 是可以成功的。

分支:一个commit链,一条工作记录线

分支名(master) :指向当前的提交(commit)

HEAD:指向当前分支(HEAD->分支名)

如果一个分支靠前(dev),另一个落后(master)。则如果不冲突, master可以通过 merge 直接追赶上dev,称为 fast forward。

fast forward本质就是 分支指针的移动.注意:跳过的中间commit,仍然会保存。

fast forward:

  1. 两个分支 fast forward 归于一点commit
  2. 没有分支信息(丢失分支信息)

git在merge 时,默认使用fast fast forward ;也可以禁止 :

git merge --no-ff
  1. 两个分支 fast forward ,不会归于一点commit (主动合并的分支 会前进一步)
  2. 分支信息完整(不丢失分支信息)

合并: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值

版本穿梭(游离状态)

  1. 修改后、必须提交
  2. 创建分支的好时机

    git branch mybranch 2735603  创建分支
    
    git chekcout master;切换分支
    

分支重命名:

git branch -m master master2

stash:保存现场

  1. 建议(规范) :在功能未没有开发完毕前,不要commit

  2. 规定(必须) : 在没有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

远程->本地

  1. pull :远程->追踪

    git pull 将远程分支拉到本地的追踪分支
    
  2. 追踪->本地

    方法一:

    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

objectsrefs目录中记录了很多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

  1. 进入A/B中pull

    cd B/
    git pull
    

    将B库更新到远程

    cd ..
    git add .
    git commit -m "xx"
    git push
    
  2. 直接在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

  1. 工作区

    rm -rf B
    rm -rf .gitmoudles
    
  2. 暂存区

    git rm --cached B
    
  3. 对象区

    将删除后的

    git add .
    git commit -m ""
    
  4. 远程

    git push

建议:submodule 单向操作

substree:双向、简单

substree

加入子模块

git subtree

查看指令帮助

  1. 给子模块起别名

    git remote add subtree-origin 子模块ssh地址
    
  2. 本地仓库引入子模块

    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之后:

    1. 会产生新的提交(很容易冲突)
    2. 往前走两步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

核心流程:

子->父中子 有反应

  1. 修改子工程 push

  2. 将github中的子工程更新到 父中子模块(本地)

    git subtree pull -P subtree subtree-origin master
    
  3. 父中子模块 的更新情况 推送到 对应的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也会冲突:

  1. 解决冲突

    vi ... 
    add .    告知程序已解决
    git rebase --continue   继续trbase
    
  2. 忽略冲突(放弃rebase所在分支的修改,直接使用其他分支)

    git rebase --skip
    
  3. 终止,还原成rebase之前的场景

    git rebase --abort
    

建议:

  • reabase分支 只在本机操作,不要推送github

  • 不要在master上直接rebase

rebase到的分支的头节点不会前进,因此可以merge两个分支–fast-forward

IDEA使用gradle整合gretty进行web开发

git - gradle

jar :maven

gradle ->Maven

下载、解压缩

gradle官网

下载地址

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

gretty教程

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
  1. 启动

    gradle appRunDebug/gradle appStartDebug
    
  2. 监听服务

    配置run-- Configuration - Remote  
    
    name随便取
    host:localhost
    port:8887
    

    启动调试,idea的debug按钮

  3. 访问

    访问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