假设我从一个git主存储库服务器开始。
称之为@Column(name = "CREATED_ON", insertable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date createdOn;
。
我希望在git.prod.example.com
工作的开发人员能够dev.example.com
到这个主服务器。
但是,push
,test.example.com
或training.example.com
中的主机可能只会执行prod.example.com
个请求。
也就是说,他们可以从主存储库中获取代码,但他们不能更改主存储库中的代码。
我能这样做吗?如果是这样,怎么样?
每个人都必须在pull
拥有帐户,对吗?
(至少在那个子域中。)
git是否足够亮,可以分析git.prod.example.com
和push
请求的来源位置,并拒绝基于子域的黑名单中的代码修改?
如果在某处有详细记录,链接指针就会很棒。到目前为止,我的google-fu已经失败了。
答案 0 :(得分:0)
我能这样做吗?如果是这样,怎么样?
你可以使用git hooks来做这件事 Gt hook可以"捕获"在服务器上发出的任何请求,然后你可以阻止它。
只需返回退出代码0或1即可允许或阻止提交。 检查存储库名称的钩子,然后决定是允许还是阻止它。
Here就是如何做的一个例子。
每个人都必须在git.prod.example.com上拥有帐户,对吧?
git是否足够亮,可以分析
push
和pull
请求的来源位置,并拒绝基于子域的黑名单中的代码修改?
如果您正在使用像bitbucket / github等中央服务器,其中一些内置了这个功能。它会因服务器而异,所有用户管理都可以强制执行权限。
取自附加链接的示例代码:
#!/斌/庆典
protected_branch='master'
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
if [ $protected_branch = $current_branch ]
then
read -p "You're about to push master, is that what you intended? [y|n] " -n 1 -r < /dev/tty
echo
if echo $REPLY | grep -E '^[Yy]$' > /dev/null
then
exit 0 # push will execute
fi
exit 1 # push will not execute
else
exit 0 # push will execute
fi
答案 1 :(得分:0)
我需要弄清楚细节,但这可能是我最接近处理我的访问控制需求的解决方案:
开发人员Convert.ToInt32
只能访问<{1}} ,其中包含push
存储库git.dev.example.com
。使开发人员只是DEV中适当组的一部分。
然后,在init
中包含一个命令,该命令仅允许--shared=group
hooks/post-update
到git
到git.dev.example.com
的{{1}}用户 。然后,PROD服务器可以从所有环境中读取,但除了push
用户之外,没有人能够更新那里的代码。