VisualSVN-Server的安装以及简单使用
TortoiseSVN的安装及其简单使用
VisualSVN的安装及冲突的处理
每次修改完代码之后还要回到项目所在文件夹进行提交,这样很麻烦。
VisualSVN是VS的一个SVN的插件,可以直接在VS上进行操作。
VisualSVN的安装
首先去官网下载
我下载的是
双击进行安装
点击Next
接受,然后点击下一步
选择你要在哪个版本上的vs上进行安装,然后点击Next.
点击Install进行安装
点击Finish,安装完成。
解决冲突
为了演示冲突的问题。现在提出一个需求。B用户为当前项目添加一句话输出B,C用户为当前项目添加一句话输出C。
最终效果为
namespace SvnTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("A");
Console.WriteLine("A");
Console.WriteLine("B");
Console.WriteLine("C");
Console.ReadKey();
}
}
}
现在打开VS,会发现菜单栏多了VISUALSVN
工具—>选项—>源代码管理
当前源代码管理插件,选择VisualSVN。
点击VSUALSVN—>Get Solution from Subversion…
输入仓储的地址,填写项目的名称,填写项目要存储的位置,点击OK。
之后会让输入用户名和密码。这里我用B用户。
点击OK
这时候对应存储的文件中已经下载好项目,并且vs中文件前边都多了一个绿点。
这代表它和服务器上的文件相同。
现在我更改代码为
namespace SvnTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("A");
Console.WriteLine("A");
Console.WriteLine("B");
Console.ReadKey();
}
}
}
现在有的文件前变成了黄色的点。代表发生了更改。
为了模拟一下如何解决冲突。
我用用户C重新从服务器下载了一个项目(虽然B修改了文件,但B并没有提交,所以C现在下的项目和B下载的相同)。
并把文件改为
namespace SvnTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("A");
Console.WriteLine("A");
Console.WriteLine("C");
Console.ReadKey();
}
}
}
现在用户C要把项目提交的服务器。
解决方案—>右键—>Update,检查一下有没有冲突
没啥问题后
解决方案—>右键—>Commit…
现在服务器最新的版本为C提交的这个版本。
现在用户B的那个项目。
解决方案—>右键—>Update,检查一下有没有冲突
这次出现了冲突,现在要解决这个冲突。
现在有的文件前变成了红色的点,此文件有冲突。
Program.cs—>右键—>Edit Text Conficts
左边的是服务器上的最新版本,右边的是用户B的。
比较两个版本的不同,在下边的Merged中进行修改。
我选择Mine版本中那个复选框,Console.WriteLine("B");
这句话就会自动填充到,Merged中的红色区域中。
然后我在把C的内容复制到Merged
然后点击接受合并。
现在冲突就解决了
解决方案—>右击—>Update。看看还有啥问题没有。
没有的话,并且运行成功。
解决方案—>右击—>Commit…。进行提交
最后我用用户D从服务器上下载一个最新的版本,里边的内容为
namespace SvnTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("A");
Console.WriteLine("A");
Console.WriteLine("B");
Console.WriteLine("C");
Console.ReadKey();
}
}
}
小结
需求:B在原项目上添加一句代码输出B,C在原项目上添加一句代码输出C
B从服务器把项目下载下来
C从服务器把项目下载下来
C添加了一句代码输出C,提交到了服务器,形成新的版本
B添加了一句代码输出B,这时候要提交的时候会发生冲突。因为这时候服务器的版本和B当初下载的版本不一样。
这时候就需要比较现在服务器内容和B的内容的不同之处,来解决冲突。
为什么有时候开发系统的时候要按层分配任务?
按道理来说,按功能分的耦合性要远远小于按层分配任务啊,减少沟通成本。
但按层分配任务的话会大大减少冲突,基本上你负责的代码只有你在提交,但也会增加层与层之间人员的沟通成本,因为层与层之间的耦合性比较大,为了解决这个问题,就需要前期要有完善详细的文档。