保护git存储库中的文件

保护git存储库中的文件,git,repository,push,gitignore,Git,Repository,Push,Gitignore,我有一个中央存储库,其中包含我想要保护的文件子集,以防其他用户更改(通过推送)。如果我将这些文件添加到.gitignore,它们将不会被克隆 是否可以提供克隆所有文件的功能,但在克隆后将其中一些文件添加到客户端的.gitignore?我最初想到的是一个(请参阅),它将: 在“涂抹”步骤中,保存文件内容 在“清理”步骤中,将恢复文件内容 但这不是一个好的解决方案,因为这些脚本是关于文件内容转换的 您可以尝试在钩子中强制执行保存/恢复机制(请参见相同的SO答案),但请注意,它将是您的repo的

我有一个中央存储库,其中包含我想要保护的文件子集,以防其他用户更改(通过推送)。如果我将这些文件添加到
.gitignore
,它们将不会被克隆


是否可以提供克隆所有文件的功能,但在克隆后将其中一些文件添加到客户端的
.gitignore

我最初想到的是一个(请参阅),它将:

  • 在“涂抹”步骤中,保存文件内容
  • 在“清理”步骤中,将恢复文件内容

但这不是一个好的解决方案,因为这些脚本是关于文件内容转换的

您可以尝试在钩子中强制执行保存/恢复机制(请参见相同的SO答案),但请注意,它将是您的repo的本地机制(它将仅保护您的repo中的文件,不会推送钩子)

您还可以使用:

git update-index --assume-unchanged file

请参阅“”,这也是仅限本地保护。这将保护它们不受外部推送到您的回购(“导入”),但如果您发布它们(“导出”),则可以在客户端进行修改。

是否有特定的原因说明Git本身必须是解决此问题的答案

让这些文件成为只读文件,并按照策略规定这些文件不应被推送,怎么样

有时,技术解决方案不是最简单的方法


如果有人将更改推送到这些文件,这些更改总是可以还原的。

您可以将文件保存在存储库中,提交它们,然后将它们添加到.gitignore,然后从下一次提交中删除它们

您仍然可以在提交之前直接获取文件(可能会在文件上加上标记,以便更容易通过名称获取文件),这将保留文件的状态,同时不会意外地使其在存储库中容易编辑


要在提取克隆后访问这些文件,只需编写一个rake任务,为存储库的用户获取这些文件。

如果您需要此级别的访问限制,我觉得问题似乎出在其他地方

但是,如果你真的想实现这一点,考虑一下。它允许您定义相当详细的访问规则,可能足以满足您的需要

Gitolite文档:


您可以定义“虚拟引用”来控制文件级别的访问。更多信息:

是否将.gitignore提交到存储库?为什么要保护这些文件?gitignore是否添加了任何类型的每用户访问权限,或者您的更改是否意味着没有人可以更改这些文件?您想实现什么?是否可以简单地拒绝修改这些文件的推送?您还可以提供一个客户端钩子来拒绝错误的提交。谢谢。我知道git更新索引——假设没有更改,但它只应用于客户端。我也知道钩子,但它们不是从中心repo克隆的。@andrexus:我知道:过滤器驱动程序是唯一可推送的解决方案,但它需要弯曲污迹脚本以强制它知道相关文件的路径(保存/还原),而它只应该知道文件的内容。。。