我试图将部署工作流程从通过FTP发送到git部署。我正在关注this帖子。
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
问题是上面的命令将整个repo的内容复制到另一个目录。我只需要复制dist
目录的内容。我怎样才能做到这一点?
答案 0 :(得分:1)
如您所知,裸存储库没有工作目录。
最简单的方法是将存储库克隆到新位置并复制文件夹的内容。
# clone the repo
git clone <url>
# Grab the desired folder from the desired branch and that it.
另一种选择是克隆存储库,然后split
删除所需的文件夹
subtree split
强> <强>
git subtree
强>git-subtree
-Merge
将子树或split
存储在子树中
git subtree split -P <name-of-folder> -b <name-of-new-branch>
答案 1 :(得分:1)
上面的命令将整个仓库的内容复制到另一个目录
在git术语中,它正在做的是检查提交。要检查提交的一部分,您必须告诉它只读出一些提交的树。
作为旁注,git并非构建为部署服务器。也就是说,它的简单和灵活性足以让你在这里使用它非常受欢迎并且效果很好。
Git维护一个索引文件,该文件将工作树中的内容与回购中的内容相关联。因此,如果您想使用git来管理任意工作树中的内容,您必须为该工作树保留一个索引文件。
(
# git ordinarily finds these for itself, but we're not using default behavior:
export GIT_DIR=/var/repo/site.git
export GIT_INDEX_FILE=$GIT_DIR/domain.com.index
export GIT_WORK_TREE=/var/www/domain.com
git read-tree -um `git write-tree` HEAD:dist # or master:dist, or any tree reference
)
git write-tree
可以获取索引中当前列出的任何内容的树(一个空的或不存在的文件可以很好地用作&#34;此处没有任何内容&#34;索引)。 git read-tree -um
有两棵树是结帐的基础,它根本不关心refs,甚至不是HEAD;它只关注树木和指数。