我有一个中央存储库,其中包含我希望防止其他用户更改(通过推送)的文件子集。如果我将这些文件添加到.gitignore
,则不会克隆它们。
是否有可能克隆所有文件,但在克隆后将其中一些文件添加到客户端的.gitignore
?
答案 0 :(得分:1)
我最初考虑的是filter driver(请参阅Pro Book),其中包含:
但这不是一个好的解决方案,因为这些脚本是关于无状态文件内容转换(请参阅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必须解决这个问题的具体原因吗?
如何将文件设为只读,并将策略命令为不应该推送这些文件?
有时,技术解决方案并不是最简单的方法。
如果有人 推送对这些文件的更改,则可以随时恢复这些更改。