【问题标题】:Ignoring files from checkin with certain pattern of change忽略具有特定更改模式的签入文件
【发布时间】:2017-05-31 23:07:00
【问题描述】:

自从开始使用JetBrains Annotations 以来,为了我自己的利益,我已经用[CanBeNull][NotNull] 装饰了所有方法

例如下面一行:

public AccountController(IAccountService accountService)

将改为:

    public AccountController([CanBeNull] IAccountService accountService)

另一个例子是:

public Account CreateAccountEntity(Account accountEnttity)

将改为:

    [CanBeNull]
    public Account CreateAccountEntity([NotNull] Account accountEnttity)

如何绕过注解的未决更改,特别是“[CanBeNull]”,并让 TFS 完全忽略此更改?

【问题讨论】:

  • 当有人检查你的代码时——你希望发生什么?想要两个独立但并行的代码库背后的用例是什么?
  • 注解是专门给我的,帮助我写出更好的代码。我不想强迫别人使用它们
  • 就 TFS 而言并不完全符合您的要求,但此软件包将添加一个编译步骤,在构建期间删除 Jetbrains.Annotations。这样至少您不会依赖程序集,并且构建的 dll 不会有任何迹象表明您使用了注释:github.com/Fody/JetBrainsAnnotations
  • 我怀疑任何数量的赏金都可以帮助你找到这个问题的答案(会让你满意)。

标签: c# .net visual-studio visual-studio-2013 tfs


【解决方案1】:

您不能让 TFS “忽略”更改。这就是 TFS 的目的 - 跟踪所有更改。

我解释您的问题的方式是,您希望避免由于您的注释而产生的许多小但无害的签入的噪音。如果这是正确的,那么有一种方法可以使用 TFS 来最小化噪音:

  • 从您当前工作的位置创建一个分支(我们称之为“BranchA”),然后在该新分支(“BranchB”)中进行所有注释更改,并定期检查它们
  • 如果这需要一些时间(几天、几周)才能完成,那么请确保定期从 BranchA 合并到 BranchB
  • 当您认为您已完成从 BranchA 到 BranchB 的最终合并时。如果您使用了任何新方法,请确保对它们进行注释。如果您进行了更改,请重复此步骤。
  • 将所有更改从 BranchB 合并回 BranchA。这将具有将所有较小的更改聚合到 BranchA 中的单个大型签入/更改集的效果。如果您一直在进行从 BranchA 到 BranchB 的定期合并,即使您开始装饰工作已经过去了相当长的时间,这也应该没有问题。

【讨论】:

    【解决方案2】:

    简而言之,您不应该这样做,最接近的功能是tfignore,但这会忽略所有文件。

    另一方面,如果你真的想要这个,你可以使用 TFS API 创建一个工具,你必须在签入之前运行这个工具,它会验证你的解决方案中的所有待处理文件并寻找这个小的更改并排除文件,但这可能会导致在某些时候您可能会对排除的文件进行更改并且它不会被签入并导致问题的问题。您需要添加额外的代码来验证排除列表中应包含哪些文件。

    External tool used inside VS 在这里您可以看到如何将工具添加到工具菜单并向其发送参数。

    TFS API Example 此示例说明如何使用 TFS API。有一个'workspace.AddIgnoreFileExclusion()',但是我这里没有TFS,所以我稍后会验证如何忽略这些文件。

    根据我的经验,我不想检查这些更改的唯一原因是避免与团队发生冲突。 如果我在一些实践中看到很多价值,比如使用注释,我会与团队交谈,让他们接受使用注释的想法,这样每个人都会使用它,很快每个文件都会有注释和不会有任何冲突。

    【讨论】:

      【解决方案3】:

      您不能选择性地忽略文件、TFVC 或我遇到过的任何其他 SCM 中的更改。

      【讨论】:

        【解决方案4】:

        我同意其他答案,即此类功能不受 Microsoft 官方支持。

        但如果确实需要,您也可以覆盖a few ways 中的 TFVC。您可以编写自己的Visual Studio plug-inSource Control VSPackage

        【讨论】:

          【解决方案5】:

          如果您的主要目标是在 ReSharper 的帮助下编写更好的代码,告诉您是否应该期待 null 或产生其他警告,并且您不想打扰其他团队成员,我建议您考虑使用External Annotations 代替代码中的注解属性。

          然后您可以决定是要提交这些文件还是将它们保存在本地。即使你提交了你的代码,如果没有这些额外的属性,你的代码仍然是干净的。

          至少我会试一试。

          【讨论】:

            猜你喜欢
            • 2021-12-02
            • 1970-01-01
            • 1970-01-01
            • 2011-07-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-23
            • 2010-12-07
            • 2011-05-16
            相关资源
            最近更新 更多