gpt4 book ai didi

Git:仅从接收后 Hook 部署一个目录

转载 作者:太空狗 更新时间:2023-10-29 13:53:26 27 4
gpt4 key购买 nike

已按照 this article 中的说明进行操作我有一个接收后 Hook ,目前显示为:

#!/bin/sh
git --work-tree=/home/user/example.com --git-dir=/home/user/example.com.git checkout -f

这运行良好 - 所有文件和目录都已部署。但是,我只想部署 example.com.git 中 Build 文件夹中的文件(顺便说一下,我使用的是 Hammer。)因此并非所有开发文件都可以在实时服务器上查看。

问题:为了仅 check out /部署 Build 目录中的内容,我应该如何更改/添加上述 Git 命令?

更新:在评论中的讨论之后,我得出以下结论,这适用于我的情况。

#!/bin/sh
git --work-tree=/home/user/example.com --git-dir=/home/user/example.com.git checkout -f master -- Build/
cd /home/user/example.com
cp -rRp Build/. .
rm -rf Build

最佳答案

我将提供给 --work-tree--git-dir 的值缩写为 WTREPO 以便所有内容都可以在没有水平滚动条的情况下适应。

一般形式应该是:

#!/bin/sh
git --work-tree=WT --git-dir=REPO checkout -f -- paths

假设在实时服务器上部署的 WT 目录中,您只想 check out 存储库中的 Build 文件夹。这变成了

#!/bin/sh
git --work-tree=WT --git-dir=REPO checkout -f -- Build

通常,您可以用 git 存储库中的一个或多个文件替换 paths 部分。根据它们在存储库中的放置方式,这些被指定为相对路径。所以如果你的 git 仓库看起来像这样:

FolderOne
|- FolderTwo
| |- FileOne
|- FolderThree

FolderFour
|- FileFive

如果您想 check out FileOne 和所有 FolderFour,您应该这样做:

git --work-tree=WT --git-dir=REPO checkout -f -- FolderOne/FolderTwo/FileOne FolderFour

更新:

我已经有一段时间没有处理 Git 钩子(Hook)了,但我认为除了一些细节,比如它们的 stdin 和 argv,你可以把任何东西放在里面。

因此,为了检查 Build 文件夹中的所有内容,而不是 Build 文件夹本身,您可以在接收后 Hook 中执行如下操作:

git --work-tree=WT --git-dir=REPO checkout -f -- Build/
cd WT
cp -r Build/* .
rmdir Build

所以我们首先将 Build 目录 check out 到 WT 目录中。然后我们 cd 进入 WT 目录,使用 cp -r Build/* 将所有内容从 Build 目录中复制出来。. 代表当前目录,即我们刚刚cd 进入的WT 目录。完成后,我们删除现在空的 Build 目录。

因此,Build 目录中的所有内容现在都被 check out 到 WT 目录中,而没有 Build 目录本身。当然,您必须分别将 WTREPO 替换为工作树和 git 存储库的实际路径。

希望对你有帮助

关于Git:仅从接收后 Hook 部署一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com