从git repo将文件拉入web目录

从git repo将文件拉入web目录,git,push,live,Git,Push,Live,我看过很多关于这方面的网页和帖子,其中没有一篇是关于我的数字海洋水滴的 我有一个使用Capistrano部署的live rails应用程序,这意味着在部署之前,我必须使用Git将其推送到服务器上。所以Git是有效的。 然而,现在我想用一些更改来更新站点,虽然远程回购是最新的(通过git log验证),但web目录不是最新的 我知道我需要把新文件传给那个目录,但是怎么做呢 挂钩/立柱接收: #!/bin/sh git checkout -f 娜达。 我还运行了sudo./post-receive

我看过很多关于这方面的网页和帖子,其中没有一篇是关于我的数字海洋水滴的

我有一个使用Capistrano部署的live rails应用程序,这意味着在部署之前,我必须使用Git将其推送到服务器上。所以Git是有效的。 然而,现在我想用一些更改来更新站点,虽然远程回购是最新的(通过
git log
验证),但web目录不是最新的

我知道我需要把新文件传给那个目录,但是怎么做呢

挂钩/立柱接收:

#!/bin/sh
git checkout -f
娜达。 我还运行了
sudo./post-receive
,以确保post-receive钩子已执行(是的,它是可执行的)。没有输出。只是另一个CLI提示


为什么要获得一个包含最新git推送的文件夹会如此困难呢?

假设您的钩子位于
myrepo.git/hooks中的一个空存储库(没有签出文件)中,您缺少了一行
unset git_DIR

#!/bin/sh
unset GIT_DIR
cd /path/to/checkout/repository
git pull
git checkout -f

未设置将确保Git将考虑您的已签出的存储库作为当前的存储库(而不是裸露的回购)

您丢失了<代码>未设置的GITYDIR < /C>行,假设您的钩子在“裸代码库”中(未签出文件)在<代码> MyRePo中。GIT/Hooks

#!/bin/sh
unset GIT_DIR
cd /path/to/checkout/repository
git pull
git checkout -f

未设置将确保Git将您的签出存储库视为当前的存储库(而不是裸露的回购)

,因此需要什么Git推送来更新Web DIR?我创建了一份回购协议,有无
--bare
?它必须被称为
.git
还是
ProjectName.git
?它是否需要位于项目文件夹中才能工作?我是否需要有一个空文件夹,第一次将代码推送到这个repo,以便能够使用
git push origin master
更新它?当我创建一个非裸回购协议时,它看起来像是要更新livedir,但是在推送项目之后,失败了,因为“merge将覆盖README.txt”。已删除文件,请重试。下一个文件也会出现同样的错误…@Kane如果你推送,最好的做法是推送到一个裸repo,在其中放置postreceive钩子,然后更新非裸repo。因此裸repo位于一个非web目录中,如/home/deployuser,而postreceive钩子在webroot/projectname/.git中将其再次推送到非裸repo。对吗?如何在同一台服务器上从一个回购协议推送到另一个回购协议?到目前为止,我使用git的经验仅限于推送到远程服务器。我正在学习,但它令人困惑…@Kane-the-post-receive不推送:它将文件夹更改为实际的非裸回购,并从裸回购中拉出。Ok。因此,为了确保我理解它,post-receive钩子位于我推送代码的裸repo中(在hooks目录中)。它将目录更改为项目路径,将cd更改为项目路径,并使用
git pull
从该路径执行git pull,然后执行
git checkout-f
,因此它正在签出裸回购,因为钩子是从该目录执行的。这是正确的吗?那么,为了更新web目录,到底需要什么git推送呢?我创建了一份回购协议,有无
--bare
?它必须被称为
.git
还是
ProjectName.git
?它是否需要位于项目文件夹中才能工作?我是否需要有一个空文件夹,第一次将代码推送到这个repo,以便能够使用
git push origin master
更新它?当我创建一个非裸回购协议时,它看起来像是要更新livedir,但是在推送项目之后,失败了,因为“merge将覆盖README.txt”。已删除文件,请重试。下一个文件也会出现同样的错误…@Kane如果你推送,最好的做法是推送到一个裸repo,在其中放置postreceive钩子,然后更新非裸repo。因此裸repo位于一个非web目录中,如/home/deployuser,而postreceive钩子在webroot/projectname/.git中将其再次推送到非裸repo。对吗?如何在同一台服务器上从一个回购协议推送到另一个回购协议?到目前为止,我使用git的经验仅限于推送到远程服务器。我正在学习,但它令人困惑…@Kane-the-post-receive不推送:它将文件夹更改为实际的非裸回购,并从裸回购中拉出。Ok。因此,为了确保我理解它,post-receive钩子位于我推送代码的裸repo中(在hooks目录中)。它将目录更改为项目路径,将cd更改为项目路径,并使用
git pull
从该路径执行git pull,然后执行
git checkout-f
,因此它正在签出裸回购,因为钩子是从该目录执行的。对吗?