是否可以从只读文件系统上的存储库中运行git checkout



我正试图将裸git存储库中的代码部署到只读装载的网络装载上。我遇到的第一个问题是在结账时,git无法创建index.lock文件。通过使用GIT_INDEX_FILE环境变量来指定新位置(临时索引文件),克服了这一问题。现在看来,在结账结束时,git试图创建HEAD.lock.

以下是我尝试运行的要点:

git --work-tree=<deploy-location> --git-dir=/nfs/<bare-git-repo> checkout <ref> -f

如果git-reo在只读文件系统中,有什么方法可以做到这一点吗?

您想要克隆存储库。我认为它不需要写访问权限,因为git可以通过HTTP克隆存储库。如果有人能够通过HTTP向文件系统进行写入,那么我们都会遇到大麻烦。

设置一个小型web服务器,从只读文件系统为文件系统空间提供服务,并告诉git克隆指向只读目录的URL。

您可以使用git archive来执行此操作,但与git checkout不同,您需要从一个空的目的地开始。

git --git-dir=/nfs/<bare-git-repo> archive <ref> | (cd <deploy-location> && tar xf -)

对于重复部署,您可能需要创建一个新目录,部署到该目录,然后将符号链接切换到新位置,如下所示:

#!/bin/bash
export GIT_DIR=/nfs/<bare-git-repo>
DEPLOY_TO=<deploy-location>
DEPLOY_DIR="${DEPLOY_TO}-$(date +%Y%m%d.%s)"
echo "Deploying to $DEPLOY_DIR from $GIT_DIR"
mkdir "${DEPLOY_DIR}" && 
        git archive "${1:-master}" | (cd "${DEPLOY_DIR}" && tar xf -) && 
        ln -snf "${DEPLOY_DIR}" "${DEPLOY_TO}"

如果DEPLOY_TO设置为/tmp/deploy,这将创建类似/tmp/deploy-YYYYMMDD.*/的路径,并将符号链接/tmp/deploy设置为指向最后创建的路径。

最新更新