将裸仓库中的一个目录的内容复制到repo外的目录

时间:2016-04-24 14:22:15

标签: git web-deployment

我试图将部署工作流程从通过FTP发送到git部署。我正在关注this帖子。

git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

问题是上面的命令将整个repo的内容复制到另一个目录。我只需要复制dist目录的内容。我怎样才能做到这一点?

2 个答案:

答案 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>

enter image description here

答案 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;它只关注树木和指数。