【问题标题】:How to handle tracked generated files in git?如何在 git 中处理跟踪生成的文件?
【发布时间】:2016-03-29 12:35:34
【问题描述】:

背景:

我们在系统中生成了需要以最终状态提交的文件(例如,我们不能依赖源(未生成的)文件并即时生成生成的文件)。由于我们需要生成的文件,所以这些文件不能被 git 忽略。

问题:

这些文件在结帐和拉取命令时从 git 触发了很多 Your local changes to the following files would be overwritten by merge 错误。

当我提取或结帐时,我从不关心我的文件是什么,我只关心新文件。 (显然我非常关心生成文件的源文件。我很高兴源文件上的合并警告,它保存在不同的目录中。)

但是,当我提交时,我希望我的版本“获胜”并提交我生成的文件。

可能的解决方案:

现在我只是在拉取或结帐之前运行git checkout -- generated-files/ 以重置我生成的文件并跳过任何合并错误。它有效,但我经常忘记这样做,如果可能的话,我想自动化它。

我查看了预结账和预拉钩,但 git 没有提供它们:(

问题:

  • 有没有更好的方法来处理生成的文件?
  • 有没有办法强制git checkout -- generated-files/ 在拉取或结帐之前运行?
  • 在 git 中如何处理生成的文件?

【问题讨论】:

  • 如何做一个git stash,然后做一个拉动,然后是一个pop。它会保留您的更改。
  • 如果两个分支都对生成的文件造成了更改,那么保留其中一个分支都是不正确的。您应该在解决其他文件中的冲突后执行生成,然后将结果记录为合并版本

标签: git gulp githooks


【解决方案1】:

我的个人口头禅:如果文件可以生成,那么只有可以生成它的部分才属于源代码管理。否则,您最终会遇到很多现在遇到的噪音。

如果生成的文件是真正的、重复的、可重复的步骤并且是构建链的一部分,则可以安全地将它们所在的目录添加到您的 .gitignore 文件中(不要忘记 git rm --cached 文件夹所以他们不再被跟踪)。

如果生成的文件实际源代码的一部分,那么应该在团队成员和/或领导之间进行对话,并讨论如果这些文件是自动生成的,为什么这些文件正在修订中.可能有正当理由密切关注它们,也可能没有 - 至少值得一问。

我的建议是忽略任何生成的文件并将它们排除在 Git 之外。但是,你需要和你的队友谈谈,看看这是否是每个人都想遵守的约定。

【讨论】:

  • 曾经我必须提交生成的文件,因为生成它们需要我无法安装到所有目标系统的软件。我做到了,但在那里添加了原始文件的校验和。然后,如果有人在不更新生成的文件的情况下更改原始文件,则会导致构建错误
  • 回到现实世界,这并不总是可能的。有很多不好的原因。
  • generated-file -merge -diff 添加到.gitattributes 是否有帮助,因此您至少可以避免在这些文件中出现合并冲突?
猜你喜欢
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多