按照本文的说明,我有一个post-receive钩子,目前读取:
#!/bin/sh
git --work-tree=/home/user/example.com --git-dir=/home/user/example.com.git checkout -f
Run Code Online (Sandbox Code Playgroud)
这很好用 - 所有文件和目录都已部署.但是,我只想在example.com.git中的Build文件夹中部署文件(顺便说一下,我正在使用Hammer.)因此,并非所有开发文件都可在实时服务器上查看.
问题:为了只检查/部署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
Run Code Online (Sandbox Code Playgroud)
我会缩写供给值--work-tree和--git-dir作为WT,并REPO分别使一切都可以适应没有水平滚动条.
一般形式应该是:
#!/bin/sh
git --work-tree=WT --git-dir=REPO checkout -f -- paths
Run Code Online (Sandbox Code Playgroud)
假设在WT实时服务器上部署的目录中,您只想签Build出存储库中的文件夹.这变成了
#!/bin/sh
git --work-tree=WT --git-dir=REPO checkout -f -- Build
Run Code Online (Sandbox Code Playgroud)
通常,您可以使用pathsgit存储库中的一个或多个文件替换该部分.这些根据它们放置在仓库中的方式指定为相对路径.所以如果你的git repo看起来像这样:
FolderOne
|- FolderTwo
| |- FileOne
|- FolderThree
FolderFour
|- FileFive
Run Code Online (Sandbox Code Playgroud)
而你想要结账FileOne和一切FolderFour,你应该这样做:
git --work-tree=WT --git-dir=REPO checkout -f -- FolderOne/FolderTwo/FileOne FolderFour
Run Code Online (Sandbox Code Playgroud)
更新:
自从我处理Git钩子以来已经有一段时间了,但我认为除了stdin和argv这样的细节之外,你可以把任何内容放进去.
因此,要检查Build文件夹中的所有内容而不是Build文件夹本身,您可以在post-receive挂钩中执行以下操作:
git --work-tree=WT --git-dir=REPO checkout -f -- Build/
cd WT
cp -r Build/* .
rmdir Build
Run Code Online (Sandbox Code Playgroud)
所以我们先将Build目录检入WT目录.然后,我们cd进入WT目录,从东西复制出来Build使用目录cp -r Build/* ..该.代表当前目录,这是WT目录,我们刚刚cd进入.完成后,我们删除现在为空的Build目录.
因此,Build目录中的所有内容现在都检出到WT目录中,而不是Build目录本身.当然,你必须更换WT,并REPO通过实际的路径分别工作树和Git仓库.
希望有所帮助
| 归档时间: |
|
| 查看次数: |
2151 次 |
| 最近记录: |