保护git存储库中的文件

时间:2010-07-29 06:49:41

标签: git repository push gitignore

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

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

4 个答案:

答案 0 :(得分:1)

我最初考虑的是filter driver(请参阅Pro Book),其中包含:

  • 在涂抹步骤中保存文件内容
  • 清理步骤中的
  • 将恢复您的文件内容。

alt text

但这不是一个好的解决方案,因为这些脚本是关于无状态文件内容转换(请参阅this SO answer)。

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

您也可以使用:

git update-index --assume-unchanged file

请参阅“With git, temporary exclude a changed tracked file from commit in command line”,同样仅限本地保护。这将保护他们免受外部推送到您的仓库(“导入”),但如果您发布它们(“导出”),则可以在客户端修改。

答案 1 :(得分:1)

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

你仍然可以在提交之前直接获取文件(可能用某些东西标记它,这样可以更容易地通过名称获取)这将保留文件的状态,同时不会在存储库中轻易编辑它

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

答案 2 :(得分:1)

对我来说,如果您需要这种级别的访问限制,问题就在于其他地方。

尽管如此,如果你确实想要实现这一点,请考虑Gitolite。它允许您定义相当详细的访问规则,并且应该足以满足您的需求。

Gitolite文档:http://gitolite.com/gitolite/master-toc.html

您可以定义“虚拟引用”以控制文件级别的访问。更多相关内容:http://gitolite.com/gitolite/vref.html

答案 3 :(得分:0)

Git必须解决这个问题的具体原因吗?

如何将文件设为只读,并将策略命令为不应该推送这些文件?

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

如果有人 推送对这些文件的更改,则可以随时恢复这些更改。