俗话说,磨刀不费砍柴工。为了更方便的进行项目管理,我们先将个人网站项目配置一下,满足以下2个目标:

1、安装Git插件

[.net 面向对象程序设计进阶] (26)
团队开发利器(六)分布式版本控制系统Git——在Visual Studio
2015中使用Git

  • VS2017中支持Git存储库,绑定Github项目,实现本地VS程序与线上Github一键代码提交和同步;
  • 搭建服务器FTP站点,VS2017中配置一键部署网站文件到服务器;

       
Myeclipse老版本可能需要安装Git插件(window->preference->Team下出现Git就说明安装成功),高版本中已经安装好了。我所使用的是MyEclipse2016,不需要安装Git插件,所以在这里就不在具体讲述安装Git插件的步骤。

本篇导读:

有了以上的配置,我们可以不用每次拉取和同步我们的程序到Github中,也不用每次在本地发布,拷贝服务器,我们只用在VS2017中简单的一键同步到Github或网站服务器。这样我们的开发效率有了很大的提高,也方便线上验证我们的程序代码。

2、生成MyEclipse的一个SSH的认证号

接上两篇,继续Git之旅

VS2017支持Github

选择 工具–>扩展和更新,搜索GitHub,安装GitHub的VS插件

图片 1

安装完插件,打开视图–>团队资源管理器,我们可以看到Git插件菜单。通过菜单我们可以新建Git存储库,可以提交修改的代码,并一键同步提交后的代码到自己的GitHub项目中。

图片 2     
  图片 3

再打开GitHub,可以看我们的代码已经同步了,是不是很方便?

图片 4

      
由于Github的代码是开源的,每个人都可以查看代码,但是只有自己能够修改代码。Github通过SSH
Key识别出提交的代码是用户本人推送的,才能够针对相应的代码进行操作。即本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要本地创建SSH
Key并在GitHub服务器上设置SSH
Key,从而创建本地和Guthub服务器的关系:window->preferences–>general–>Network
Connections–>SSH2

分布式版本控制系统Git——使用GitStack+TortoiseGit
图形界面搭建Git环境

VS2017支持FTP远程发布

要VS支持FTP发布,首先要将网站服务器配置成FTP服务器。

Server2008添加新的角色,选中文件服务并安装新角色:

图片 5

再次选中已安装的IIS服务,增加FTP服务器相关的角色:

图片 6

接着,在IIS网站右键选择“添加FTP站点”,选择FTP文件物理路径和添加站点名称:

图片 7

端口默认21,不用选择SSL证书,身份验证这里选择基本验证(为了一定的安全性,不要勾选匿名),授权访问里,指定administrator才能访问FTP站点,并具有读取和写入的权限;

图片 8

完成后,我们建好的FTP就自动启动了,这时浏览器中输入ftp://localhost,输入用户名和密码,就可以访问对应的文件目录了。当然,我们外网还是无法访问,为什么呢?相信大家看过上一篇,应该知道是防火墙的原因,我们按照上一篇的配置,增加FTP
21端口的允许入站规则,这样我们外网就通过FTP访问网站发布目录。

配置完外网服务器,我们来配置一下本地VS2017,右键项目–>发布,选择FTP发布,选项配置如下:

图片 9

这样我们就已经配置好本地一键发布站点到远程服务器了。以后直接点发布按钮,就可以看到自动将生成的发布文件,同步到网站服务器:

图片 10

2.1、General中的值为用户主目录下的.ssh文件和该目录下的id_rsa和id_rsa.pub文件(这两个就是SSH
Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人)

分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

替换前端框架

准备工作做完,浏览器输入网站服务器IP,可以看到可以正常访问,但是.net
core
mvc帮我们自动生成的界面,不一定符合我们的需求,那还是自己找一个前端的UI框架,替换一下既有界面。这里我选择的是 AdminLTE ,这是一个基于
bootstrap 的轻量级后台模板,相关的资料大家可以去官网研究一下。

我们把下载的文件解压缩到wwwroot/lib目录下,第一步先重构一下登录的界面:

 1 @model LoginViewModel
 2 
 3 @{
 4     Layout = null;
 5     ViewData["Title"] = "登录";
 6 }
 7 
 8 <!DOCTYPE html>
 9 <html>
10 <head>
11     <meta charset="utf-8" />
12     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13     <title>@ViewData["Title"] - LanceL0t</title>
14 
15     @await Html.PartialAsync("_SiteCssPartial")
16 </head>
17 <body class="hold-transition login-page">
18     <div class="login-box">
19         <div class="login-box-body">
20             <p class="login-box-msg">欢迎,由此登录</p>
21             <form asp-route-returnurl="@ViewData["ReturnUrl"]" method="post">
22                 <div asp-validation-summary="All" class="text-danger"></div>
23                 <div class="form-group has-feedback">
24                     <input asp-for="Email" class="form-control" placeholder="邮箱">
25                     
26                 </div>
27                 <div class="form-group has-feedback">
28                     <input asp-for="Password" class="form-control" placeholder="密码">
29                     
30                 </div>
31                 <div class="row">
32                     <div class="col-xs-8">
33                         <div class="checkbox icheck">
34                             <label asp-for="RememberMe">
35                                 <input asp-for="RememberMe"> @Html.DisplayNameFor(m => m.RememberMe)
36                             </label>
37                         </div>
38                     </div>
39                     <div class="col-xs-4">
40                         <button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
41                     </div>
42                 </div>
43             </form>
44             <div class="social-auth-links text-center">
45                 <p>- 或者 -</p>
46                 <a href="#" class="btn btn-block btn-social btn-facebook btn-flat">
47                     <i class="fa fa-facebook"></i> Sign in using
48                     Facebook
49                 </a>
50                 <a href="#" class="btn btn-block btn-social btn-google btn-flat">
51                     <i class="fa fa-google-plus"></i> Sign in using
52                     Google+
53                 </a>
54             </div>
55             <a asp-action="ForgotPassword">忘记密码</a><br>
56             <a asp-action="Register" asp-route-returnurl="@ViewData["ReturnUrl"]" class="text-center">立即注册</a>
57         </div>
58     </div>
59 </body>
60 </html>
61 
62 @await Html.PartialAsync("_SiteScriptsPartial")
63 @await Html.PartialAsync("_ValidationScriptsPartial")

接着第二步,优化一下之前的新用户注册界面:

 1 @model RegisterViewModel
 2 
 3 @{
 4     Layout = null;
 5     ViewData["Title"] = "注册";
 6 }
 7 
 8 <!DOCTYPE html>
 9 <html>
10 <head>
11     <meta charset="utf-8" />
12     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13     <title>@ViewData["Title"] - LanceL0t</title>
14 
15     @await Html.PartialAsync("_SiteCssPartial")
16 </head>
17 <body class="hold-transition login-page">
18     <div class="login-box">
19         <div class="login-box-body">
20             <p class="login-box-msg">欢迎,注册新用户</p>
21             <form asp-route-returnurl="@ViewData["ReturnUrl"]" method="post">
22                 <div asp-validation-summary="All" class="text-danger"></div>
23                 <div class="form-group has-feedback">
24                     <input asp-for="Email" class="form-control" placeholder="请输入邮箱">
25                     
26                 </div>
27                 <div class="form-group has-feedback">
28                     <input asp-for="Password" class="form-control" placeholder="请输入密码">
29                     
30 
31                 </div>
32                 <div class="form-group has-feedback">
33                     <input asp-for="ConfirmPassword" class="form-control" placeholder="请确认密码">
34                     
35                 </div>
36                 <div class="row">
37                     <div class="col-xs-8">
38                         <div class="checkbox icheck">
39                             <label asp-for="IsAgree">
40                                 <input asp-for="IsAgree"> 阅读并接受《<a href="#">用户协议</a>》
41                             </label>
42                         </div>
43                     </div>
44                     <div class="col-xs-4">
45                         <button type="submit" class="btn btn-primary btn-block btn-flat">注册</button>
46                     </div>
47                 </div>
48             </form>
49             <div class="social-auth-links text-center">
50                 <p>- 或者 -</p>
51                 <a href="#" class="btn btn-block btn-social btn-facebook btn-flat">
52                     <i class="fa fa-facebook"></i> Sign in using
53                     Facebook
54                 </a>
55                 <a href="#" class="btn btn-block btn-social btn-google btn-flat">
56                     <i class="fa fa-google-plus"></i> Sign in using
57                     Google+
58                 </a>
59             </div>
60             <a asp-controller="Account" asp-action="Login">已有账号</a><br>
61         </div>
62     </div>
63 </body>
64 </html>
65 
66 @await Html.PartialAsync("_SiteScriptsPartial")
67 @await Html.PartialAsync("_ValidationScriptsPartial")

这里的知识很简单,就不在祥述了,不过因为用的是.net
core提供的identity用户管理和验证,有些个人遇到的问题,我还是列出来,以免再走弯路。

图片 11

上两篇文章主要介绍了Git服务端和客户环境搭建,介绍了一款优秀的图形化的Git客户端工具TortoiseGit,本篇进入项目实战阶段,介绍如何在Visual
Studio 2015中使用Git进行项目版本控制。

自定义的服务器端和客户单的验证

比如,新用户注册时,要保证用户已勾选“阅读并接受用户协议”。而MVC本身校验机制没有提供bool型必须为true的校验,这里我们自己实现一个服务器端属性的校验,需要继承

  ValidationAttribute和IClientModelValidator:

 1 /// <summary>
 2 /// 复选框必须选中验证
 3 /// </summary>
 4 [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
 5 public sealed class MustBeTrueAttribute : ValidationAttribute, IClientModelValidator
 6 {
 7     //服务器端验证
 8     public override bool IsValid(object value)
 9     {
10         return value != null && (bool)value;
11     }
12 
13     public void AddValidation(ClientModelValidationContext context)
14     {
15         MergeAttribute(context.Attributes, "data-val", "true");
16         var errorMessage = FormatErrorMessage(context.ModelMetadata.GetDisplayName());
17         MergeAttribute(context.Attributes, "data-val-mustbetrue", errorMessage);
18     }
19 
20     private bool MergeAttribute(
21         IDictionary<string, string> attributes,
22         string key,
23         string value)
24     {
25         if (attributes.ContainsKey(key))
26         {
27             return false;
28         }
29         attributes.Add(key, value);
30         return true;
31     }
32 }

再加上客户端的验证方法:

 1 <script>
 2     //必须复选框勾选验证
 3     $.validator.addMethod("mustbetrue",
 4         function (value, element, parameters) {
 5             return value === "true";
 6         });
 7 
 8     $.validator.unobtrusive.adapters.add("mustbetrue", [], function (options) {
 9         options.rules.mustbetrue = {};
10         options.messages["mustbetrue"] = options.message;
11     });
12 </script>

.ssh的路径

1. VS2015在对Git的支持

identity的本地化

目前使用identity默认的错误描述是英文,这里我们需要显示成中文,所以新增一个IdentityExtensions类,继承IdentityErrorDescriber,重写错误描述 

 1 public class IdentityExtensions : IdentityErrorDescriber
 2 {
 3     public override IdentityError PasswordRequiresNonAlphanumeric()
 4     {
 5         return new IdentityError
 6         {
 7             Code = nameof(PasswordRequiresNonAlphanumeric),
 8             Description = "密码至少包含1位非数字字母的特殊字符"
 9         };
10     }
11 
12     public override IdentityError PasswordRequiresDigit()
13     {
14         return new IdentityError
15         {
16             Code = nameof(PasswordRequiresDigit),
17             Description = "密码至少包含1位数字('0'-'9')"
18         };
19     }
20 
21     public override IdentityError PasswordRequiresLower()
22     {
23         return new IdentityError
24         {
25             Code = nameof(PasswordRequiresLower),
26             Description = "密码至少包含1位小写字符 ('a'-'z')"
27         };
28     }
29 
30     public override IdentityError PasswordRequiresUpper()
31     {
32         return new IdentityError
33         {
34             Code = nameof(PasswordRequiresUpper),
35             Description = "密码至少包含1位大写写字符 ('A'-'Z')"
36         };
37     }
38 }

重写中文错误描述后,我们还得在Startup.cs文件中的服务配置中注册:

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddDbContext<ApplicationDbContext>(options =>
 4     options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
 5 
 6     services.AddIdentity<ApplicationUser, IdentityRole>()
 7     .AddEntityFrameworkStores<ApplicationDbContext>()
 8     .AddDefaultTokenProviders()
 9         .AddErrorDescriber<IdentityExtensions>();
10 
11     // Add application services.
12     services.AddTransient<IEmailSender, EmailSender>();
13 
14     services.AddMvc();
15 }

登录和注册新用户没有问题了,再来改造一下登录后主页的布局,把_Layout布局视图分割成顶部区域、左侧导航菜单、内容区域、底部区域、右侧侧边栏,并用部分视图分别渲染:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8" />
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 6     <title>@ViewData["Title"] - LanceL0t</title>
 7 
 8     @await Html.PartialAsync("_SiteCssPartial")
 9 </head>
10 <body class="hold-transition skin-blue sidebar-mini">
11     <div class="wrapper">
12         <!-- 顶部区域 -->
13         @await Html.PartialAsync("_LayoutHeaderPartial")
14         <!-- 导航栏 -->
15         @await Html.PartialAsync("_LayoutNavbarPartial")
16         <!-- 内容区域 -->
17         <div class="content-wrapper">
18             <section class="content-header">
19                 <h1>
20                     Dashboard
21                     <small>Version 2.0</small>
22                 </h1>
23                 <ol class="breadcrumb">
24                     <li><a href="#"><i class="fa fa-dashboard"></i> 主页</a></li>
25                     <li class="active">Dashboard</li>
26                 </ol>
27             </section>
28             <section class="content">
29                 @RenderBody()
30             </section>
31         </div>
32         <!-- 底部区域 -->
33         @await Html.PartialAsync("_LayoutFooterPartial")
34         <!-- 侧边栏 -->
35         @await Html.PartialAsync("_LayoutSidebarPartial")
36     </div>
37 
38     @await Html.PartialAsync("_SiteScriptsPartial")
39     @RenderSection("Scripts", required: false)
40 </body>
41 </html>

这样,我们登录和注册功能大体完成了,我们看下效果:

图片 12

2.2、本地创建SSH Key:点击Key Management 中的Generate RSA
Key…生成SSH认证号,然后点击Save Pravite
Key进行保存(注意:不要将我们之前的公钥和密钥给覆盖了,我们可以选择另外的目录进行保存),然后点击Apply

VS2015是微软IDE集成开发环境的重量级升级,微软除了将触角延伸至iOS和Android平台以及Unity,Unreal和Cocos等游戏开发领域中。而且在进一步集成Git。

图片 13

可以说在不需要第三方插件的前提下,就可以使用Git来进行团队开发。

SSH认证号

2.
在VS2015中使用Git

3、在GitHub上设置SSH
Key,从而创建本地和Guthub服务器的关系
将生成的公钥添加到Github中去

下面介绍如何在VS2015中使用Git进行团队开发。

3.1、拷贝公钥文件id_rsa.pub的内容:找到刚刚保存公有秘钥的路径(如下),可以用Notepad打开文件并复制内容

2.1
在Git服务器上新建版本库

图片 14

在使用VS2015进行团队开发前,我们先在Git服务器上创建新的版本库。

公有密钥的保存路径

打开我们已经安装好的GitStack(如查直接看本篇的同学,可以先看一下服务端环境搭建一文URL:使用GitStack+TortoiseGit
图形界面搭建Git环境
)

3.2、将从id_rsa.pub公有密钥文件中复制的内容添加到Github的ssh key
设定里:

在GitStack中创建新的版本库,名为“MyGitForVsObject”,并新建两个用户”yubinfeng”和“zhangsan”,再新建一个组”MyGitGroup”,将这两个用户加入到该组,并给版本库授权该组。具体操作这里不再赘述,不了解的朋友请看上面的URL.

(1)注册Github账号:打开Github主页https://github.com进行注册,按要求填写用户名、密码和邮箱,并进行邮箱验证

完成后如下所示:

(2)打开github网站的“settings”中的SSH
Keys或者直接页面访问https://github.com/settings/ssh  

图片 15

(3)点击右上角 Add SSH key  

2.2 在VS2015中克隆远程版本库

(4)输入title(任意填写,这里以gittest为例),然后将复制的公有密钥复制粘贴到key中

我们先在VS2015中新建一个解决方案,在工具栏,点“团队”=》“管理连接”

图片 16

图片 17

Github中添加公有密钥

按上图所示,右打开的
团队资源管理器中,输入远程Git
URL,点击克隆按钮,即可完成在VS2015中克隆远程版本库了

添加完成后结果

图片 18

图片 19

 克隆成功后,可以在 本地Git存储库 中看到
本地版本库已经 从服务器上克隆下来了。

添加公钥成功

2.3  Git全局设置

注意:私有密钥和公有密钥是成对的两个文件,私有文件保存在自己的本机,公有密钥保存到另一端的服务器、网站 
等。github就是一种网站。只有保存了私有密钥的机器才能访问远程的服务器等。使用该键的好处是不用使用密码,而是以密钥的方式验证用户。要想使本机能访问github。有三个步骤:(1)
创建私有密钥和公有密钥(2)将公有密钥放到github里。(3)测试是否设置成功(4)修改本地git配置文件并发布

完成版本库克隆后,我们需要在Git中进行一次全局设置。

4、在Github上创建自己的代码仓库

工具栏 – 团队 –
管理连接,打开团队资源管理器

4.1、Github注册成功后,点击右上角的“+”号,选择New
repository开创建代码仓库

点击主页按钮,如下图

(1)Resository name:填写自己定义的仓库名(必填项)

图片 20

(2)Description:填写描述(选填项)

 

(3)Public:保持选中(如果选Private可以选择谁能看到谁能提交,public只能选谁能提交,private是要钱的)

 

(4)Initialize this repository with a
README:决定是否生成一个README文件来初始化仓库(可选可不选)

点击设置,选择全局设置,完成如下三项更改,点更新

(5)Create repository:点击生成代码仓库

图片 21

图片 22

用户名:将作为你以后版本提交后日志显示的名称

创建代码仓库

电子邮件:团队联系使用

4.2、获取代码仓库的地址:点击Create
repository后生成http地址就是该代码仓库的地址,如下图所示

默认存储库位置:最好进行一下改动,默认在C盘,防止丢失

图片 23

2.4  Git存储库设置

代码仓库地址

存储库设置和全局设置类同,如下

5、创建本地git仓库

工具栏 – 团队 –
管理连接,打开团队资源管理器

5.1、在MyEclipse中创建项目(如gittest)

点击主页按钮,选择 设置 –
存储库设置

5.2、右键项目–>team–>share project来共享项目

图片 24

图片 25

如上图,其他内容不需要设置,主要
添加一下远程 。这将是以后获取新版本和推送到服务器的地址

利用Git进行项目共享

此时,我们可以看到项目文件前面有一个小锁,并且代码中已经有了Git的信息,表示项目已经已经受到Git控制

点击Next,出现如下界面,进行Git代码库配置

图片 26

图片 27

2.5  第一次向Git服务器发布项目

配置Git代码库

我们上面看到的所有Git的受控信息,只是相对于克隆到本地的版本库,此时Git服务器并没有接收到这些工程文件,下面我们要做的将是第一次将本地版本库中的工程文件同步到Git服务器,即项目发布

点击Finish,我们的工程显示为NO-HEAD,即表示没有指针指向

工具栏 – 团队 –
管理连接,打开团队资源管理器

图片 28

点击小房子,回到Git主页,点击同步

项目gittest

图片 29

6、首次提交项目至远程

 

选中项目右键–>team–>commit

此时,出现如下界面

(1)Commit message:填写提交信息

图片 30+

(2)Status:选中需要提交的文件

我们第一次将本地分支发布到远程服务器,点击发布

(3)Commit and Push:提交到本地并推送至Github服务器

图片 31

(4)Commit:提交到本地

 

图片 32

输入远程URL,发布,即可发布到远程库

提交项目

我们可以打开GitStack查看日志,如下:

6.1、这里我们选择提交并推送按钮,会出现以下如下界面

图片 33

图片 34

 

Git代码库地址

上面显示的时间,为你在本地操作的时间。我们可以看到Git作为分布式版本控制系统,你在离线进行操作,在推送时,显示的均为你操作时间,而非推送时间。

(1)首先我们需要填写github中仓库地址(4.2中已获取),同时填写用户名、密码,选中记住

2.6
 拉取、获取、合并、提交、推送、同步

图片 35

项目开发过程中,我们通常进行下面几种操作,我一次性介绍,这个和上篇TortoiseGit类似,直接看本篇的同学,可以参考上篇,URL:图形化Git客户端工具TortoiseGit

master分支

拉取(Pull):将远程版本库合并到本地版本库;
相当于(Fetch+Meger)

(2)然后点击Next

获取(Fetch):从远程版本库获得最新版本

图片 36

合并(Meger):将两个版本库进行合并操作

分支推向远程

提交(Commit):将所做的更改,存入本地暂存库

(3)然后会进行远程通信,如果网络不好可能会有点问题

推送(Push):将所做的更改,存入远程版本库

图片 37

同步(Pull+Push):先将远程库拉取,再将本地库推送到远程库
注意这个顺序; 相当于(
Pull+Push

远程连接中

图片 38

(4)远程连接成功后,会出现如下界面

 

图片 39

我们对文件进行修改后,文件前有一个小对号,右击,点提交

远程连接成功

图片 40

(5)点击Finish

我们在提交文件时,记得填写备注,在团队开发中,保持一个良好的习惯

图片 41

提交在这里有三种:

推送远程结果

提交:即将文件存入本地版本库

(6)此时项目状态如下:即表示没有指针指向的“NO-HEAD”已经消失,项目显示在master分支上

提交和推送:即将文件更改同时存入本地版本库和远程版本库

图片 42

提交和同步:将文件更改提交到本地库的,再从远程版本库拉取新版本到本地,再推本地库到远程版本库

6.2、查看提交信息

注意:

(1)查看本地提交信息:右键项目–>team–>Show in
History来查看提交信息

这里的操作,不针对当前文件,而是对所有变更进行提交、推送或同步。

图片 43

2.7  创建分支

提交历史

 对于创建分支在上篇(URL:图形化Git客户端工具TortoiseGit)中已经介绍过了,这里主要介绍一下如何基于Vs2015创建Git分支

(2)查看Github服务器上的提价信息:访问https://github.com/sewenfengqing/development查看提交信息(提交所在分支、提交描述、提交时间等)

工具栏 – 团队 –
管理连接,打开团队资源管理器

图片 44

点击小房子,回到Git主页,点击分支

Github上的提交信息

图片 45

为什么在MyEclipse中的gittest已经通过项目右键–>team–>Commit多次,且通过项目右键–>team–>Show
in
History查看到了提交信息,问什么在Guithub中仅能查到第一次的提交信息,之后却查不到?(注意:通过项目右键–>team–>commit只是提交到本地,而通过项目右键–>team–>push
to upstream或者commit中commit and push才会上传到Github服务器)

打开分支界面,在master分支上右击,选择
“从选定项创建本地分支”

7、修改代码提交至本地Git

图片 46

图片 47

在这里需要注意我们创建分支,有两种:

提交至本地

(1)创建本地分支

此时仅在本地有提交信息,Github上没有

(2)创建远程会支

图片 48

本地分支有创建前,一定要获取最新版本;远程分支,则要求所有成员最好能推送更改。

本地提交历史

至于分支的创建是基于远程还是本地,最好能在团队成员之间达成一致。

8、修改代码提交至远程仓库Github

下面介绍两种分支的创建方法

直接项目右键–>team–>commit–>commit and
push推送项目至服务器,出现如下问题

先看创建本地分支

图片 49

图片 50

提交出错

输入一个分支名称,创建即可。

为了使用远程推送,您必须指定至少一个URI和至少一个REF映射

远程分支,我们需要选择如下

图片 51

图片 52

配置Push

在创建远程分支时,一定要把跟踪远程分支,这个取消选择,否则将创建了一个跟踪分支,我们就不能发布了。

解决方案:

创建完成后,如下:

(1)创建分支:项目右键–>team–>Switch to–>New Branch

图片 53

图片 54

分支创建成功,接下就是发布到服务器

新分支

图片 55

(2)项目显示就在bliy分支上

右击,点发布分支,即可。

图片 56

图片 57

分支liy

可以看到,分支已经发布到服务器上了。

(3)提交新建的文件

图片 58

1>右键文件–>team–>Add to Index;

在服务器上通过GitStack也可以看到,多了一个分支。

图片 59

 2.8 切换和合并分支

新建文件

在VS2015中切换分支非常简单,只要在分支名称上双击,就可以了,项目资源管理器中的文件随之变化。

2>此时新建的文件前面会出现“+”号,右键文件–>team–>commit,选择commit;

这里主要看一下合并,

3>而后我们再进行推送team–>Push branch liy

我们先切换到新建的分支”2016-2-7″,在分支名称右击,选择
合并自…

(后两步可以替换为:右键文件–>team–>commit–>commit and
push)

图片 60

图片 61

 

提交并推送新文件

选择master
,点击合并,即可完成将master合并到新分支了。

(4)重新提交修改代码并推送至服务器

图片 62

文件右键–>team–>commit–>commit and push

 2.9 删除分支

图片 63

删除分支,首先要从远端删除,如下:

推送分支到远程

注意,如果要删除刚才新建的分支,和上篇TortoiseGit一样,要切换到另一分支操作。

图片 64

图片 65

推送成功

 

(5)Giithub上显示提交信息

远端删除后,服务器上的分支就被删除了,本地的分支,直接删除即可。

图片 66

图片 67

Github服务器上的提交信息

3.
使用VS2015+HubGit创建开源项目

9、合并分支

前面我们介绍了Git作为一个分布式版本控制系统,其最大的优势就是适合开源项目管理。如果你还没有托管一个开源项目,那么你Out了。

(1)首先切换回主分支:team–>Switch to –>master

目前即于Git开源项目托管平台非常多,Hubgit.com可以说非常知名,只是免费用户,只能托管开源项目。

(2)之后:team–>Merge

国内比较大的Git托管平台有:阿里( GitCafe
()  Csdn()  
开源中国()

图片 68

 本篇我介绍一下如何在VS2015中创建并开发自己的开源项目,以Hubgit为例,其他平台使用都差不多。

分支合并

3.1 创建Github用户

(3)选中liy分支,点击Merge

图片 69

图片 70

创建完成后,点右上角Sign in进入Github

合并结果

 3.2 在Github上创建版本库

(4)点击ok之后再进行提交推送

进入GitHub主页,点右上的 + 创建一个版本库

10、通过使用egit插件来进行版本控制

 

10.1、从服务器克隆代码仓库至本地

图片 71

项目右键–>import–>Git–>Projects from Git

打开以后,如下

图片 72

图片 73

版本控制

按图示完成,就可以了。

点击Next

图片 74

图片 75

点右上角按钮,”your profile“查看你创建的版本库 test,点击进入

点击Next

图片 76

图片 77

接下来的操作,我们已经很熟悉了,就是在VS2015中打开GitHub版本库,进入开源项目的世界了。。。

克隆URI

3.3
在VS2015上发布自己的开源项目

点击Next,仓库就从远程Clone(克隆)到本地

 图片 78

图片 79

这一步相信,大家一定非常熟悉了,对,就和上面介绍的克隆自己服务器上的版本库一样。

仓库本地路径

然后,我们新建一个解决方案或打开一个已有的解决方案

之后在myeclipse中导入该项目,更改代码后的提交方式请看上面的第六步。

图片 80

10.2、提交修改的代码到Github服务器

创建完成后,

(1)将改动的代码标记
    项目右键–>team–>synchronize workspace

工具栏 – 团队 – 管理连接,打开团队资源管理器

图片 81

点击小房子,回到Git主页,点击 更改

同步工作空间

图片 82

点击Yes后

点击 提交和推送,这时提示一个身份验证,这是必须的,使用
前面注册的用户名和密码即可,当然这是开源项目,只要有Github用户,都可以进行版本克隆和提交代码

图片 83

图片 84

显示修改的文件

推送完成后,我们可以在github上查看

项目右键–>Add to Index ,修改的文件标记为“*”

图片 85

图片 86

没问题,刚才推送的解决方案已经更新到github服务器了。

标记修改的代码

提交、获取、推送、分支,这些我就不用再说了吧,和上面介绍的完全一样了

(2)将工作空间的代码提交到本地仓库

3.4  如何加入别人的开源项目?

  项目右键–>team–>commit

如何加入别人的开源项目?也就是别人如何参与你的开源项目,意思是一样的,就是除原创建者之外的人,要如何克隆版本库?

(3)将远程仓库的代码pull(合并)到本地仓库

比如比较著名的开源项目Jquery,你如何开发他的项目呢?

 项目右键–>team–>pull (这一步可能需要解决代码冲突,合并代码 )

你又不能直接在VS
2015中克隆人家的库,其实这个并不难办,看下面的图:

(4)将本地仓库代码push(推送)到远程仓库
项目右键–>team–>push to upstream

图片 87

先进入Jquery的项目URL,然后点 右上的 Fork
,就将这个项目加入到你的库里了,相当于直接克隆了一个副本到你的GitHub上。

这下,你就可以用自己的帐号,在VS上克隆你的GitHub中的Jquery项目了,你可以加入自己的idear,如果你希望jquery的官方库能接受你的修改,你就可以在GitHub上发起一个pull
request。当然,官方是否接受你的pull request就不一定了。

最后,我忘记说一件事了,我们刚才建的版本库test,别人也可以用同样的方法进行参与,只是你一定要记得,将初始库设为只读。

图片 88

3.5  如何删除创建的版本库

先进入你的版本库,点右边的setting,进入设置页,拉到最底下

图片 89

点击
删除该版本库,再输一次版本库名称,即可。

 3.6  桌面版的GitHub

如果你在网站上看项目进度等信息,感觉不方便
,你可以下载安装桌面版的Github

下载地址:

有windows和mac版本,可以通过桌面版完成网站上的所有功能。

使用GitHub进行团队协作的流程,可以参考这个视频,感觉非常好,推荐一下,URL:

4. 本节要点:

本篇主要介绍了如何在Visual
Studio
2015中使用Git,然后介绍了目前流行的一些开源托管平台,最后以GitHub为例,介绍了如何创建自己的开源项目和参与别人的开源项目。

如果你还没有自己的开源项目,快点动手申请一个Github帐号,共享出你的项目吧~开源需要每个人的努力~

==============================================================================================

返回目录

<如果对你有帮助,记得点一下推荐哦,如有有不明白或错误之处,请多交流>

<对本系列文章阅读有困难的朋友,请先看《.net
面向对象编程基础》
>

<转载声明:技术需要共享精神,欢迎转载本博客中的文章,但请注明版权及URL>

.NET
技术交流群:467189533

图片 90

==============================================================================================

相关文章