我有一个中央代码库,其中包含一些我希望保护不受其他用户更改(通过push)的文件子集。如果将这些文件添加到.gitignore
中,则它们将无法被克隆。
是否可以在克隆所有文件后,在客户端上将其中一些文件添加到.gitignore
中?
我有一个中央代码库,其中包含一些我希望保护不受其他用户更改(通过push)的文件子集。如果将这些文件添加到.gitignore
中,则它们将无法被克隆。
是否可以在克隆所有文件后,在客户端上将其中一些文件添加到.gitignore
中?
如果你需要这种级别的访问限制,我认为问题可能出在其他地方。
尽管如此,如果你确实想要实现这个功能,请考虑使用Gitolite。它允许你定义相当详细的访问规则,可能已经足够满足你的需求。
Gitolite文档:http://gitolite.com/gitolite/master-toc.html
您可以定义“虚拟引用”来控制文件级别的访问权限。更多信息请参见:http://gitolite.com/gitolite/vref.html
我最初考虑了一个过滤驱动程序(参见专业书),它会做以下几点:
但这不是一个好的解决方案,因为这些脚本涉及无状态文件内容转换(请参见this SO answer)。
您可以尝试在钩子中强制执行保存/恢复机制(请参见相同的SO答案),但请注意它将局限于您的存储库(它仅保护您存储库中的文件,而不会推送钩子)
您也可以使用:
git update-index --assume-unchanged file
请参见 "使用git,在命令行中临时排除已更改的跟踪文件以进行提交", 这只是一种本地保护方法。它可以防止外部推送到您的存储库("导入"),但如果您发布它们("导出"),则可以在客户端上进行修改。
您可以将文件放入存储库中,提交它们,然后将它们添加到.gitignore中,并从下一次提交中删除它们。
您仍然可以在先前的提交之前直接获取文件(可能使用某些标记进行标记,以便更轻松地按名称获取),这将保留文件的状态,同时不会使其在存储库中意外编辑。
要在拉取克隆后访问这些文件,只需编写一个Rake任务,为您的存储库用户获取它们即可。
Git必须成为解决方案的具体原因吗?
将文件设置为只读,规定这些文件不应该被推送作为 策略,这样如何?
有时候技术解决方案并不是最简单的方法。
如果有人确实推送了更改到这些文件,这些更改总是可以被还原。