git - 从 Linux 上的裸 git 存储库 check out 选定文件和文件夹的最佳方法是什么?

标签 git repository push wildcard

我正在为 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)可以检测到被推送的分支。
参见:

类似于:

#!/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/

相关文章:

git - 仅将一个文件夹推送到远程仓库

domain-driven-design - 什么类型的代码适合服务层?

为 git 存储库设置的 Xcode 挂起

git - 全新的 git repo 在尝试推送到全新的远程时说 "Everything up-to-date"

git - 我可以克隆 repo 和 pull,但我不能推送

GitHub : Tags that include a specific commit

推送时出现 Git 错误 - update_ref 失败

git - 多个集结区

svn - Web Subversion 存储库浏览工具,有一个转折

javascript - 数组在随机化时添加维度