Git推送到cPanel帐户 - 推送没有更新修改过的文件

时间:2015-01-16 06:20:00

标签: linux git ssh ftp centos

以下解决方案 - 如何使用git推送到cpanel服务器

终于在我的localhost(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-Server

我将my_project.git文件夹复制到我服务器的根目录/ home / myuser / public_html /

所以现在在根目录中我有:

  • 的cgi-bin
  • my_project.git

这是我不确定的一个领域。我是否必须在public_html目录中的服务器上执行init(使用putty)?我读了一些关于裸初始的东西?我只是想(从我的电脑上)将我已经在Git控制下的网站推送到服务器。当我对1个文件进行更改时,将该更改推送到服务器,以便通过推送进行实时更新。该网站已完成并准备好上线。我已经手动来回移动以在服务器上进行实时测试。我的最后一步是正确设置Git,所以任何进一步的更改我都可以将它们推送到服务器而无需FTP。

我添加了一个远程来源:git remote add origin ssh://myuser@thedomain.com/home/myuser/public_html/my_project.git

我试图推动它,并得到了#34; Permission denied(publickey)"。我已经在我的PC上本地有一个id_rsa和id_rsa.pub键,所以我复制了它们并将它们重命名为id_rsa.myname id_rsa.myname.pub(其中myname是我的名字)。然后我通过FTP将它们复制到.ssh文件夹(FTP作为cpanel用户,它是你转储到的目录,在public_html之上),与/home/myuser/.ssh/目录相同。

一旦他们到达那里,我就将他们添加到了授权的密钥'使用Putty作为cpanel用户(我的私人ppk)登录:

cd .ssh
cat id_rsa.myname >> ~/.ssh/authorized_keys
cat id_rsa.myname.pub >> ~/.ssh/authorized_keys

这样做后,推动似乎有效。因为我有一个密钥/身份验证问题,我使用的是Git Gui版本,它在本地设置并运行良好。我通过Git Bash添加了起源。当我做的时候"远程>推"在桂版中,我得到了:

Pushing to ssh://theregistrybank@theregistrybank.com/home/theregistrybank/public_html/yiire    gistrybank.git
stdin: is not a tty
To ssh://myuser@thedomain.com/home/myuser/public_html/my_project.git
44ae034..0388a05  master -> master
updating local tracking ref 'refs/remotes/origin/master'

在进行推送之前,唯一修改过的文件(我从传输到服务器的裸克隆的diff)是我的.gitignore文件。我添加了2个排除项,并在本地提交。所以我试图推动该文件的更改。在我推动之后,它说"成功"在绿色,似乎工作。但是,当我在FileZilla中检查文件时,.gitignore文件不是我刚刚在本地提交的更新文件。

我认为我很亲密,但在某处错过了一步。我试图尽可能具有描述性。

将源代码放在GitHub上不是一个选项,因为客户端不希望源公开,并且不想支付私有回购。我应该能够从我的本地设置推送到cPanel服务器,所以我不必每次都传输数千个文件。我实际上传输一个zip文件,然后在服务器上解压缩lol。


服务器信息

  • cPanel 11.46.2 build 0
  • CentOS 6.6 x86_64 kvm build01

是的,Git是在服务器上设置的,正在运行,git --version报告:git version 1.7.1

Git on my PC:git version 1.9.4.msysgit.2

提前谢谢。


感谢@VonC,我能够让它工作:)

你需要某个地方供你的git repo坐下。我创建了一个' git-repos'文件夹在' / home / cpaneluser / 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'只是“收到后”#39;所以它会被运行。用编辑器编辑它,并在他选择的答案中添加@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'并将post-receive的权限更改为具有执行权限。对我来说,0744工作正常。这是神奇的酱油:)。

在本地添加你的遥控器(必须在你的git项目中):git remote set-url origin ssh://cpaneluser@yourdomain.com/home/cpaneluser/git-repos/my-project.git

现在,如果您现在尝试推送,则不会将文件放入' public_html'因为git树(术语?)匹配并且是最新的。如果它们是最新的,它似乎会跳过执行您的“收到后续”状态。钩。这意味着您的bash脚本永远不会运行,并且它永远不会将文件检出到您的工作树。

我们需要手动运行' post-receive' bash脚本用于在' public_html'中创建项目的所有文件。 。目录

cd to' /home/cpaneluser/git-repos/my-project.git/hooks'

运行:./post-receive

Boom,您的所有文件都在' public_html'中。现在您可以在本地工作,然后按预期推送到您的cpanel服务器:)

2 个答案:

答案 0 :(得分:1)

您复制的内容(my_project.git)是一个裸仓库,意味着没有工作树(实际签出的文件)。
请阅读“Git workflow - Setting up a build process”。

这意味着如果不改变/ home / myuser / public_html /

中的任何内容,则推送到

缺少的部分是post-receive hook(在/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

答案 1 :(得分:1)

我的 cPanel 帐户也有类似的问题,git 已设置,但由于某种原因我无法推送。经过大量的思考,我意识到问题的根源就像您指出的那样,尽管 git 已设置,但 repo 是空的,因此没有任何可跟踪的内容。 当您在 cPanel 中设置一个空的 repo 然后尝试推送您已经创建的本地 repo 时会发生这种情况,而不是首先从 github 或您的本地 repo 克隆它(这就是发生在我身上的事情,因为出于某种原因我无法即使我已经设置了 SSH 密钥,也无法从 cPanel git 界面访问我的 github)

我发现的简单解决方案是使用您的 cPanel 帐户中的终端手动克隆存储库

在您的 cPanel 仪表板上的“高级”部分下,您会找到终端。您会收到一条警告,说如果您不知道自己在做什么,可能会弄乱服务器,单击“确定”即可进入。

现在,您只需像克隆到本地机器上一样克隆您的存储库。

导航到在您的 cPanel 中设置 git 的位置

cd repositories/<nameOfYourRepo>

并运行克隆命令

git clone <URLofYourGithubReop>

如果是私有仓库,系统会要求您提供 github 用户名和密码

就是这样,你很高兴