在 Openshift 服务器上运行 git add 和 commit

7

我正在使用一个平台,该平台在安装过程中创建configuration.php文件。目前,安装过程是在服务器的构建钩子中运行的。问题是,因为它是在服务器上创建的,所以每次推送后都必须重新运行安装过程。这会覆盖很多更改。

有没有办法在服务器上运行git addgit commit?如果我可以将configuration.php文件添加到仓库中,并git pull下载它,则安装过程将不会继续运行。如果可以,请问应在哪个目录中运行这些命令?

我已经尝试通过SSH登录到服务器并运行git命令,但无论我尝试在哪个目录中运行,都只会收到fatal: Not a git repository (or any parent up to mount point /var/lib/openshift)错误信息。


我已经读了你的问题好几遍,但是我还是不明白这里的问题和你想要做什么。通常来说,在服务器上你可以执行 git addgit commit 命令。从你的解释中我看得出来你似乎不知道在服务器上你的Git repo目录在哪里,但这是我能理解到的全部。 - janos
2
Openshift是一种云PaaS,与大多数主机不同。我知道我应该能够轻松访问git存储库,但迄今为止还没有成功。希望有人能知道原因或方法。 - NicholasJohn16
2个回答

6
如果我理解正确,你的问题是一旦你将提交推送到OpenShift仓库,OpenShift服务器就会自动开始全新安装,并且你会失去所有配置和数据?
这是OpenShift强制执行正确部署过程的方式。你不应该尝试绕过它;相反,你应该使你的安装适应它。如果你的部署过程可以与OpenShift很好地配合,你可以轻松部署多个环境并保持它们的最新状态,这在生产环境中非常重要。
我也遇到了这个问题,以下是我的解决方案:
关键是app-root/data文件夹。当你推送时,这个文件夹不会被删除,因此你可以使用它来存储不应该在部署时更改的数据文件。我还用它来存储我的配置文件。我将配置文件放在.gitignore中,因此它们不会被检出到OpenShift仓库中。然后,我使用了build钩子(虽然也许我应该使用pre_build...)将这些文件从data文件夹复制到它们的真实位置,在开始构建之前。
你需要记住的是,构建所需的每个文件都应该通过git进行版本控制、从"data"目录中复制、通过依赖管理器或者使用"wet"或"curl"从互联网上下载,或者在构建过程中创建。你不能有那些只停留在那里的文件(就像在开发机器的本地工作副本中一样),所以如果你有一个没有版本控制且不是在构建过程中创建的文件,请确保设置一个钩子来下载它或从"data"目录中复制它。
如果需要参考,可以看一下我的项目。相关部分是操作钩子这份说明文档

谢谢您的回复。我知道所有东西都需要成为仓库的一部分,我只是试图找出管理这个文件的最佳方法。我尝试使用数据目录,但文件总是777。我尝试过chmod文件,但它们总是恢复。对于包含敏感信息的配置文件来说,这并不好。也许在这方面我错过了什么,我会进一步研究。 - NicholasJohn16
你为什么要关心这些权限呢?OpenShift不是终端服务器 - 它没有最终用户会乱搞。每个OpenShift帐户只有一个用户,只有该用户可以SSH进入项目。即使您有多个SSL密钥,它们也将在OpenShift机器上共享同一个用户。该用户(=您)仅作为管理员通过SSH登录,具有明确的目标,因此我不会担心意外修改这些文件。其他用户甚至无法访问该目录树。这留给运行OpenShift的RedHat团队 - 他们不会弄乱您的东西。 - Idan Arye

0

当我在我的OpenShift服务器上安装PHP论坛时,遇到了类似的问题。为了解决推送到远程git时丢失配置文件的问题:

  1. 安装您的平台并让它创建其PHP配置文件,并对您的远程git进行更改。
  2. 使用PSCP将远程存储库下载到本地git。例如,使用类似于以下命令:pscp -r -i "x:\your\private\key\location\id_rsa.ppk" your.openshift.host:app-root/runtime/repo/* "x:\your\local\git\location"
  3. 将更改(和配置文件)提交到本地git。
  4. 将提交推送到远程git。

现在,当您推送远程git时,您也会推送您的配置文件。请注意,如果您的平台对远程git进行其他更改,则必须重复上述步骤,以便在推送时不会丢失它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接