如果您有一个主仓库(按惯例),并且人们使用他们自己的本地仓库,并且有人滥用“不要回到过去并重新设置您的更改,而不是合并分支”或其他(常规)规则git日志不会向您显示远程仓库的完整历史记录-只是与仓库当前状态有关的历史记录,对吗?有什么方法可以查看对远程存储库所做的每个最新更改,以查看谁没有遵守规则?我感谢提交已经消失并且无法返回(因此出现问题),但是仅包含数据,SHA等的文本文件会很方便。是否存在?可以通过某种方式进行配置吗?
要清楚;我有兴趣查看远程回购所执行的所有操作以跟踪其恶意或未经良好培训的使用。
答案 0 :(得分:1)
当您说“ master
(按惯例)回购”时,我想您的意思是(1)该项目只有一个“真相来源”存储库(通常称为origin
,不是master
); (2)用户/开发人员克隆origin
,在其克隆中工作,然后将更改推送到origin
。
在这种用法中,与origin
的交互可以归结为很少-实际上,对origin
的写操作应该总是push
es。 rebase
之类的东西并不是真的发生在origin
上;只需对其进行更新即可查看这些操作的结果。
如果您希望围绕中央存储库进行任何级别的安全性或审核,那么这是设置它的正确方法。 但是,意味着您正在谈论的许多事情,您无法直接“看到”。您将不知道(坦率地说,不在乎)使用了什么命令来使用户的本地存储库进入特定状态。您只知道要推送的内容-任何集中执行的规则都需要根据推送的内容进行描述。
这意味着有用的工具是origin
上的配置选项,以及pre-receive
上的update
钩子(可能还有origin
钩子)(除非您位于提供不同安全模型的托管环境。
您可以做的一件事是全局拒绝接受历史记录重写。然后,如果有人在推送分支后重新建立分支,origin
根本不会接受推送。 (用户仍然可以在分支上工作,然后在他们第一次共享该分支之前对其重新设置基础。您对此无能为力,也没有充分的理由在意。)在origin
上设置receive.denyNonFastForwards
至true
。
您几乎可以使用钩子强制执行任何规则;如果您可以制定出必要的脚本。也许您想强制执行提交拓扑规则(例如,“在master
中没有非合并” la gitflow),或者需要签名的提交(请参见下文),等等。
如果规则是特定于用户的,或者如果您要记录潜在的违规而不是(或除了)阻止它们,则需要考虑身份验证。 git
真正没有解决如何确保对存储库的访问-以及验证谁正在访问存储库。有几种用于托管git repos的服务器环境-例如github,gitlab,TFS。这些类型的服务器提供安全选项。您还可以设置存储库,以使其唯一的途径是通过经过身份验证的方式(经过正确身份验证的http或ssl)。
仅在签名被签名(或仅从签名标记可访问)时才接受提交,也是一种选项,它告诉您有关谁做了什么的事情,但可能不是您想要的要知道。 (仅仅是因为我编写并签署了一个提交,对于谁移动了一个引用以指向该提交并尝试将结果推送没有任何意义。)
如果您可以制定身份验证,但无法通过脚本编写出对每个规则的检测-或不确定是否需要这些规则,但是在看到规则时会知道“不良行为”-然后只需登录带有推送参考列表的经过身份验证的身份可能会告诉您可能需要了解的所有信息,以便在“事后”解决问题。
答案 1 :(得分:0)
听起来像您需要的是设置审核跟踪。 git中似乎没有对此的内置支持,但是您可以借助几个钩子来密切关注仓库。
也许您可以使用git-receive-pack,中的其中一个钩子,例如pre-receive,post-receive,update,post-update。
或者pre-auto-gc,如果您要捕获其他瞬态,则该状态将一直保留到@JonathanWakely写道垃圾回收。