2017-04-25 54 views
0

我在一个git仓库的情况下,我想保持一个文件不变,除非开发人员明确知道他们在改变它时正在做什么。有什么方法可以在git中跟踪文件的不变状态吗?

我们有一个Drupal网站在回购中,我们不想更改自定义robots.txt。更新Drupal核心包括解压tarball。这意味着我们的定制robots.txt将替换为Drupal robots.txt的库存。由于Drupal的核心更新被大量接受(他们主要是安全更新),可能有些不小心的开发人员会不小心覆盖我们的robots.txt

这不是你在合并请求中可以找到的东西,因为在核心更新中有几十个文件发生了变化,而且你不打算审查所有这些文件。我发布了another question,但回答涉及仅限本地的回购/环境更改,并且不会在回购中进行跟踪。 我已经做了一些调查研究,这是我到目前为止已经发现:

  • skip-worktree仅仅是本地属性;没有跟踪。
  • assume-unchanged是一个本地财产只;没有跟踪。
  • .gitignore - 我试图解开文件,忽略它,然后--force添加它。当我做出改变时,git仍然看到它们。这不是一个解决方案。
  • 挂钩未在回购中追踪。您可以配置它们以进行跟踪,但需要设置本地环境才能开始工作,如果我们要这样做,为什么不设置skip-worktree或其他设置。

目前没有办法阻止文件的更改从在repo本身内执行(在显式/额外步骤之外,如交换机之外),在执行额外的本地配置之外?

我发布这个问题的原因是因为我试图给我的经理一个明确的“不,我们不能跟踪回购中的这些信息,我们将不得不在开发人员的环境中做额外的配置。

我在git-bash中使用git 2.12.0.windows.1

+1

你不能要求git忽略一个已经被跟踪的文件,这样它在所有情况下都是独立的。任何你没有适当的部署脚本来处理这些事情的原因? –

回答

0

答案是

没有办法阻止文件被正常更改,并告诉git跟踪该状态。

所有解决方案都涉及本地环境设置或远程回购设置。

2

如果您正在托管自己的回购(而不是使用github),则可以在中央回购库上编写一个pre-receive挂钩来检测此问题。它会检查推送是否引入了修改守护文件并拒绝它们的提交。

这有点欠佳,因为直到开发人员在本地回购中完成工作,它才检测到情况,它需要一些深奥的git-fu(如rebase -icommit --amend)来修复本地提交在重新推送之前。

+0

我们不托管我们自己的回购:/我们的托管提供商还提供存储库服务器。 – user151841

+0

从纯技术角度讲,可以肯定地说这个解决方案也不在追踪中追踪,因为它只驻留在服务器中?那么,如果回购商被推到一个新的遥控器上,那么'预先接受'的挂钩就不会跟着它了? – user151841

+0

@ user151841正确,这种方法*在仓库中不被跟踪,它只是托管“中央”仓库的服务器配置的一部分。如果您的工作流程没有一台中央服务器,则它是非启动器。 –

相关问题