从linux上的裸git存储库中检出所选文件和文件夹的最佳方法是什么?

时间:2014-06-24 03:18:36

标签: git repository push wildcard

我正在为GoDaddy共享主机帐户上的网站设置git存储库。通常,人们会设置仅包含实时网络数据的git bare repo on the server,然后在push to the remote上使用git post-receive hook结帐到实际目录(感谢@VonC获取链接)。

没关系,但我已经设置了存储库以包含工作文件。在我的服务器上,

  

/home/username/repo.git/work_folders,和/ home / username / repo / web_files_and_folders

表示存储库,

  

的/ home /用户名/的public_html / web_files_and_folders

用于直播文件和文件夹。

work_folders通常包含用于生成网站的png和jpg文件的svg,png和jpg文件。这些是主文件,是网站开发的一部分。

事情是我无法找到一个简单的方法来获取git来检查web_files_and_folders只能从任何给定的分支中生存。我可以使用shell to wildcard select web_files_and_folders,但这并不能解决分支名称(当然每个分支都可以改变)。

我是否需要合并到master(例如),然后在post-receive hook中执行shell通配符?如果是这样,对于我试图使用回购的其他技术含量较低的人来说,这可能是一个问题。

编辑-------------------

所以,要更新。从我输入的终端shell,

GIT_WORK_TREE=/home/user/public_html/dev git checkout -f dev devpath/web/*

从Web文件夹中提取了正确的文件,而不是获取,

/home/user/public_html/dev/*

我知道了,

/home/user/public_html/dev/devpath/web/*

显然,我错过了一些关于如何更改提取路径的信息。

编辑2 -------------------

好的,更详细......

我目前在共享服务器上有一个裸仓库设置,

/home/user/repo.git

本地存储库有2个分支,dev和master,文件格式如

/devpath/logos/
/devpath/photos/
...
/devpath/web/  (website root files and folders)

想法是在dev分支中开发,推送到服务器并测试网站的dev.url,当事情好的时候将dev分支合并到master中,推送到服务器并上线。目前我们有2人正在开发该网站。

收件后挂钩尚未完成,但与this one类似。我的用法与此链接几乎相同,只是我希望远程存储库存储其他开发文件。这些文件是网站开发的一部分,需要共享。

您在我的第一次编辑中看到的是尝试将dev分支签出到开发测试站点。在服务器上,此测试站点是一个子域,可以作为文件系统中公共html根目录下的文件夹进行访问。

在我看来,比如使用通配符选择器

GIT_WORK_TREE=/home/user/public_html/dev git checkout -f dev devpath/web/*

还将文件放在通配符之前的相同路径下。我需要能够定义一个新的默认路径。

我在服务器上安装了Git 1.7.1。

2 个答案:

答案 0 :(得分:0)

  

无法解决知道分支名称

对此,更新后挂钩可以检测被推送的分支 见:

类似的东西:

#!/bin/bash

while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`

  if [ "master" == "$branch" ]; then
    ....

答案 1 :(得分:0)

用管道解决这个问题:

GIT_WORK_TREE=deploy/path GIT_INDEX_FILE=manifest/path \
        git read-tree -um commit:web_files_and_folders