【问题标题】:How to create a git clone for viewing only如何创建一个仅供查看的 git clone
【发布时间】:2011-06-22 22:38:46
【问题描述】:

我们使用 git 作为小型开发团队的 VCS。我将我们服务器上的主存储库作为一个裸 git 存储库。

管理层和未参与项目的人员需要能够在不了解 git 的情况下查看代码和文档,因此我还在我们的服务器上保留了一个克隆以供浏览。为了使克隆保持最新,我安装了一个钩子,每当有人提交到裸存储库时,它都会更新克隆的主分支。

问题来了:一些笨蛋总是进入浏览克隆并开始修改代码,导致主分支推送操作失败。我想找出一种方法来对这个克隆强制执行只读策略,或者找出另一种保持最新状态的方法。

【问题讨论】:

    标签: git git-branch git-bare


    【解决方案1】:

    处理这些情况的最佳方法是与有问题的傻瓜好好谈谈。

    否则最简单的方法是简单地使用操作系统的权限系统,这样文件对所有人都是只读的,除了从裸存储库更新它的脚本。

    您还可以在从裸仓库拉取之前重置 --hard 和 git clean -f。

    (哎呀,抱歉,剧本把 2 周的工作浪费掉了吗???)

    【讨论】:

    • 嗯,不错的想法,但并不完全存在 - 当开发人员推送到 repo 时,钩子脚本在该开发人员用户 ID 下运行,因此我必须禁止所有开发人员进行克隆。所以我可能愿意使用 git reset --hard,但我不知道在克隆中触发它的方法。现在更新是由 repo 中的提交触发的,钩子是一个推送命令。此外,根据错误消息,“无法使用路径进行硬重置”
    • 糟糕,我不知道开发人员推送到了裸 repo usign 文件访问权限。我假设 ssh+keyfile 或 git-daemon 访问。如果您不想走那条路线并且您在 Unix/MacOSX 上,您可以添加一个拉脚本,并配置 /etc/sudoers 以允许该脚本由开发人员使用 sudo 作为“仅查看”运行 -用户。钩子可以使用 'sudo /usr/local/bin/pull_new_version' 调用它
    • 我有一些感兴趣的例子,
    • 其实你的原创想法 99% 在那里。以下是方法(如果您认为我做错了什么,请随时发表评论)。我保留了一个名为 share 的分支以避开 master,并将克隆留在该分支上。更新挂钩脚本现在是:cd /path/to/my/clone || exit unset GIT_DIR /usr/bin/git reset --hard /usr/bin/git checkout share /usr/bin/git pull - 抱歉不知道如何插入换行符
    【解决方案2】:

    为什么不简单地通过 gitweb、cgit 或其他一些基于 HTTP 的存储库浏览界面提供访问权限?

    https://git.wiki.kernel.org/index.php/Gitweb

    【讨论】:

    • 嗯,我们是一家 Linux 命令行界面类型的公司,甚至是管理层。这可能是最后的选择。
    【解决方案3】:

    没有办法让 git clone 只读。有两种解决方法可以达到类似的效果。

    一种方法是更改​​文件和文件夹的权限,使它们为只读。

    我能想到的另一种方法是在服务器上使用权限系统。
    您可以使用gitolite 允许使用存储库对特定用户/组进行读写或只读访问。
    这里有其他git管理软件的列表:https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Access_control_.2F_Project_hosting

    【讨论】:

    • 我认为权限不起作用。我处于 catch-22 中 - 我不希望开发人员访问克隆,但我需要让开发人员访问克隆,以便提交后推送挂钩起作用。呸。
    • 你是在兜圈子。 “我不希望开发人员访问克隆,但我需要让开发人员访问克隆”。如果我理解正确的话。您希望他们查看代码,但不希望他们提交或编辑代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多