2

我想做以下事情:

  • 创建一个本地 git repo,我们称之为~/my-awesome-app
  • 在我的网站上创建一个文件夹,我们称之为mysite.com/my-awesome-app
  • 能够将我所做的任何更改推~/my-awesome-app送到mysite.com/my-awesome-app

有人可以解释我将如何设置吗?

4

2 回答 2

4

您可以创建mysite.com/my-awesome-app一个 git 存储库并将receive.denyCurrentBranch其设置为ignore允许推送到那里,但这是有风险的。

如果我想这样做,我会在我的服务器上创建一个裸存储库,我可以将我的代码推送到该存储库中,然后更改update挂钩以将最新的树导出到mysite.com/my-awesome-app(并可选择重新启动应用程序)。这样,存储库和部署的副本是两个不同的东西。

于 2012-07-31T14:47:35.307 回答
1

您的远程服务器上的~/mysite.com是否有 git存储库?如果是这样,就像JamesNoufal指出的那样,要小心,这种嵌套可能会有问题。

考虑以下解决方案,无论它是否嵌套都应该有效:

  1. 在~/mysite.com之外创建my-awesome-app存储库(例如在~/my-awesome-app)。
  2. 然后创建一个~/my-awesome-app/~/mysite.com/my-awesome-app的符号链接。
  3. 并且,为了安全起见,将 ~/mysite.com/my-awesome-app/添加到~/mysite.com/.gitignore文件中,以将其从~/mysite.com/ repo 的操作中排除。

在远程服务器上,从 shell:

mkdir ~/my-awesome-app/
ln -s ~/my-awesome-app/ ~/mysite.com/my-awesome-app
echo /my-awesome-app >> ~/mysite.com/.gitignore

当从本地my-awesome-app分支发布提交到远程服务器时,我会使用路径 ~/my-awesome-app作为上传/相对目录,而不是 ~/mysite.com/my-awesome-app。这应该使您免于尝试提升文件结构以寻找 git repos 的一些厚颜无耻的 IDE。

最后,我会考虑在 ~/my-awesome-app 添加一个远程仓库,而不仅仅是通过 sftp/ftp 或 ssh 发送文件而没有仓库。这使您可以保持高度稳定的生产环境,同时仍然能够使用可扩展的gitflow方法将修补程序重新合并到本地开发副本中。

Vincent Driessen在这里对 gitflow 进行了很好的讨论。


更新:符号链接的替代方法

您可以更改站点配置,而不是符号链接(可能会被删除):

# creates the alias
<IfModule mod_alias.c>
     Alias /my-awesome-app /path/to/my-awesome-app/
</IfModule>

# allows people to access the path
<Directory /path/to/my-awesome-app/>
        Order allow,deny
        Allow from all
</Directory>

然后,当您进行推送时,您应该使用 /path/to/my-awesome-app/。为了安全起见,我仍然会在 ~/mysite.com/.gitignore 中保留/my-awesome-app行,但没有符号链接,git 绝不应该在操作 ~/mysite 时偶然发现 my-awesome-app 存储库.com/。

于 2012-07-31T16:43:01.250 回答