-
git 如何忽略已经提交的文件或文件夹 (.gitignore文件无效)
使用idea提交代码的时候可能会遇到想要忽略的文件夹出现在提交列表中的情况。以.idea目录举例。假如之前没将.idea目录添加到.gitignore文件中,提交代码的时候又把.idea目录提交上去了,那后面再在.gitignore文件中添加.idea目录是不会让提交列表中的.idea目录消失的,这个时候我们就需要使用命令删除暂存区中的.idea目录。gitrm--cached<file>:这个命令会直接从暂存区删除文件,工作区则不做出改变。"gitrm--cached"命令比"gitresethead"更好,前者是删除掉,后者是替换掉。gitrm-r--cached<file>可以删除文件和文件夹gitrm-r--cached文件或文件夹路径例如gitrm-r--cached.idea/执行之后git将会把.idea目录下已提交的文件忽略
LoveIT 2022-01-22Git -
Git 撤销已经push到远端的代码
其实是没有直接让远端代码回复到某次的指令,实现撤销push的思路如下:1.先让代码恢复到想要恢复的前一次提交记录2.重新提交代码,覆盖端上的代码,就相当于撤销了push的提交实现方式如下:1.首先使用gitlog找到要回退版本的commit版本号;2.gitreset--hard<版本号>,撤回到需要的版本;注意在执行命令之前先把当前工作拷贝一份,不然--hard会将修改全部丢失3.使用gitpush--force覆盖之前的提交
LoveIT 2021-11-15Git -
基于maven-archetype自定义项目脚手架
开发中,我们通常会使用maven内置的脚手架也就是archetype来快速生成项目结构。但是在开发中,你会发现maven预先提供的archetyp远远不够,每次新建一个项目,我们都需要从现有的项目copypom.xml,spring的配置文件,一些公共的工具类等,对于多module项目,我们还需要去创建各个module。在这样的背景下,我们就需要使用maven的archetype去定义一个自己想要的代码脚手架以供更快的生成新的项目骨架,可以进行后续开发。简单来说mavenarchetype插件就是创建项目的脚手架,你可以通过命令行或者IDE集成简化项目创建的工作。例如:org.apache.maven.archetypes:maven-archetype-quickstartorg.apache.maven.archetypes:maven-archetype-siteorg.apache.maven.archetypes:maven-archetype-webapp以及spring或者第三方提供了一些archetypeplugin。同时mavenarchetype插件也是一个简单的mavenartifact,它包含了创建项目所需要的所有资源。主要分为几类原型信息:archetype描述文件:src/main/resources/META-INF/maven/archetype.xml,这为archetype1.0,包含所有创建项目的文件信息和路径信息。archetype2.0增加了更灵活的archetype-metadata.xml(src/main/resources/META-INF/maven/,archetype元数据信息,并且完全支持1.0项目的原型文件:位于src/main/resources/archetype-resources/之下,将会被archetype插件复制到项目目录结构去,这一部分是定义脚手架的核心模块。创建项目的pom文件:位于src/main/resources/archetype-resources下,用于给原型文件设置pom依赖archetypepom文件:在archetype项目根目录下,这个是整个archetype的pom文件,和原型文件pom依赖不是一个概念,注意这里不要混淆!一、基于archetype插件创建项目脚手架1.首先在archetype中加入一个pom文件,如下:2.在src/main/resources/META-INF/maven/目录下创建archetype-metadata.xml,例如:3.创建对应的子模块下的pom.xml和java文件,可以使用${artifactId}/${groupId}等变量作为占位符,以core模块为例:pom.xmlDemoService.java整个项目的结构如下:archetype项目写好之后,通过mvncleaninstall命令安装到本地的maven仓库中:这条命令的作用是,将刚才创建的骨架,安装到maven本地的repository目录下。如果在本地安装的Maven没有更改里面的localRepository地址的话,那么本地repository仓库的路径默认就在c:\User\{USER-NAME}\.m2\repository,找到该文件夹,应该能在里面找到以archetype命名的文件夹:接下来,要让maven能够找到该项目并且知道它是个骨架项目。执行命令mvn:archetype:crawl。因为仅安装到本地仓库中,maven还是没有更新所有骨架的列表,所以该命令,能够让maven对本地仓库中所有项目进行一次遍历,并且找到其中可以作为archetype的的项目,将这些信息保存到仓库下的archetype-catalog.xml文件中。由于mvnarchetype:crawl执行命令的图太长,我这里就不贴了。执行完后也能看到如上图中显示的BUILDSUCESS字样。二、基于已有的项目结构生成archetype在项目的根目录下(即项目的pom.xml文件所在目录)下执行maven命令:mvnarchetype:create-from-project等待Maven构建,构建成功之后生成的archetype的信息,默认是在project根目录下的target\generated-sources\archetype目录。执行命令成功之后,打开target\generated-sources\archetype将模块名修改成如下样式(只有一个模块跳过此步骤)并且对应修改archetype-metadata.xml文件中的modules模块,参数名称含义参考第一节然后在archetype的根目录下(\target\generated-sources\archetype)执行mvncleaninstall命令就可以将archetype安装在本地仓库里了,之后任然需要执行mvn:archetype:crawl命令。三、使用archetype构建新项目上面介绍了两种自定义项目archetype的方式,构建成功之后我们也可以有两种方式来使用构建成功的脚手架来建立新项目:3.1使用命令行在空白目录下执行如下命令:具体参数含义:-DarchetypeGroupId:GroupId-DarchetypeArtifactId:ArtifactId-DarchetypeVersion:Version-DgroupId:groupId3.2使用图形化界面创建(1)在IDEA中,新建项目时选择【Maven】,然后再选择Createfromarchetype,选择AddArchetype...(2)在AddArchetype...对话框中添加对应脚手架的GroupId、ArtifactId、Version如果添加发现没有作用,这时候需要去C:/Users/[你的用户名]/AppData/Local/JetBrains/IntelliJIdea2021.2/Maven/Indices目录下,创建一个UserArchetypes.xml文件,内容参考如下:然后重启一波IDEA,新建模块,这时候就会发现原型列表中出现了我们自定义的脚手架:(3)新建项目选择archetype,然后填写新项目的GroupId、ArtifactId、Version(4)等待Maven根据archetype初始化项目
LoveIT 2021-11-14Maven -
Git切换远程仓库地址
1、切换远程仓库地址方式一:修改远程仓库地址【gitremoteset-urloriginURL】更换远程仓库地址,URL为新地址。方式二:先删除远程仓库地址,然后再添加【gitremotermorigin】删除现有远程仓库【gitremoteaddoriginurl】添加新远程仓库2、【gitremote-v】查看远程仓库的地址参考【1】涵一.git切换远程仓库地址.CSDN
LoveIT 2020-12-19Git -
Maven入门必会必知
1、Maven是啥?Maven是Apache软件基金会唯一维护的一款自动化构建工具,专注于服务Java平台的项目构建和依赖管理。Maven是基于项目对象模型(POM)可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。2、Maven可以干啥?添加第三方jar包jar包之间的依赖关系:Maven可以替我们自动的将当前jar包所依赖的其他所有jar包全部导入进来获取第三方jar包:Maven提供了一个完全统一规范的jar包管理体系,只需要在项目中以坐标的方式依赖一个jar包,Maven就会自动从中央仓库进行下载到本地仓库将项目拆分成多个工程模块构建项目(打包,编译等)3、Maven下载、安装以及配置阿里云Maven仓库(1)下载Maven打开浏览器,在地址栏输入:http://maven.apache.org/download.cgi进入Maven官网,按照如下图所示将Maven下载到本地,无需解压:下载好以后解压即可(记得先装配好正确的JDK哦~)。解压目录如下(2)配置环境变量a、在系统变量内添加环境变量M2_HOME(或者MAVEN_HOME),值为解压后的目录b、在系统变量path中添加%M2_HOME%\binc、win+R,运行cmd命令行mvn-v检查是否安装成功,即如下图表示成功(3)配置本地仓库配置本地仓库maven会从中央仓库下下载所需要的jar包到本地仓库,我们可以修改存放的位置,打开${maven安装目录}/conf/setting.xml文件,在下图所示的位置修改即可,路径随意改成你想要的位置就好。配置中央仓库针对于maven下载缓慢的问题,这里提供了国内的阿里云镜像,同样在setting.xml中修改,查找mirrors,在&lt;mirrors&gt;...&lt;/mirrors&gt;之间,如图位置添加这些代码即可到这里,Maven就安装配置好了,接下来就可以愉快的撸码了~~3、构建项目的几个主要环节(生命周期):清理(clean):删除以前的编译结果,为重新编译做好准备编译(compile):将Java源程序编译为字节码文件测试(test):针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性报告:在每一次测试后以标准的格式记录和展示测试结果打包(package):将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。安装(install):在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。部署(deploy):将打包的结果部署到远程仓库或将war包部署到服务器上运行。4、Maven常用命令mvn-version/-v——显示版本信息mvnclean——清空生成的文件mvncompile——编译**mvntest**——编译并测试mvnpackage——生成target目录,编译、测试代码,生成测试报告,生成jar/war文件mvnsite——生成项目相关信息的网站mvncleancompile——表示先运行清理之后运行编译,会将代码编译到target文件夹中mvncleanpackage——运行清理和打包mvncleanpackage-Dmaven.test.skip=true——清理已经生成的文件并打包,但是跳过测试环节mvncleaninstall——运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用mvncleandeploy——运行清理和发布5、Maven核心概念Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从Maven的九个核心概念入手,看看Maven是如何实现自动化构建的POM约定的目录结构坐标依赖管理仓库管理生命周期插件和目标继承聚合Maven的核心程序中仅仅定义了抽象的生命周期,而具体的操作则是由Maven的插件来完成的。可是Maven的插件并不包含在Maven的核心程序中,在首次使用时需要联网下载。下载得到的插件会被保存到本地仓库中。本地仓库默认的位置是:~.m2\repository。5.1Maven约定的工程目录Java开发领域普遍认同的一个观点:约定>配置>编码(能用配置解决的问题就不编码,能基于约定的就不配置)5.2POMProjectObjectModel:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。5.3坐标Maven使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。groupId:公司或组织的域名倒序+当前项目名称artifactId:当前项目的模块名称version:当前模块的版本比如Spring核心模块的jar包我们可以使用如下一段pom引入:5.4依赖Maven中最关键的部分,我们使用Maven最主要的就是使用它的依赖管理功能。要理解和掌握Maven的依赖管理,我们只需要解决以下几个问题:(1)依赖的目的是什么当Ajar包用到了Bjar包中的某些类时,A就对B产生了依赖,这是概念上的描述。那么如何在项目中以依赖的方式引入一个我们需要的jar包呢?答案非常简单,就是使用dependency标签指定被依赖jar包的坐标就可以了。(2)依赖的范围有时依赖信息中除了目标jar包的坐标还有一个scope设置,这就是依赖的范围。依赖的范围有几个可选值,常用的有:compile、test、provided三个,当然还有不常用的runtime、system.compile:默认范围,编译测试运行都有效provided:在编译和测试时有效runtime:在测试和运行时有效test:只在测试时有效system:在编译和测试时有效,与本机系统关联,可移植性差(3)依赖的传递性A依赖B,B依赖C,A能否使用C呢?那要看B依赖C的范围是不是compile,如果是则可用,否则不可用。(4)依赖的排除如果我们在当前工程中引入了一个依赖是A,而A又依赖了B,那么Maven会自动将A依赖的B引入当前工程,但是个别情况下B有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入A的时候将B排除。(5)依赖的原则:解决jar包冲突在使用Maven中我们导入jar包坐标时会产生依赖传递,而依赖传递难免会发生jar包间的依赖冲突,解决jar包冲突有以下解决方案:1)Maven自己调解在平时导入jar包时即使产生了依赖冲突程序也会照样运行,这是因为maven会遵循两个原则,来解决jar包冲突:路径最短者优先:即在pom文件中jar包坐标的导入顺序决定了发生依赖冲突时使用哪个发生冲突的jar包,先声明者优先;路径相同时先声明者优先:即直接依赖优先于间接依赖,依赖的层级越低越优先2)排除依赖第二种解决依赖的冲突的问题的方法是自己手动使用&lt;exclusions&gt;标签排除有冲突的jar包,如下图所示。3)锁定版本(推荐使用)我们可以在&lt;dependencyManagement&gt;标签中指定jar包的版本,保证我们的程序在运行时采用我们锁定jar包的版本。需要注意的是:锁定标签(&lt;dependencyManagement&gt;标签中的内容)并不会导入依赖,如果需要导入依赖还需要通过&lt;dependency&gt;标签来完成,通过&lt;dependency&gt;导入依赖时可以不声明jar包的版本,会自动导入锁定的版本jar包;锁定版本的标签一般只写在父模块中,子模块可以通过继承也会受影响;如果子模块中没有声明版本,并且父模块中也没有书写锁定版本的标签,则程序会报错;更彻底地,我们可以把依赖的版本集中到&lt;properties&gt;中管理这样我们需要更换项目依赖的版本时机只需要在propreties标签中修改即可应用到全局。5.5仓库分类本地仓库:为当前本机电脑上的所有Maven工程服务远程仓库私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务中央仓库:架设在Internet上,为全世界所有Maven工程服务中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求,比如阿里的镜像仓库中的文件Maven的插件我们自己开发的项目的模块第三方框架或工具的jar包※不管是什么样的jar包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖,查询地址:mvnrepository.com/5.6生命周期(1)什么是Maven的生命周期?Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了。Maven有三套相互独立的生命周期,分别是:CleanLifecycle在进行真正的构建之前进行一些清理工作DefaultLifecycle构建的核心部分,编译,测试,打包,安装,部署等等SiteLifecycle生成项目报告,站点,发布站点它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行mvncleaninstallsite运行所有这三套生命周期。每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvnclean,这个clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。(2)Clean生命周期Clean生命周期一共包含了三个阶段:pre-clean执行一些需要在clean之前完成的工作clean移除所有上一次构建生成的文件post-clean执行一些需要在clean之后立刻完成的工作(3)Site生命周期re-site执行一些需要在生成站点文档之前完成的工作site生成项目的站点文档post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备site-deploy将生成的站点文档部署到特定的服务器上这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。(4)Default生命周期Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中(列出一些重要阶段)validate:验证工程是否正确,所有需要的资源是否可用。compile:编译项目的源代码。test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。package:把已编译的代码打包成可发布的格式,比如jar、war等。integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。verify:运行所有检查,验证包是否有效且达到质量标准。install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享(5)生命周期与自动化构建运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行mvninstall的时候,代码会被编译,测试,打包。这就是Maven为什么能够自动执行构建过程的各个环节的原因。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。5.7插件和目标Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的每个插件都能实现多个功能,每个功能就是一个插件目标Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务例如:compile就是插件maven-compiler-plugin的一个目标;pre-clean是插件maven-clean-plugin的一个目标5.8继承Maven为什么需要继承机制?由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置。创建父工程和创建一般的Java工程操作一致,唯一需要注意的是:打包方式处要设置为pom在子工程中引用父工程,从当前目录到父项目的pom.xml文件的相对路径此时如果子工程的groupId和version如果和父工程重复则可以删除。在父工程中管理依赖将Parent项目中的dependencies标签,用dependencyManagement标签括起来在子项目中重新指定需要的依赖,删除范围和版本号5.9.聚合Maven为什么要使用聚合?将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行clean操作。而使用了聚合之后就可以批量进行Maven工程的安装、清理工作。如何配置聚合?在总的聚合工程中使用modules/module标签组合,指定模块工程的相对路径即可参考资料[1]头条一面竟然问我Maven?——Java识堂2020-01-1811:02:53
LoveIT 2020-07-27Maven -
如何使用 IDEA 创建项目并且上传到 GitHub
首先在本地安装Git,网上有很多教程,也可以参考我的另一篇博客Git入门必会必知,今天的重点是使用IDEA把我们的项目上传到GitHub上而不是使用Git命令行,好了不废话了,现在开始吧!1、在IDEA中设置Git:在File-->Setting-->VersionControl-->Git-->PathtoGitexecutable选择你的git安装后的git.exe文件,然后点击Test,测试是否设置成功。2、在IDEA中设置GitHub,File-->Setting->VersionControl-->GibHub,点击Test,测试是否连接成功。上面这两步只用在第一次使用IDEA上的Git上传项目的时候配置一下,以后这些步骤就可以省略了,当然如果你想添加GitHub账户,也可以参考第2条的做法。3.创建本地项目仓库:VCS-->ImportintoVersionControl-->CreateGitRepository...4.上传本地项目仓库到GitHub:第一次上传的时候,需要再次输入用户名和密码。VCS–>ImportintoVersionControl–>ShareProjectonGitHub–>选择项目文件夹5.提交/拉取每次项目的Code改动:提交:遵循git的方式:先add---&gt;后commit---&gt;最后push。拉取:良好的程序猿习惯是先fetch---&gt;后pull---&gt;最后解决冲突。
LoveIT 2020-05-05Git -
Git入门必知必会
一、什么是Git?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Git是目前世界上最先进的分布式版本控制系统。二、SVN和Git的区别?SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。Git是分布式版本控制系统,它没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。三、Git上传文件、文件夹或项目到Github配置Git、SSH1、下载、安装Git傻瓜式操作,到git官网下载好后和普通软件安装一样安装就好了,没啥可说的......2、绑定用户3、配置SSH(1)在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开GitBash),创建SSHKey,密码可以不设置直接回车如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSHKey的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。用记事本打开id_rsa.pub(C:\Users\Administrator.ssh),得到sshkey公钥。(2)为Github账户添加sshkey。登录Github,展开个人头像的小三角,点settings,然后打开SSHkeys菜单,点击AddSSHkey新增密钥,填上标题。(3)ssh-Tgit@github.com关联账号和ssh4、在Github上建立仓库填一下仓库名称,InitializethisrepositorywithaREADME是可选的,建议在创建时选上,可以在后面省一个步骤。填好之后,点Createrepository完成仓库的建立如果在创建仓库的时候没有创建README.md文件也不要紧,可以在桌面Git中手动创建5、上传文件到GitHub6、删除GitHub上的文件/文件夹7、建立、合并和删除分支7.1gitbranch-a查看当前项目的所有分支7.2gitbranchbrancheName创建新的分支,比如gitbranchdev7.3gitcheckoutbrancheName切换分支,比如:gitcheckoutdev7.4gitcheckout-bbrancheName创建+切换到新分支,比如:gitcheckout-bdev7.5在master分支下,合并dev分支下的提交gitmegerdev7.6gitbranch-dbrancheName删除分支,比如:gitbranch-ddev8、多人协作与推送分支8.1新建分支gitpushoriginbranchName把分支推送到远程,比如新建了一个分支叫Huangxin,并把它push到远程上去8.2抓取分支多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSHkey添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫target在新建的目录中点击gitbashhere,然后依次gitinit初始化文件夹,gitremoteaddorigin目标远程库URL连接,gitclone目标远程库URL把原有的项目导下来。之后我们要在原有的Huangxin这个分支上进行开发,那么我么可以这么做:执行上面的语句后,我们就可以在Huangxin这个原有的分支上开发了,修改完成后要提交你的分支到远程:如果没有问题的话,那就推送上去了。但是会有这么一种情况:协作的伙伴已经向origin/Huangxin分支上推送了提交,而我在我的目录文件下也对同样的文件同个地方作了修改,也试图推送到远程库时,这是就会报错filedtopushsomerefstohtttps://xxx,这就是提交的内容发生冲突了,解决的办法是:先用gitpull把最新的提交从origin/Huangxin抓下来,然后在本地合并,解决冲突,再推送。如果gitpull失败了,原因是没有指定本地MyBranch分支与远程origin/Huangxin分支的链接:gitbranch--set-upstreamMyBranchorigin/Huangxin然后在gitpull就会成功。pull成功后手动修改不一样的地方,再次用gitpushoriginMyBranch推送到远程总结多人协作工作模式一般是这样的:首先,可以试图用gitpushoriginbranch-name推送自己的修改.如果推送失败,则因为远程分支比你的本地更新早,需要先用gitpull将远程分支上较新的更改拉取下来,在本地合并冲突。之后再用gitpushoriginbranch-name推送
LoveIT 2019-07-08Git