Git 推送到 cPanel 帐户 - 推送未更新修改后的文件

Git push to cPanel account - Push did not update modified file

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

终于 在我的本地主机(Windows 8.1 上的 WAMP 设置)和我的 Linux 服务器( CentOS 6.6 x64 与 cPanel 11.46.2).

我在本地创建了一个裸克隆: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/

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

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

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

我试图推动它,并得到“权限被拒绝(public密钥)”。我的 PC 上已经有一个本地的 id_rsa 和 id_rsa.pub 密钥,所以我复制了它们并将它们重命名为 id_rsa.myname id_rsa.myname.pub(其中 myname 是我的名字)。然后我通过 FTP 将它们复制到 .ssh 文件夹(FTP 作为 cpanel 用户,它是你转储到的目录,在 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

这样做之后,推送似乎起作用了。因为我遇到了 key/auth 问题,所以我使用了 Git Gui 版本,该版本已在本地安装并运行良好。不过,我通过 Git Bash 添加了起源。当我在 Gui 版本中执行“Remote > Push”时,我得到:

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'

在执行推送之前,唯一修改的文件(不同于我运行提交给服务器的裸克隆)是我的.git忽略文件。我向它添加了 2 个排除项,并在本地提交。所以我试图推动该文件中的更改。在我推送之后,它用绿色表示“成功”并且似乎工作了。但是,当我在 FileZilla 中检查文件时,.gitignore 文件不是我刚刚在本地提交的更新文件。

我想我已经很接近了,但在某处错过了一步。我尽量做到描述性。

并且将源放在 GitHub 上不是一个选项,因为客户不想要源 public,也不想为私人回购支付费用。我应该能够从我的本地设置推送到 cPanel 服务器,这样我就不必每次都 t运行sfer 数千个文件。我实际上 t运行sfer 一个 zip 文件,并在服务器上解压哈哈。


服务器信息

是的,Git 已在服务器上安装并运行,并且 git --version reports:git 版本 1.7.1

Git 在我的电脑上:git 版本 1.9.4.msysgit.2

提前致谢。


解决方案

多亏了@VonC,我才能够让它工作:)

你需要找个地方放你的 git 仓库。我在“/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',把post-receive的权限改成有执行权限。对我来说,0744 工作得很好。这就是魔法酱:)

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

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

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

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

运行: ./post-receive

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

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

这意味着推到 if 不会改变 /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

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

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

在您的 cPanel 仪表板上,在“高级”部分下,您会找到终端。你会收到一条警告,说如果你不知道自己在做什么,你可能会搞砸你的服务器,点击确定就可以了。

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

导航到 git 在您的 cPanel

中设置的位置
cd repositories/<nameOfYourRepo>

和运行克隆命令

git clone <URLofYourGithubReop>

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

就是这样,你可以开始了