我有一个中央存储库,其中包含我想要防止被其他用户更改(通过推送)的文件子集。如果我将这些文件添加到.gitignore
,它们将不会被克隆。
是否可以提供克隆所有文件的能力,但在克隆后将其中一些文件添加到.gitignore
客户端?
我有一个中央存储库,其中包含我想要防止被其他用户更改(通过推送)的文件子集。如果我将这些文件添加到.gitignore
,它们将不会被克隆。
是否可以提供克隆所有文件的能力,但在克隆后将其中一些文件添加到.gitignore
客户端?
我最初想到了一个过滤器驱动程序(参见Pro Book),它将:
但这不是一个好的解决方案,因为这些脚本是关于无状态文件内容转换的(参见这个 SO answer)。
您可以尝试在挂钩中强制执行保存/恢复机制(请参阅相同的 SO 答案),但请注意,它将在您的仓库中本地(它只会保护您的仓库中的文件,不会推送挂钩)
您还可以使用:
git update-index --assume-unchanged file
请参阅“使用 git,在命令行中从提交中临时排除已更改的跟踪文件”,同样仅是本地保护。这将保护它们免受外部推送到您的存储库(“导入”),但如果您发布它们(“导出”),则可以在客户端进行修改。
您可以将文件放在存储库中,提交它们,然后将它们添加到 .gitignore 中,然后从下一次提交中删除它们。
您仍然可以在提交之前直接获取文件(也许用一些东西标记它,以便可以更容易地通过名称获取它),这将保留文件的状态,同时不会让它在存储库中被意外地轻松编辑。
要在拉取克隆后访问这些文件,只需编写一个 rake 任务,为您的存储库的用户获取它们。
如果您需要这种级别的访问限制,在我看来问题出在其他地方。
尽管如此,如果您确实想实现这一点,请考虑Gitolite。它允许您定义相当详细的访问规则,并且应该足以满足您的需要。
Gitolite 文档:http ://gitolite.com/gitolite/master-toc.html
您可以定义“虚拟引用”来控制文件级别的访问。更多信息:http: //gitolite.com/gitolite/vref.html
Is there a specific reason why Git must itself be the answer to this?
How about making the files read-only, and dictating as policy that these files shouldn't be pushed?
Sometimes a technological solution is not the simplest way.
If somebody does push changes to these files, these changes can always be reverted.