我有一个由一个用户拥有的裸 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 .
有“管道”命令可以获取单个文件和树的内容,但不能检查整个工作树,因为它本身就是一种“瓷器”级别的功能。