我们通常git clone 下来的代码,工作区代码目录下的.git 就是对应本地仓储,所有分支信息,配置都在此目录。和服务的bare格式相差不大,可以通过技巧转成bare。

那思考下,如果我把这个.git 移动到其他位置,或者想把一个bare格式的仓储和当前工作区代码关联上,怎么做到呢?

答案就是通过指定GIT_DIR, GIT_WORK_TREE。

有人说你闲的蛋疼,哪有这种情况啊。我就是实际情况遇到了,场景是这样:

  1. 有一个git服务器,里面的仓储都是bare形式,平时的代码都是git push到此。
  2. 偏偏这个服务器还开了一个WEB,每次提交会通过git hook,自动部署更新代码
    之前有篇介绍了git 自动部署的:http://www.yinqisen.cn/blog-675.html
  3. 解决BUG,直接在服务器上就改了,避免小修改还要产生git push记录,去反复验证的繁琐
  4. 就是这个问题的需求:我需要git status, git diff, git branch 查看我具体改了什么,并做git push
  5. 要完成4的任务,就必须通过GIT_DIR, GIT_WORK_TREE解决了

很简单:

    export GIT_WORK_TREE=/srv/html/zenbbs
    export GIT_DIR=/home/git/repos/zenbbs.git

    # git status, git diff, git log, git commit ...

这么做的好处是,只要当前shell环境变量里有GIT_DIR, GIT_WORK_TREE,你就可以和正常git clone 出来的效果一样使用。

推荐一个很棒的第三方精简的 Laravel console

个人喜好经常写些命令行工具,laravel 很方便,但脚手架工程就 45M左右,使用 composer install --no-dev 也要24M左右,很笨重。 也尝试过 symfony 的 compos...

阅读全文

有关 PHP 和 js 浮点运算的坑

javascript 0.1 + 0.2 为啥不等于 0.3 ? (正确结果:0.30000000000000004) 0.8 * 7 为啥不等于 5.6 ? (正确结果:5.6000000000000005) PHP var_dump(intv...

阅读全文

彻底搞懂 PHP 变量结构体,多数文章观点不准确

PHP5 中的 zval // 1. zval typedef struct _zval_struct { zvalue_value value; zend_uint refcount__gc; zend_uchar type; zend_uchar is...

阅读全文