虽然我喜欢git history重写功能,但是如何确保历史记录不被重写.
我们不介意程序员在他们自己的机器上做什么,但我们需要确保不会将版本推送到更改历史记录的服务器.
即我们需要保证过去的特定版本真的是那个版本.因此,这将包括阻止某人通过并永久删除历史记录中的文件,或永久更改所有历史记录中的文件.
Von*_*onC 40
如果你可以运行:
git config --system receive.denyNonFastforwards true
Run Code Online (Sandbox Code Playgroud)
在服务器上,应该注意重写历史案例被推送到所述服务器.
但是,这适用于所有repo,而不适用于特定文件或文件组.
receive.denyNonFastForwards
如果您重新提交已经推送的提交然后尝试再次推送,或者尝试将提交推送到不包含远程分支当前指向的提交的远程分支,那么您将被拒绝.这通常是好政策; 但是对于rebase,您可以确定您知道自己在做什么,并且可以使用
-f
push命令强制更新远程分支.另一种方法是通过服务器端接收挂钩,我稍后会介绍.这种方法可以让您执行更复杂的操作,例如拒绝非快速转发到特定的用户子集.
作为ebneter(谁知道连贯存储库的重要性 - 请参阅关于SVN到Git迁移的答案[问题现已删除,仅限10K +用户])评论:
您可能还想添加,
receive.denyDeletes true
因为否则,有人可以删除分支,然后将其重写的分支推送为新分支,从而有效地重写历史记录.
git config
:
denyNonFastForwards策略的一个解决方法是让用户删除分支,然后使用新引用将其推回.在较新版本的Git(从1.6.1版开始)中,您可以设置
receive.denyDeletes
为true:
$ git config --system receive.denyDeletes true
这会通过全面推送来拒绝分支和标签删除 - 没有用户可以做到这一点.要删除远程分支,必须手动从服务器中删除ref文件.还有更有趣的方法可以通过ACL在每个用户的基础上执行此操作,您将在本章末尾学习.
归档时间: |
|
查看次数: |
5815 次 |
最近记录: |