3

我在开发时尝试使用 SVN 补丁文件从 Web API 中删除身份验证。删除身份验证的补丁文件工作正常,如下所示:

Index: WebApplication.Api/Global.asax.cs
===================================================================
--- WebApplication.Api/Global.asax.cs   (revision 18939)
+++ WebApplication.Api/Global.asax.cs   (working copy)
@@ -115,7 +115,7 @@
             _dependencyRegister.AddRegistration<WebApplication.Application.Aspects.AuthorisationAspect>();

             // WebApplication.Application.CurrentUser
-            _dependencyRegister.AddRegistration<WebApplication.Application.CurrentUser.ICurrentUserService, WebApplication.Application.CurrentUser.CurrentUserService>();
+            _dependencyRegister.AddRegistration<WebApplication.Application.CurrentUser.ICurrentUserService, WebApplication.Api.DummyServices.CurrentUserService>();

             // WebApplication.Application.Interface.Manager
             _dependencyRegister.AddRegistration<WebApplication.Application.Interface.Manager.IAspNetMembershipManager, WebApplication.Application.Manager.AspNetMembershipManager>();
Index: WebApplication.Api/Web.config
===================================================================
--- WebApplication.Api/Web.config   (revision 18939)
+++ WebApplication.Api/Web.config   (working copy)
@@ -64,14 +64,12 @@
     </sessionState>
       <httpModules>
           <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
-          <add name="ProtectedResourceModule" type="WebApplication.Api.Modules.ProtectionModule"/>
       </httpModules>
   </system.web>
   <system.webServer>
     <validation validateIntegratedModeConfiguration="false" />
       <modules runAllManagedModulesForAllRequests="true">
           <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
-          <add name="ProtectedResourceModule" type="WebApplication.Api.Modules.ProtectionModule"/>
       </modules>
       <httpErrors existingResponse="PassThrough" />
   </system.webServer>

如您所见,它更改了接口的 DI 实现并从 XML 配置文件中删除了两个节点。

由于没有办法(我发现)反向应用补丁(我在 Visual Studio 中使用 VisualSVN 来应用补丁),我创建了一个基于原始补丁文件的“反向补丁”:

Index: WebApplication.Api/Global.asax.cs
===================================================================
--- WebApplication.Api/Global.asax.cs   (revision 18939)
+++ WebApplication.Api/Global.asax.cs   (working copy)
@@ -115,7 +115,7 @@
             _dependencyRegister.AddRegistration<WebApplication.Application.Aspects.AuthorisationAspect>();

             // WebApplication.Application.CurrentUser
+            _dependencyRegister.AddRegistration<WebApplication.Application.CurrentUser.ICurrentUserService, WebApplication.Application.CurrentUser.CurrentUserService>();
-            _dependencyRegister.AddRegistration<WebApplication.Application.CurrentUser.ICurrentUserService, WebApplication.Api.DummyServices.CurrentUserService>();

             // WebApplication.Application.Interface.Manager
             _dependencyRegister.AddRegistration<WebApplication.Application.Interface.Manager.IAspNetMembershipManager, WebApplication.Application.Manager.AspNetMembershipManager>();
Index: WebApplication.Api/Web.config
===================================================================
--- WebApplication.Api/Web.config   (revision 18939)
+++ WebApplication.Api/Web.config   (working copy)
@@ -64,14 +64,12 @@
     </sessionState>
       <httpModules>
           <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
+          <add name="ProtectedResourceModule" type="WebApplication.Api.Modules.ProtectionModule"/>
       </httpModules>
   </system.web>
   <system.webServer>
     <validation validateIntegratedModeConfiguration="false" />
       <modules runAllManagedModulesForAllRequests="true">
           <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
+          <add name="ProtectedResourceModule" type="WebApplication.Api.Modules.ProtectionModule"/>
       </modules>
       <httpErrors existingResponse="PassThrough" />
   </system.webServer>

简单地说,我所做的就是将 + 符号更改为 - ,反之亦然。这会创建一个对我有意义的反向补丁文件。

反向补丁工作正常,除了 XML 配置文件中的最终“添加行”以及添加行,还删除了以下几行,导致 XML 格式错误。

谁能告诉这是为什么?我需要用魔法做点什么@@ -64,14 +64,12 @@吗?

4

3 回答 3

4

似乎最简单的方法是通过命令行。我找不到任何方法通过 Visual SVN 或 Tortoise 的 UI 反向应用补丁文件,而且我不知道为什么手动修改补丁文件不起作用。

在命令行中,导航到工作副本目录并输入以下命令以应用补丁文件:

svn patch [path and name of patch file]

要反向应用它:

svn patch --reverse-diff [path and name of patch file]
于 2012-05-28T09:16:21.667 回答
4

我只是好奇,我认为这应该可以在互联网上找到。所以这就是我所做的:

似乎这将处理您的正常补丁并执行您想做的事情。所以应该不需要手动手动反转补丁

另一种方法可能是从正确的开始diff command,有一个选项可以通过交换修订的顺序来创建反向补丁。

于 2012-05-18T17:43:02.750 回答
0

交换14and12也可以吗?(更改@@ -64,14 +64,12 @@@@ -64,12 +64,14

于 2016-04-05T15:06:11.103 回答