Svn 使用Git处理subversion:忽略对跟踪文件的修改

Svn 使用Git处理subversion:忽略对跟踪文件的修改,svn,git,git-svn,gitignore,Svn,Git,Git Svn,Gitignore,我目前正在使用subversion存储库,但我正在使用git在我的机器上本地工作。这使工作变得容易得多,但它也使subversion回购协议中的一些不良行为变得非常明显,这给我带来了问题 在拉下代码之后,有一个稍微复杂的本地构建过程,它创建(不幸的是修改)许多文件。显然,这些更改并不意味着要提交回存储库。不幸的是,构建过程实际上正在修改一些跟踪文件(是的,很可能是因为有人在某个时候错误地将这些构建工件提交到subversion存储库)。因为这些都是修改,所以将它们添加到我的忽略文件对我没有任何帮

我目前正在使用subversion存储库,但我正在使用git在我的机器上本地工作。这使工作变得容易得多,但它也使subversion回购协议中的一些不良行为变得非常明显,这给我带来了问题

在拉下代码之后,有一个稍微复杂的本地构建过程,它创建(不幸的是修改)许多文件。显然,这些更改并不意味着要提交回存储库。不幸的是,构建过程实际上正在修改一些跟踪文件(是的,很可能是因为有人在某个时候错误地将这些构建工件提交到subversion存储库)。因为这些都是修改,所以将它们添加到我的忽略文件对我没有任何帮助

我可以避免将这些更改检查回原处,我只是不准备或提交它们,但有未老化的本地更改意味着我无法在不首先清理它们的情况下重新设置基址


我想知道的是,是否有任何方法可以忽略对一组跟踪文件的未来更改?或者,是否有其他方法来处理我遇到的问题,或者我只需要告诉那些签入这些文件的人来清理它们?

除非发生了严重的政治脑损伤,否则从源代码管理中删除工件是正确的步骤。(或者更确切地说,“最有利”的一步,它总是正确的一步。)

我不知道有什么方法可以告诉git忽略对跟踪文件的更改。

因为,清理这些文件(取消跟踪)是明智之举

但是,如果必须忽略跟踪的文件(这不是Git在忽略文件时采用的本机方式:Git仅忽略非跟踪的文件),则可以设置一个复制要忽略的文件内容并在提交时恢复的过程

我最初相信a,就是a可以做到:

,其中:

  • 涂抹过程将复制这些文件(更新工作树时)
  • 在构建过程中会进行一些修改
  • 清洁步骤(提交期间)将使用步骤1中创建的副本擦除文件内容
但是,正如所述,这意味着通过添加有状态上下文(即被涂抹/清除的文件的完整路径名)滥用这种无状态的文件内容转换。
这是J.C.Hamano明确禁止的:

虽然我最初考虑用路径名插入“
%p
”,但我最终决定不使用它,以阻止人们滥用过滤器进行状态转换,该转换会根据时间、路径名、提交、分支等更改结果

甚至在当时,关于all机制:

我不得不说,我显然不是一个游戏迷,但差别是非常干净的

它们真的有用吗?我不知道。我有点担心这对该功能的任何实际用户意味着什么,但我不得不承认,一个干净的实现让我着迷

我怀疑这会让我们不必抱怨,但我也怀疑,当我们支持这一点,人们想要不再干净的“扩展语义”时,人们最终会真的用这样的东西把自己搞砸,然后指责我们,并造成巨大的痛苦

但我不确定这个论点到底有多有效。我确实相信“给他们绳子”的哲学。我想你可能会用这件事狠狠地折磨自己,但是嘿,任何这样做的人都只能怪他自己


因此,添加某种保存/恢复机制(并有效地忽略对Git中一组跟踪文件的任何更改)的正确位置应该是

  • 签出后
    :在更新工作树后运行git签出时调用。在那里,您可以运行一个脚本,收集要忽略的所有文件,并将它们保存到某个位置

  • 预提交
    :在获取建议的提交日志消息并进行提交之前,您可以运行第二个脚本来恢复这些文件的内容


我同意,我只是想要一个备份计划,以防这种情况不会发生。我必须使用存储库,但文件不是我的,我正在使用git来使用它。我可以看到我将如何复制文件,尽管我不确定如何在clean筛选器中引用文件名。有变量吗?@Chris:读过之后,我不太确定这个过滤器驱动程序是不是正确的工具,因为J.C.Hamano希望它是无状态的。是的,在我看来也是这样。我想一个足够复杂的blob解析器可能会起作用,但那太麻烦了。我只需要让他们把它清理干净;好极了!!非常好的书面和研究的答案。