我在Windows Server 2008上托管一个带有Windows Git和OpenSSH的裸存储库。 出于法律原因,我希望特定用户无法访问某些文件,但所有其他用户仍可访问。换句话说,我希望特定用户忽略某些"受限"文件(不可拉取(。
假设我们有两个用户(管理员和来宾(和一个包含 2 个文件的 Git 存储库:(a.txt 和 b.txt(。
假设"b.txt"是来宾不应有权访问的受限文件。
git clone guest@ipaddress:C:/path/to/repository.git
或git pull guest@ipaddress:C:/path/to/repository.git
应该克隆或拉取"A.txt">
git clone administrator@ipaddress:C:/path/to/repository.git
或git pull administrator@ipaddress:C:/path/to/repository.git
应该克隆或拉取两个文件。
有没有办法用.gitignore 或 .git/info/exclude 来实现这个结果?
没有办法用.gitignore 或 .git/info/exclude 来实现这个结果?
不。
Git 是关于提交、拉取(真的是git fetch
(和推送操作传输提交。 提交包含文件 - 提交部分由数据(快照(和部分元数据(有关快照的信息(组成 - 您要么有提交,在这种情况下,您拥有所有文件,要么没有提交,在这种情况下,您没有所有文件。
出于任何原因(法律、公司或其他原因(需要限制的文件要么根本不在 Git 中,要么以某种预先安全的方式(例如,加密(存储。 一般来说,"根本不在 Git 中"的方法往往效果最好。 请考虑在 Git 中存储实际文件的受限网站的 URL。
无法将用户访问限制为仅访问存储库的某些部分。 Gitignore 文件旨在防止人们意外签入他们不想要的代码,而不是限制对存储库中已有代码的访问。
即使是限制对 ref 访问的解决方案,聪明的攻击者也可以绕过,让他们从存储库中窃取数据。 您应该假设对存储库具有读取访问权限的任何人都可以读取该存储库中的所有对象;如果您需要限制某些用户对某些数据的访问,则需要对其进行加密或将其保存在不同的存储库中。