我正在为 GoDaddy 共享主机帐户上的网站设置一个 git 存储库。通常人们会设置一个 git bare repo on the server仅包含实时网络数据,然后在 push to the remote 上使用git post-receive hook checkout 到实时目录(感谢@VonC 提供的链接)。
没关系,但我已经将存储库设置为也包含工作文件。在我的服务器上,
/home/username/repo.git/work_folders, and /home/username/repo/web_files_and_folders
对于存储库,以及,
/home/username/public_html/web_files_and_folders
用于实时文件和文件夹。
work_folders 通常包含用于生成网站的 png 和 jpg 文件的 svg、png 和 jpg 文件。这些是网站开发的一部分的主文件。
问题是我找不到一个简单的方法来让 git checkout web_files_and_folders 仅来自任何给定的分支。我可以使用 shell to wildcard select web_files_and_folders 但这并不能解决知道分支名称的问题(当然每个分支可能会改变)。
我是否需要 merge 到 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分支 merge 到master,推送到服务器并上线。目前我们有 2 个人正在开发该网站。
post-receive Hook 尚未完成,但类似于 this one .除了我希望远程存储库存储其他开发文件外,我的使用与此链接几乎相同。这些文件是网站开发的一部分,需要共享。
您在我的第一次编辑中看到的是尝试将开发分支 checkout 到开发测试站点。在服务器上,此测试站点是一个子域,可作为文件系统中公共(public) html 根目录下的文件夹访问。
在我看来,这就像使用通配符选择器进行 checkout 一样,
GIT_WORK_TREE=/home/user/public_html/dev git checkout -f dev devpath/web/*
还将文件放在通配符之前的同一路径下。我需要能够定义新的默认路径。
我在服务器上安装了 Git 1.7.1。
最佳答案
that doesn't solve knowing the branch name
关于这一点,更新后的钩子(Hook)可以检测到被推送的分支。
参见:
- "Separate Git Deployments on a Single Server "
- "how to process files on a branch in post-receive hook in git "
类似于:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
....
关于git - 从 Linux 上的裸 git 存储库 check out 选定文件和文件夹的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24377827/