git 如何将存储库中文件夹的内容获取到本地文件夹的根目录?

w1e3prcc  于 2023-05-21  发布在  Git
关注(0)|答案(2)|浏览(185)

存在本地文件夹/var/www/test/
还有一个Git仓库,它有一个build/static文件夹。我需要从/var/www/test/中的此文件夹获取文件和文件夹
但结果是,在/var/www/test/中,build是用static文件夹创建的。我需要static位于/var/www/test/的根(即/var/www/test/static
怎么做才对?先谢谢你了。
我试过了:

cd /var/www/test/
git init
git remote add -f origin <repo_address>
git config core.sparseCheckout true
echo 'build/static' >> .git/info/sparse-checkout
git pull origin master
toiithl6

toiithl61#

您可以在/var/www之外的远程主机上创建一个git裸存储库。向它添加一个pre-receive钩子,将存储库的子文件夹的内容部署到/var/www/test/static中。本例预期/var/www/test/static存在且为空。build也被假定在存储库的顶层。您可以尝试使用其他目录结构,但这对我很有效。
当你推送到远程裸存储库时,预接收钩子应该部署文件。
注意事项:

  • 如果在/var/www/test/static中手动更新文件,git将拒绝覆盖它们。
  • 不需要第三方Git托管服务。
#!/bin/sh
# pre-receive script for custom read/write-tree deploy

while read old new ref; do [[ $ref = refs/heads/master ]] && {
    export GIT_INDEX_FILE="$GIT_DIR/deploy_index"
    export GIT_WORK_TREE="/var/www/test/static"
    git read-tree -um $(git write-tree) $new:build/static  || exit 1
}; done
l7wslrjt

l7wslrjt2#

我提出了一种方法,可以避免.git目录(即Git本地存储库元数据),因为你可能不想冒险公开你的项目历史。
将来也会更容易使用。
我建议在机器上的其他地方将存储库克隆到一个单独的文件夹中(稀疏与否,不影响结果),然后链接到您感兴趣的文件夹,即。static转换为/var/www/test/
1.确保您在/var/www/test/中没有static文件夹(如果存在,请将其删除)
1.在其他地方克隆您的存储库(不在/var/www/test/中)
1.将已检出的static文件夹链接到/var/www/test/

ln -s /path-to-your-cloned/build/static /var/www/test/static

(注:-s选项用于创建符号链接,如果出于某种原因需要,您可以通过删除此选项来创建硬链接)
完成!任何时候你拉取,新的内容将自动在/var/www/test/中可用。

相关问题