git中的post_receive hook:如何检查我的非git文件夹?

时间:2014-05-08 18:02:25

标签: django git webfaction git-post-receive git-reset

我正在webfaction使用web deployment

我有一个Django应用程序:webapps / django_app / project_name /

我有一个Git回购:webapps / git_app / repos / my_repo.git

my_repo.git是一个裸存储库。它不是一个工作目录。

每当我从本地开发计算机推送到远程(webfaction - > my_repo.git)时,我希望我的django_app获取推送的代码。

我按照post这样做了。但没有解释它是如何工作的。

我在my_repo.git的post_recieve挂钩中添加了这两行。

#!/bin/sh
GIT_WORK_TREE=/home/username/webapps/django/myproject git checkout -f 
GIT_WORK_TREE=/home/username/webapps/django/myproject git reset --hard

这两条线实际上做了什么?

此外,我的Djangoapp文件夹不是git repo。仍然只要对my_repo.git进行推送,Djangoapp就会更新。那怎么办?

1 个答案:

答案 0 :(得分:1)

使用.git在本地管理文件时,通常有两件事:

  • 您的git存储库,它包含在.git目录和
  • 您的工作树,即您实际编辑的文件集。

默认情况下,存储库是工作树的子目录,但这不是必需的。设置GIT_WORK_TREE环境变量会指示git为结帐文件使用不同的位置。

所以第一行...

GIT_WORK_TREE=/home/username/webapps/django/myproject git checkout -f 

...要求git将HEAD存储库签出到/home/username/webapps/django/myproject

第二行......

GIT_WORK_TREE=/home/username/webapps/django/myproject git reset --hard

...确保/home/username/webapps/django/myproject没有任何本地更改。 reset --hard会放弃对git跟踪的文件所做的任何更改。通过"当地的变化"我的意思是您或其他人对此目录中的文件所做的任何更改;理想情况下,它不会是任何一个,但如果有一些,reset -f确保修改后的文件被存储在存储库中的文件版本覆盖。

有关此处列出的任何命令的详细信息,请尝试为手册页运行git <command> --help,或参阅The Git Book