Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的主要功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
扩展资料:
Git的优缺点:
优点:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。
缺点:
1、资料少(起码中文资料很少)。
2、学习周期相对而言比较长。
3、不符合常规思维。
4、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
参考资料来源:百度百科-Git
用 Visual Studio 可以配合 Git 工具做版本管理。也可以直接将工程同步到 GitHub 上。配置过程非常简单。首先你要安装 GIt,安装和配置步骤见 安装 Git,Windows 上只要替换其中的安装步骤,其他类似。
在 Visual Studio 安装插件 Git Source Control Provider
然后在 tools->options->source control 中配置源代码管理,将默认的修改为 Git Source Control Provider
配置好后会d出选择 Git 的 bin 目录,将安装目录填上即可,以后也可以在选项中再次填上
因为用户名,还有 GItHub 的 ssh key 已经在 安装 Git 中完成了,这里不需要再做一边。
我们新建一个工程,然后可以在解决方案的右键菜单中看到多出来的一项。这里如果你选择 TortoiseGit 的话,d出的菜单是不一样的,会比较丰富。我安装的是最简单的。
选择 Pending Changes 就可以 commit changes 了,这里要勾选改变的源文件,相当于 git add
如果要 push 到 GitHub 的远程仓库 ,我还没找到选项,还是只能用 Git Bash 命令行。不过,push 不是经常做的,所以影响不大。如果嫌烦的话,可以装 TortoiseGit,在 Visual Studio 中就能有相应的选项,完全不要命令行啦。
1 VS2015在对Git的支持
VS2015是微软IDE集成开发环境的重量级升级,微软除了将触角延伸至iOS和Android平台以及Unity,Unreal和Cocos等游戏开发领域中。而且在进一步集成Git。
可以说在不需要第三方插件的前提下,就可以使用Git来进行团队开发。
2 在VS2015中使用Git
下面介绍如何在VS2015中使用Git进行团队开发。
21 在Git服务器上新建版本库
在使用VS2015进行团队开发前,我们先在Git服务器上创建新的版本库。
打开我们已经安装好的GitStack(如查直接看本篇的同学,可以先看一下服务端环境搭建一文URL:使用GitStack+TortoiseGit 图形界面搭建Git环境)
在GitStack中创建新的版本库,名为“MyGitForVsObject”,并新建两个用户"yubinfeng"和“zhangsan”,再新建一个组"MyGitGroup",将这两个用户加入到该组,并给版本库授权该组。具体 *** 作这里不再赘述,不了解的朋友请看上面的URL
完成后如下所示:
22 在VS2015中克隆远程版本库
我们先在VS2015中新建一个解决方案,在工具栏,点“团队”=》“管理连接”
按上图所示,右打开的 团队资源管理器中,输入远程Git URL,点击克隆按钮,即可完成在VS2015中克隆远程版本库了
克隆成功后,可以在 本地Git存储库 中看到 本地版本库已经 从服务器上克隆下来了。
23 Git全局设置
完成版本库克隆后,我们需要在Git中进行一次全局设置。
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击主页按钮,如下图
点击设置,选择全局设置,完成如下三项更改,点更新
用户名:将作为你以后版本提交后日志显示的名称
电子邮件:团队联系使用
默认存储库位置:最好进行一下改动,默认在C盘,防止丢失
24 Git存储库设置
存储库设置和全局设置类同,如下
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击主页按钮,选择 设置 - 存储库设置
如上图,其他内容不需要设置,主要 添加一下远程 。这将是以后获取新版本和推送到服务器的地址
此时,我们可以看到项目文件前面有一个小锁,并且代码中已经有了Git的信息,表示项目已经已经受到Git控制
25 第一次向Git服务器发布项目
我们上面看到的所有Git的受控信息,只是相对于克隆到本地的版本库,此时Git服务器并没有接收到这些工程文件,下面我们要做的将是第一次将本地版本库中的工程文件同步到Git服务器,即项目发布
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击小房子,回到Git主页,点击同步
此时,出现如下界面
+
我们第一次将本地分支发布到远程服务器,点击发布
输入远程URL,发布,即可发布到远程库
我们可以打开GitStack查看日志,如下:
上面显示的时间,为你在本地 *** 作的时间。我们可以看到Git作为分布式版本控制系统,你在离线进行 *** 作,在推送时,显示的均为你 *** 作时间,而非推送时间。
26 拉取、获取、合并、提交、推送、同步
项目开发过程中,我们通常进行下面几种 *** 作,我一次性介绍,这个和上篇TortoiseGit类似,直接看本篇的同学,可以参考上篇,URL:图形化Git客户端工具TortoiseGit
拉取(Pull):将远程版本库合并到本地版本库; 相当于(Fetch+Meger)
获取(Fetch):从远程版本库获得最新版本
合并(Meger):将两个版本库进行合并 *** 作
提交(Commit):将所做的更改,存入本地暂存库
推送(Push):将所做的更改,存入远程版本库
同步(Pull+Push):先将远程库拉取,再将本地库推送到远程库 注意这个顺序; 相当于(Pull+Push)
我们对文件进行修改后,文件前有一个小对号,右击,点提交
我们在提交文件时,记得填写备注,在团队开发中,保持一个良好的习惯
提交在这里有三种:
提交:即将文件存入本地版本库
提交和推送:即将文件更改同时存入本地版本库和远程版本库
提交和同步:将文件更改提交到本地库的,再从远程版本库拉取新版本到本地,再推本地库到远程版本库
注意:
这里的 *** 作,不针对当前文件,而是对所有变更进行提交、推送或同步。
27 创建分支
对于创建分支在上篇(URL:图形化Git客户端工具TortoiseGit)中已经介绍过了,这里主要介绍一下如何基于Vs2015创建Git分支
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击小房子,回到Git主页,点击分支
打开分支界面,在master分支上右击,选择 "从选定项创建本地分支"
在这里需要注意我们创建分支,有两种:
(1)创建本地分支
(2)创建远程会支
本地分支有创建前,一定要获取最新版本;远程分支,则要求所有成员最好能推送更改。
至于分支的创建是基于远程还是本地,最好能在团队成员之间达成一致。
下面介绍两种分支的创建方法
先看创建本地分支
输入一个分支名称,创建即可。
远程分支,我们需要选择如下
在创建远程分支时,一定要把跟踪远程分支,这个取消选择,否则将创建了一个跟踪分支,我们就不能发布了。
创建完成后,如下:
分支创建成功,接下就是发布到服务器
右击,点发布分支,即可。
可以看到,分支已经发布到服务器上了。
在服务器上通过GitStack也可以看到,多了一个分支。
28 切换和合并分支
在VS2015中切换分支非常简单,只要在分支名称上双击,就可以了,项目资源管理器中的文件随之变化。
这里主要看一下合并,
我们先切换到新建的分支"2016-2-7",在分支名称右击,选择 合并自
选择master ,点击合并,即可完成将master合并到新分支了。
29 删除分支
删除分支,首先要从远端删除,如下:
注意,如果要删除刚才新建的分支,和上篇TortoiseGit一样,要切换到另一分支 *** 作。
远端删除后,服务器上的分支就被删除了,本地的分支,直接删除即可。
3 使用VS2015+HubGit创建开源项目
前面我们介绍了Git作为一个分布式版本控制系统,其最大的优势就是适合开源项目管理。如果你还没有托管一个开源项目,那么你Out了。
目前即于Git开源项目托管平台非常多,Hubgitcom可以说非常知名,只是免费用户,只能托管开源项目。
本篇我介绍一下如何在VS2015中创建并开发自己的开源项目,以Hubgit为例,其他平台使用都差不多。
31 创建Github用户
创建完成后,点右上角Sign in进入Github
32 在Github上创建版本库
进入GitHub主页,点右上的 + 创建一个版本库
打开以后,如下
按图示完成,就可以了。
点右上角按钮,”your profile“查看你创建的版本库 test,点击进入
接下来的 *** 作,我们已经很熟悉了,就是在VS2015中打开GitHub版本库,进入开源项目的世界了。。。
33 在VS2015上发布自己的开源项目
这一步相信,大家一定非常熟悉了,对,就和上面介绍的克隆自己服务器上的版本库一样。
然后,我们新建一个解决方案或打开一个已有的解决方案
创建完成后,
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击小房子,回到Git主页,点击 更改
点击 提交和推送,这时提示一个身份验证,这是必须的,使用 前面注册的用户名和密码即可,当然这是开源项目,只要有Github用户,都可以进行版本克隆和提交代码
推送完成后,我们可以在github上查看
没问题,刚才推送的解决方案已经更新到github服务器了。
提交、获取、推送、分支,这些我就不用再说了吧,和上面介绍的完全一样了
34 如何加入别人的开源项目?
如何加入别人的开源项目?也就是别人如何参与你的开源项目,意思是一样的,就是除原创建者之外的人,要如何克隆版本库?
比如比较著名的开源项目Jquery,你如何开发他的项目呢?
你又不能直接在VS 2015中克隆人家的库,其实这个并不难办,看下面的图:
先进入Jquery的项目URL,然后点 右上的 Fork ,就将这个项目加入到你的库里了,相当于直接克隆了一个副本到你的GitHub上。
这下,你就可以用自己的帐号,在VS上克隆你的GitHub中的Jquery项目了,你可以加入自己的idear,如果你希望jquery的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,官方是否接受你的pull request就不一定了。
最后,我忘记说一件事了,我们刚才建的版本库test,别人也可以用同样的方法进行参与,只是你一定要记得,将初始库设为只读。
35 如何删除创建的版本库
先进入你的版本库,点右边的setting,进入设置页,拉到最底下
点击 删除该版本库,再输一次版本库名称,即可。
36 桌面版的GitHub
如果你在网站上看项目进度等信息,感觉不方便 ,你可以下载安装桌面版的Github
有windows和mac版本,可以通过桌面版完成网站上的所有功能。
使用GitHub进行团队协作的流程,可以参考这个视频,感觉非常好,推荐一下,
(function(A,w){function ma(){if(!cisReady){try{sdocumentElementdoScroll("left")}catch(a){setTimeout(ma,1);return}cready()}}function Qa(a,b){bsrccajax({url:bsrc,async:false,dataType:"script"}):cglobalEval(btext||btextContent||binnerHTML||"");bparentNode&&bparentNoderemoveChild(b)}function X(a,b,d,f,e,j){var i=alength;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&cisFunction(d);for(o=0;o<i;o++)e(a[o],b,fdcall(a[o],o,e(a[o],b)):d,j);return a}return i
e(a[0],b):w}function J(){return(new Date)getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0]type=a;return ceventhandleapply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=cdata(this,"events");if(!(aliveFired===this||!i||!ilive||abutton&&atype==="click")){aliveFired=this;var u=iliveslice(0);for(k=0;k<ulength;k++){i=u[k];iorigTypereplace(O,"")===atypefpush(iselector):usplice(k--,1)}j=c(atarget)closest(f,acurrentTarget);n=0;for(r=
jlength;n<r;n++)for(k=0;k<ulength;k++){i=u[k];if(j[n]selector===iselector){o=j[n]elem;f=null;if(ipreType==="mouseenter"||ipreType==="mouseleave")f=c(arelatedTarget)closest(iselector)[0];if(!f||f!==o)dpush({elem:o,handleObj:i})}}n=0;for(r=dlength;n<r;n++){j=d[n];acurrentTarget=jelem;adata=jhandleObjdata;ahandleObj=jhandleObj;if(jhandleObjorigHandlerapply(jelem,e)===false){b=false;break}}return b}}function pa(a,b){return"live"+(a&&a!==""a+"":"")+breplace(/\/g,"`")replace(/ /g,
"&")}function qa(a){return!a||!aparentNode||aparentNodenodeType===11}function ra(a,b){var d=0;beach(function(){if(thisnodeName===(a[d]&&a[d]nodeName)){var f=cdata(a[d++]),e=cdata(this,f);if(f=f&&fevents){delete ehandle;eevents={};for(var j in f)for(var i in f[j])ceventadd(this,j,f[j][i],f[j][i]data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]b[0]ownerDocument||b[0]:s;if(alength===1&&typeof a[0]==="string"&&a[0]length<512&&b===s&&!tatest(a[0])&&(csupportcheckClone||!uatest(a[0]))){e=
true;if(j=cfragments[a[0]])if(j!==1)f=j}if(!f){f=bcreateDocumentFragment();cclean(a,b,f,d)}if(e)cfragments[a[0]]=jf:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};ceach(vaconcatapply([],vaslice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&adocumenta:anodeType===9adefaultView||aparentWindow:false}var c=function(a,b){return new cfninit(a,b)},Ra=AjQuery,Sa=A$,s=Adocument,T,Ta=/^[^<](<[\w\W]+>)[^>]$|^#([\w-]+)$/,Ua=/^[^:#\[\,]$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s\/>(:<\/\1>)$/,P=navigatoruserAgent,xa=false,Q=[],L,$=ObjectprototypetoString,aa=ObjectprototypehasOwnProperty,ba=Arrayprototypepush,R=Arrayprototypeslice,ya=ArrayprototypeindexOf;cfn=cprototype={init:function(a,b){var d,f;if(!a)return this;if(anodeType){thiscontext=this[0]=a;thislength=1;return this}if(a==="body"&&!b){thiscontext=s;this[0]=sbody;thisselector="body";thislength=1;return this}if(typeof a==="string")if((d=Taexec(a))&&
(d[1]||!b))if(d[1]){f=bbownerDocument||b:s;if(a=Xaexec(a))if(cisPlainObject(b)){a=[screateElement(a[1])];cfnattrcall(a,b,true)}else a=[fcreateElement>以下内容均来源于一个微服务初学者的实践,仅供参考。
首先启动 Spring Cloud Eureka 注册中心,其他部分都作为服务注册到 Eureka ,并通过注册的服务名互相访问。Spring Cloud Config 提供统一的配置信息,供其他服务读取。Provider 生产者服务不直接对外暴露,仅供 Consumer 消费者服务调用。用户通过 Spring Cloud Gateway 统一访问消费者服务。
首先创建一个空 Maven 项目,然后右键项目 -> New Module ,选择继续创建空 Maven 模块或者使用 Spring Initializr 构建 Spring Cloud 模块。common模块用于存放公共的 lib ,如 dao 、model 、util 等。config-dev 存放配置文件,上传到 git 之后供 Spring Cloud Config 读取。
除了少数像 Spring Cloud Config 、Spring Cloud Gateway 这种独立应用,大部分非空模块都需要添加 spring-boot-starter-web 构建 Web 应用。下图是使用 IDEA 的 Spring Initializr 快速构建新模块。
下面贴上详细的配置文件和注解,bootstrapyml 具有高优先级,会提前加载并且不会被 applicationyml 覆盖,springcloudconfig 需要配置在 bootstrapyml 中,否则不能正常从配置中心获取配置信息。
applicationyml
HobbyEurekaApplicationjava
applicationyml
application-devyml
HobbyConfigApplicationjava
bootstrapyml
config-dev/gatewayyml
HobbyGatewayApplicationjava
在 Spring Cloud Gateway 的配置中已经展示过如何从 config-dev 配置仓库中读取配置文件。springcloudconfig 和 eurekaclient 都已经在 bootstrapyml 中配置过,接下来不做赘述。多模块项目中扫描其他模块的 mybatis 文件需要做额外的配置。
applicationyml
HobbyProviderTestApplicationjava
消费者调用生产者可以使用 Feign 声明式服务调用。
HobbyConsumerTestApplicationjava
TestFeignServicejava
TestServiceImpljava
Spring Cloud Eureka >> Spring Cloud Config >> Spring Cloud Gateway >> 其他服务
微服务架构能够将各种服务解耦,单独部署,配合 devops 才能展现出真正的威力,否则运维的工作会苦不堪言。gitlab 目前已经集成了 devops 功能,只要在项目中添加 gitlab-ciyml ,push 到 Gitlab 之后就会自动执行配置的命令,这里简单介绍一下 gitlab 的安装部署。
CentOS7 自带的 Git 版本号是 1831 ,需要更新,否则 Gitlab Runner 在进行自动构建的时候会报错 fatal: git fetch-pack: expected shallow list ,更新步骤如下:
Gitlab 安装官方文档
Gitlab Runner 安装官方文档
配置文件的地址 /etc/gitlab/gitlabrb
修改配置文件的 *** 作:
常用配置:搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。 假设你已经有sudo权限的用户账号,下面,正式开始安装。 第一步,安装git: $ sudo apt-get install gitIntelliJ IDEA使用:[1]Git *** 作1_百度经验
>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)