Rud*_*die 11 git bash git-checkout
我用这个'教程'来建立一个DSP环境:http://toroid.org/ams/git-website-howto(是的,我没有T).
我的工作流程非常简单:
我的代码包含由我的代码缩小的CSS文件,然后保存到1个文件中:all.css.在本地,我已关闭该选项,因此all.css每次更改CSS时我都不必手动删除.在Staging和Production上,他们应该尽快缓存(因此all.css从单独的CSS文件创建).
问题是每次我推,我必须删除all.css(和all.js- 相同的故事)看到更改(并正确测试).
从教程中我做了一个post-receive钩子,将更改检出到某个文件夹(Apache读取代码).
我目前的post-receive钩子:
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
Run Code Online (Sandbox Code Playgroud)
我想重用$GIT_WORK_TREE去除$GIT_WORK_TREE(正在www/all.css和www/all.js)中的两个文件,但我不能......下一行没有var $ GIT_WORK_TREE.
所以我把它改成了这个,但我不喜欢这样,特别是如果我想在将来做更多的事情:
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
rm /var/www/www.example.org/www/all.css
rm /var/www/www.example.org/www/all.js
Run Code Online (Sandbox Code Playgroud)
$GIT_WORK_TREE 不会像这样重复使用.
我尝试过的东西不起作用:
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
rm $GIT_WORK_TREE/www/all.css
rm $GIT_WORK_TREE/www/all.js
Run Code Online (Sandbox Code Playgroud)
rm:文件不存在等(/www/all.css)(
$GIT_WORK_TREE为空)
GIT_WORK_TREE=/var/www/www.example.org
git checkout -f
Run Code Online (Sandbox Code Playgroud)
致命的:此操作必须在工作树中运行
GIT_WORK_TREE=/var/www/www.example.org
cd $GIT_WORK_TREE
git checkout -f
Run Code Online (Sandbox Code Playgroud)
致命的:不在git存储库(或任何.....)
我想我的问题与Bash如何工作一样多,因为它与GIT如何工作=)
Mar*_*air 27
你现在正在尝试一些问题.也许最好解释一下你依次尝试的每个例子的错误:
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
rm $GIT_WORK_TREE/www/all.css
rm $GIT_WORK_TREE/www/all.js
Run Code Online (Sandbox Code Playgroud)
这里的问题是,如果在命令之前直接定义变量,则环境变量仅在您正在运行的命令的环境中设置 - 它不在当前shell中设置.你可以轻松测试这个:
$ FOO=bar sh -c 'echo $FOO'
bar
$ echo $FOO
$
Run Code Online (Sandbox Code Playgroud)
你的下一次尝试是:
GIT_WORK_TREE=/var/www/www.example.org
git checkout -f
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为了在您在脚本中调用的其他命令的环境中设置变量,您需要将其导出,例如,export GIT_WORK_TREE=/var/www/www.example.org而不是第一行.
你的最后一次尝试是:
GIT_WORK_TREE=/var/www/www.example.org
cd $GIT_WORK_TREE
git checkout -f
Run Code Online (Sandbox Code Playgroud)
这与您之前的尝试(即您需要导出GIT_WORK_TREE)具有相同的问题,但它也有一个更微妙的问题.正如我在介绍这个博客帖子,GIT_DIR被设定为.在(即当前目录)post-receive脚本环境.因此,如果将目录更改为工作树的顶部,GIT_DIR则将指向该目录,而不是.git目录!一些好的经验法则是(a)你应该只设置GIT_DIR和GIT_WORK_TREE一起,(b)如果你设置它们,你应该将它们设置为绝对路径.所以,我认为以下钩子将适用于您的情况:
#!/bin/sh
export GIT_WORK_TREE=/var/www/www.example.org
export GIT_DIR=/var/www/www.example.org/.git
cd $GIT_WORK_TREE
git checkout -f
rm www/all.css
rm www/all.js
Run Code Online (Sandbox Code Playgroud)
小智 7
为什么不在路径中使用变量?
#!/bin/sh
work_tree=/var/www/www.example.org
GIT_WORK_TREE=$work_tree git checkout -f
rm $work_tree/www/all.css
rm $work_tree/www/all.js
Run Code Online (Sandbox Code Playgroud)
那你就不需要出口了.这对我来说很完美.
| 归档时间: |
|
| 查看次数: |
11401 次 |
| 最近记录: |