我正在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就会更新。那怎么办?
答案 0 :(得分:1)
使用.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。