Git推送到cPanel账户 – 推送没有更新修改后的文件

下面的解决scheme – 如何使用git推送到cpanel服务器

终于find了在我的localhost(Windows 8.1的WAMP设置)和我的Linux服务器(cPanel 11.46.2的CentOS 6.6 x64)之间设置Git的地方。

在本地我创build了一个裸副本: 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 /

所以现在在根目录我有:

  • cgi-bin目录
  • my_project.git

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

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

我试图推动它,并获得“权限被拒绝(publickey)”。 我的电脑上已经有了一个id_rsa和id_rsa.pub密钥,所以我将它们复制并重命名为id_rsa.myname id_rsa.myname.pub(myname是我的名字)。 然后,我通过FTP(FTP作为cPanel用户,它是您转储到public_html之上的目录)将它们复制到.ssh文件夹中,与/home/myuser/.ssh/目录相同。

一旦他们在那里,我把他们添加到“authorized_keys”使用Puttylogin为cPanel用户(我的私人ppk)做:

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

这样做之后,推动似乎工作。 因为我有一个关键/身份validation问题,我使用了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' 

在进行推送之前,唯一修改的文件(我从传输到服务器的裸露克隆的差异)是我的.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版本1.7.1

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

先谢谢你。


感谢@VonC我能够得到这个工作:)

你需要一个地方让你的git回购。 我在'/ home / cpaneluser / git-repos'中创build了一个'git-repos'文件夹来保存这个cpanel用户的仓库。

第一步是创build一个裸回购: http : //git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server-我只跟着第一步,基本上创build了裸回购“my-project.git”

在把它放到你的服务器之前,把'my-project.git / hooks / post-receive.sample'重命名为'post-receive',这样它就会被运行。 用你的编辑器编辑它,并在他select的答案中添加@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,所以你的path可能会不同,你的umask可能会不同。 0022是针对0644文件的权限。 没有umask,我得到了500内部服务器错误,因为这些文件是用0664权限创build的。

使用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'目录下创build我们项目的所有文件。

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

运行: ./post-receive

繁荣,所有的文件都在“public_html”。 现在你可以在本地工作,然后按预期推送到你的cPanel服务器:)

你所拷贝的( my_project.git )是一个裸机,意思是没有工作树(实际检出的文件)。
阅读例如“ Git工作流 – 建立一个构建过程 ”。

这意味着推送到如果不会改变/ home / myuser / public_html /

缺少的部分是post-receive钩子 (在/home/myuser/public_html/my_project.git/hooks/post-receive ,确保它是可执行文件: chmod +x ),以检出/home/myuser/public_html/的回购/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