【问题标题】:Git: Keep system generated/modifed files unaffected my commitsGit:保持系统生成/修改的文件不影响我的提交
【发布时间】:2019-03-12 21:02:28
【问题描述】:

我正在研究最近引入 git 的 C# dot net 项目。

在构建的时候会生成很多dll文件,修改很多被跟踪的js文件。

这些文件无论如何我都不需要提交和推送。 但是这些文件阻止我从分支中提取最新信息,切换到不同的分支等。 我想为这个问题找到一个简单的解决方案,以便

  1. 它应该允许我通过保持这些文件原样来切换分支。
  2. 如果要从远程对这些 js 文件应用任何更改,则在拉取新更改时应该应用它,但它仍然应该允许我切换分支并拉取新更改。
  3. 我应该能够提交我轻松更改的其他文件

请在 git 命令中建议执行此操作的步骤。

(我将那些生成的和系统修改的文件设为未跟踪,但在拉取新更改时它不会进行,因为要对我未跟踪的文件应用更改)

【问题讨论】:

  • 听起来你需要ignore 构建文件。一个好的开始是忽略 bin 和 obj 文件夹中的所有内容。
  • 试过.gitignore?
  • 实际上,在我看来,其中一些文件已经是您存储库的一部分,在这种情况下,只需将它们添加到.gitignore 不会有任何效果。首先,您可能必须git rm --cached 这些文件。但是,在删除这些文件之前,您应该首先考虑为什么这些文件是版本化的。

标签: git


【解决方案1】:

对于您不想放入源代码管理的文件,请使用.gitignore 文件。由于文件已经在 repo 中,您需要采取措施删除它们 - 至少通过向每个分支添加提交以删除它们(请参阅git rm --cached),或者可能通过编辑历史记录(例如使用git filter-branch)。

您可以在此处搜索每个主题并找到许多解释它们的答案。也可以参考git文档,比如

对于您希望能够从远程接收更改但又不希望被阻止更改分支的文件......无法以任何远程安全的方式完成。要么文件处于源代码控制之下,要么共享更改,要么应用有关管理未提交更改的所有规则;或者它不受源代码控制,并且在每个克隆中独立管理。

在最简单的情况下,您将拥有 3 种不同类型的文件: 由构建过程生成的文件,您从不编辑,也没有存储在源代码管理中;来自第三方来源的文件,例如依赖项,您也不会编辑或放入源代码控制,但在构建期间由依赖项管理软件拉入;和您编辑的文件,它们永远不会通过自动方式修改,并且是源代码控制中唯一的东西,因此您总是希望共享对这些文件的更改,并且永远不会有自动更改会阻止您进行拉取或分支切换。

如果您的流程要求您拥有不符合这些类别的文件,那么我要做的第一件事就是审查您的流程 - 因为源代码控制问题只是由单一文件引起的第一个(也是最轻微的)问题从 2 个或更多这些类别中进行更改的文件。

如果您必须让构建过程修改本地创作和源代码控制的文件,或者是带有依赖项的第 3 方文件,那么构建过程应该复制该文件并对副本进行操作。修改后的副本应为.gitignored,构建过程应保留原始副本。

如果您必须拥有将本地创作的更改混合到第三方文件中的文件,那么您应该为引入此类文件的依赖项的“您的版本”设置一个 repo(如果他们也使用 git源代码控制),带有供应商分支,以便您能够在需要时合并他们对文件所做的未来更改。同样,这是一个您可以搜索并找到许多现有答案的主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多