下面的解决方案-如何使用git推送到cpanel服务器
我终于可以在本地主机(Windows 8.1上的WAMP设置)和Linux服务器(带有cPanel 11.46.2的CentOS 6.6 x64)之间设置Git了。
我在本地创建了一个裸克隆: git clone --bare my_project my_project.git
注意:my_project是一个示例名称,而不是真实名称,并且在此文档中来自此处:http : //git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a -服务器
我将my_project.git文件夹复制到服务器的根目录/ home / myuser / public_html /
所以现在在根目录中,我有:
这是我不确定的领域。我是否必须在public_html目录中的服务器上进行初始化(使用腻子)?我读了一些关于裸初始化的东西?我只想(从PC上)将已经在Git控制下的网站推送到服务器。当我对1个文件进行更改时,将该更改推送到服务器,以便通过推送实时更新。该网站已完成,可以投入使用。我已经手动来回移动以便在服务器上进行实时测试。我的最后一步是正确设置Git,因此任何进一步的更改都可以将它们推送到服务器,而无需FTP。
我添加了一个远程来源: git remote add origin ssh://[email protected]/home/myuser/public_html/my_project.git
我试图推动它,并得到“权限被拒绝(公钥)”。我已经在本地PC上拥有id_rsa和id_rsa.pub密钥,因此我将它们复制并重命名为id_rsa.myname id_rsa.myname.pub(其中myname是我的名字)。然后,我通过FTP(以cpanel用户的身份使用FTP,并将其复制到.ssh文件夹)复制到.ssh文件夹中,该目录是转储到public_html上方的目录,与/home/myuser/.ssh/目录相同。
将它们放置到那里后,我使用通过以cpanel用户(我的私人ppk)身份登录的Putty将它们添加到“ authorized_keys”中,方法是:
cd .ssh
cat id_rsa.myname >> ~/.ssh/authorized_keys
cat id_rsa.myname.pub >> ~/.ssh/authorized_keys
完成此操作后,似乎可以进行推送了。因为我遇到了密钥/身份验证问题,所以我使用了Git Gui版本,该版本已安装并且在本地运行良好。我通过Git Bash添加了起源。当我在Gui版本中执行“ Remote> Push”时,我得到了:
Pushing to ssh://[email protected]/home/theregistrybank/public_html/yiire gistrybank.git
stdin: is not a tty
To ssh://[email protected]/home/myuser/public_html/my_project.git
44ae034..0388a05 master -> master
updating local tracking ref 'refs/remotes/origin/master'
在执行推送之前,唯一修改过的文件(与我转移到服务器的裸克隆不同)是我的.gitignore文件。我添加了2个排除项,并在本地提交。所以我试图在该文件中推送更改。在我进行推送后,它以绿色显示“成功”,并且似乎可以正常工作。但是,当我在FileZilla中检查文件时,.gitignore文件不是我刚刚在本地提交的更新文件。
我想我很近,但是错过了某个地方。我试图尽可能地描述自己。
并且将源代码放置在GitHub上不是一种选择,因为客户端不希望源代码公开,也不想为私有存储库付费。我应该能够从本地设置推送到cPanel服务器,因此不必每次都传输数千个文件。我实际上传输了一个zip文件,并在服务器上将其解压缩。
是的,已经在服务器上安装了Git,并且可以正常工作,并且git --version报告:git版本1.7.1
我PC上的Git:git版本1.9.4.msysgit.2
先感谢您。
感谢@VonC我能够使它工作:)
您需要在某个地方放置git repo。我在“ / home / cpaneluser / git-repos”中创建了一个“ git-repos”文件夹,以存放该cpanel用户的存储库。
第一步是创建一个裸仓库:http : //git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server-我只遵循了第一步,基本上创建了裸仓库“ my-project.git”
在将其放置在服务器上之前,将“ my-project.git / hooks / post-receive.sample”重命名为“ post-receive”,以便将其运行。使用您的编辑器进行编辑,并在其选择的答案中添加@VonC给我们的行:
#!/bin/sh
umask 0022
GIT_WORK_TREE=/home/cpaneluser/public_html GIT_DIR=/home/cpaneluser/git-repos/my-project.git git checkout -f
注意:我使用的是cpanel,因此您的路径可能不同,而您的umask也可能不同。0022用于0644文件权限。没有umask,我将收到500个内部服务器错误,因为这些文件是使用0664权限创建的。
使用FTP或任何您喜欢的方法,将“ my-project.git”裸仓库复制到服务器上的“ / home / cpaneluser / git-repos”。然后进入“ my-project.git / hooks”并将接收后的权限更改为具有执行权限。对我来说,0744效果很好。这是神奇的调味料:)
在本地,添加远程(必须在git项目中):git remote set-url origin ssh://[email protected]/home/cpaneluser/git-repos/my-project.git
现在,如果您尝试立即推送,则不会将文件放在“ public_html”中,因为git树(术语?)匹配并且是最新的。如果它们是最新的,则似乎跳过了执行“接收后”钩子的过程。这意味着您的bash脚本永远不会运行,也永远不会将文件检出到工作树中。
我们需要手动运行“ post-receive” bash脚本,以在“ public_html”目录中创建项目的所有文件。
cd到'/home/cpaneluser/git-repos/my-project.git/hooks'
跑: ./post-receive
oom,您所有的文件都在“ public_html”中。现在您可以在本地工作,然后按预期推送到您的cpanel服务器:)
您复制的(my_project.git
)是一个裸仓库,意味着没有工作树(实际签出的文件)。
阅读例如“ Git工作流程-设置构建过程”。
这意味着要推送至/ home / myuser / public_html /
缺少的部分是接收后挂钩(在中/home/myuser/public_html/my_project.git/hooks/post-receive
,确保它是可执行chmod +x
的:),以便在中签出回购/home/myuser/public_html/
。
#!/bin/sh
GIT_WORK_TREE=/home/myuser/public_html GIT_DIR=/home/myuser/public_html/my_project.git git checkout -f
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句