从只读裸仓库中 Git 签出

从只读裸仓库中 Git 签出

我有一个由一个用户拥有的裸 git 存储库。我想以另一个对 git 存储库没有写权限的用户身份运行,并从其中一个存储库中提取工作树。

git --no-optional-locks --git-dir=/path/to/bare-repo.git --work-tree=. checkout -f

或者

git --no-optional-locks --git-dir=/path/to/bare-repo.git --work-tree=. reset HEAD --hard

但在每种情况下,git 都希望能够写入当前用户无权访问的裸 repo 目录中的锁定文件。

是否有任何深层的“管道”命令可以提取文件而无需锁定或写入存储库的任何部分?

我意识到我可以创建当前用户拥有的第二个 repo 并将其拉入其中,但这会导致大量无缘无故的复制,我想避免这种情况。

- 更新 -

我对这个问题的理解并不完整。我希望能够针对现有目录运行签出,并且只复制已更改的文件,即以 git 的通常效率。但是 git 需要签出文件的修改时间,而修改时间不存储在对象中,而是存储在索引中。因此,为了获得我想要的效率,需要有一个可写的索引。

我仍然不想要.git/工作树检出中的文件,但是我将我想要的内容放入git clone -s第二个用户拥有的持久第三个位置,然后使用上面的命令,但引用这个 git repo 而不是原始的,引用特定的提交而不是命名的分支(这样我就不必将分支引用从原点同步到克隆)。

答案1

使用git clone -s。这将设置一个引用原始存储库对象存储的可写存储库,因此它将具有工作树索引,但不会存储任何自己的对象。

git clone --shared /path/to-bare-repo.git .

有“管道”命令可以获取单个文件和树的内容,但不能检查整个工作树,因为它本身就是一种“瓷器”级别的功能。

相关内容