Git推/拉 - 由子域限制

时间:2015-12-21 21:09:56

标签: git

假设我从一个git主存储库服务器开始。

称之为@Column(name = "CREATED_ON", insertable = false, updatable = false) @Temporal(TemporalType.TIMESTAMP) private Date createdOn;

我希望在git.prod.example.com工作的开发人员能够dev.example.com到这个主服务器。

但是,pushtest.example.comtraining.example.com中的主机可能只会执行prod.example.com个请求。

也就是说,他们可以从主存储库中获取代码,但他们不能更改主存储库中的代码。

我能这样做吗?如果是这样,怎么样?

每个人都必须在pull拥有帐户,对吗?

(至少在那个子域中。)

git是否足够亮,可以分析git.prod.example.compush请求的来源位置,并拒绝基于子域的黑名单中的代码修改?

如果在某处有详细记录,链接指针就会很棒。到目前为止,我的google-fu已经失败了。

2 个答案:

答案 0 :(得分:0)

  

我能这样做吗?如果是这样,怎么样?

  • 你可以使用git hooks来做这件事 Gt hook可以"捕获"在服务器上发出的任何请求,然后你可以阻止它。

    只需返回退出代码0或1即可允许或阻止提交。 检查存储库名称的钩子,然后决定是允许还是阻止它。

  • Here就是如何做的一个例子。

  

每个人都必须在git.prod.example.com上拥有帐户,对吧?

  • 将此存储库设置为公共存储库(http),以便任何人都可以克隆它。
  

git是否足够亮,可以分析pushpull请求的来源位置,并拒绝基于子域的黑名单中的代码修改?

  • 它不是黑名单。你编写自己的脚本来检查你需要做什么。

如果您正在使用像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-updategitgit.dev.example.com的{​​{1}}用户 。然后,PROD服务器可以从所有环境中读取,但除了push用户之外,没有人能够更新那里的代码。