【问题标题】:How to Make a git Repository 'pull only'如何使 git 存储库“仅拉取”
【发布时间】:2013-07-17 16:57:52
【问题描述】:

我正在为多个开发人员在共享服务器上设置开发环境。我将拥有一个存储库,其中包含生产中使用的所有代码,以及用于团队不同成员开发的许多其他代码。我想要的是生产回购是“仅拉动”。用户可以随时从中提取并在本地获取生产更改,但推送需要由生产管理员处理,或者至少需要密码。比如:

[user@machine /devroot/myrepo]$ git pull $PRODUCTION master
From <location>
*branch             master       ->  FETCH_HEAD
Already up-to-date 

[user@machine /devroot/myrepo]$ git push $PRODUCTION master
error: user `user` is not authorized for this action

或者

[user@machine /devroot/myrepo]$ git push $PRODUCTION master
HEAD @ `$PRODUCTION`-Please enter password:

我相信我可以通过文件权限来做到这一点,但这并不是一个优雅的解决方案。 git 里面有这样的东西吗?

【问题讨论】:

    标签: git networking repository


    【解决方案1】:

    如果您想要复杂的存储库访问控制,您可能需要查看Gerrit。它的主要重点是代码审查(这也完全值得拥有!),但它也将访问控制作为副作用。

    否则,如果您只是想要一些非常简单的东西,文件权限是在单台机器上处理此问题的绝佳方式。只要用户不能写入包含存储库的目录中的文件,他们就不能推送到它。我认为这没有任何不雅之处!

    【讨论】:

      【解决方案2】:

      更“同意成年人”的解决方案是否可行?

      例如,在 git 中,您只设置了远程获取,而将远程推送留给了一个虚拟的不存在的 URL,这样用户就不会意外地git push 到它。

      编辑:这类似于in this question 接受的内容。

      【讨论】:

        【解决方案3】:

        您可以使用gitolitegitosis。然后您可以创建可以拉取、推送每个分支、可以创建标签等的用户列表。

        我比 gitosis 更了解 gitolite。配置只是一个 git 存储库,文件语法简单。

        【讨论】:

          【解决方案4】:

          我同意@duskwuff ..看看这个branching model。这将帮助您实现仅拉动没有 Gerrit

          【讨论】:

            【解决方案5】:

            git 本身不包含任何权限管理。

            您可以在管理您的 git 存储库的软件中实现这一更高级别(如果您采用某种集中的方法,但我想大多数公司都希望这样做)。所以 gitolite (http://gitolite.com/gitolite/) 或 gitlab 可以做到这一点 (http://gitlab.org/)。

            【讨论】:

              【解决方案6】:

              一个简单的解决方案是用户配置文件 /etc/profile.d/git_restrictions.sh :

              function git() {
                  if [[ "$@" == 'pull' ]] || [[ "$@" == 'status' ]] || [[ "$@" == 'help' ]]; then
                      echo "git $@"
                      command git $@
                  else
                      echo " Allowed GIT commands on this server are:"
                      echo " - git pull"
                      echo " - git help"
                      echo " - git status"
                  fi
              }
              

              然后,当您运行除上面列出的任何其他内容时,会发生这种情况:

               Allowed GIT commands on this server are:
               - git pull
               - git help
               - git status
              

              【讨论】:

                猜你喜欢
                • 2013-03-27
                • 2011-12-15
                • 2012-10-23
                • 1970-01-01
                • 2011-02-14
                • 1970-01-01
                • 2019-11-19
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多