如何设置混合(S)FTP + Git工作流的网站



我有很多虚拟托管网站,目前正在通过chroot SFTP更新。更新是由客户端(通常使用Dreamweaver和CuteFTP/Filezilla)和我公司的员工(通常使用Eclipse团队同步与JCraft SFTP)完成的。这个设置工作正常,除非客户正在编辑他们的网站在同一时间我们是。在这种情况下,我们必须不断同步以检查更改,这既缓慢又不可靠。此外,由于每个站点的文件数量庞大,目录遍历缓慢,缺乏增量压缩,SFTP传输速度很慢。

我想转移到(部分)Git工作流,主要是为了从增量压缩中受益,但也引入一些基本的修订控制。我之所以说"基本",是因为典型的git工作流程是在将更改捆绑到git提交之前进行本地开发和测试,这很不适合我们的需求,因为:

  • 我们的一些客户将需要使用SFTP,而不是Git为了方便或兼容性
  • 我不想强制一个特定的SFTP客户端(如git-ftp)。我们的客户对自己的选择很满意(例如Dreamweaver或CuteFTP)。他们可以在任何操作系统上,他们不使用shell。
  • 没有我们的客户端可以在本地测试,每一个小的变化必须上传到网络服务器,并立即"上线"(我们有测试网站,所以"上线"并不一定意味着"生产"或"公共"在这种情况下)
  • 大约90%的更改将是小的一行CSS/HTML更改,使提交消息耗时。
  • 一些更改是通过shell或脚本直接在服务器浏览器上完成的。

我想我想要的是远程git repo使用webroot作为工作目录,并自动提交任何在那里更改的文件,并显示一个通用消息,指示哪个文件更改了。然而,我一直读到一个项目的主repo不应该有一个工作目录(git init—bare),即使它有,它通常也不会提交在那里所做的更改。我不关心这个设置是否丢失了提交的所有权细节(因为它不知道谁修改了文件,我通常不在乎)。

如果失败,我基本上想使用Git来替代Rsync-over-SSH (Eclipse Team Sync似乎不支持)。任何建议使用其他技术的答案都需要支持Eclipse(我选择的工具)和Dreamweaver(我的客户选择的主要工具)。我知道这并不理想,但没有商量的余地。如果我可以强制使用Git,我就会这样做,这个问题就无关紧要了。我得和几百个客户打交道,其中大部分是mac电脑上的平面设计师。

p。我意识到当客户端不定期重新同步他们的本地文件时将会出现问题。如有任何处理建议,我将不胜感激。

有没有人可以提供关于这个设置的指导(Centos 6.4 linux)。

对于直接在服务器上(或通过SFTP)进行的更改:

看看Gitwatch,它是"一个bash脚本,用于监视文件或文件夹并将更改提交到git仓库。"这似乎正是你要找的东西。

你可能不想把你的web浏览器作为主仓库,而是作为远程克隆仓库。在其他地方(如github或bitbucket)安装主服务器,在web服务器上克隆它。使用gitwatch监视更改,自动提交,并推送到主/github仓库。

使用像github/bitbucket这样的独立主仓库的一个很大的好处是,你可以很容易地看到/审查正在进行的更改,如果你想的话,你可以自己在本地拉下它们,而不需要直接访问web服务器上的git仓库。

对于git:

你是否也想通过git进行更改,并在web服务器上自动拉出它们?理论上,您可以在git中挂接一个post-receive钩子来为您做这件事。但是,如果同时在服务器上直接进行更改,则很容易发生合并冲突。

转念一想,要避免这种情况。坚持单一方向webserver -> local commit -> push到git主仓库

在这里插入免责声明,说明这不是一个合适的git用户,违反了各种规则,违反了最佳实践。你似乎已经很清楚了,所以我跳过它。=)

对我来说,你应该设置一个持续集成工具,如Jenkins, CruiseControl或许多其他替代方案之一,配置部署在web服务器上。

你需要

:

  1. 每个网站的存储库,可通过sftp访问,并使用 gitwatch监视以提交更改(如jszobody建议)和githook来拉/推/ask_for_help_via_email_to_a_developer_if_merge_fails
  2. 一个"中央"存储库,开发人员和钩子将推送每个提交。
  3. 一个您选择的CI工具,在中央存储库接收到的每次推送时,唤醒并将更新的内容发送到web服务器(sftp,直接fs访问…什么对你更好)。
  4. 一个web服务器,现在不需要通过git或sftp提供公共访问

优点:

  • 涵盖您的所有要求
  • 不需要中央存储库中的工作目录
  • 不需要在web服务器上打开更多端口(显然http/https除外)
  • 无需在web服务器上安装git
  • 不需要使用存储库历史记录(包含在.git/文件夹中)重载web服务器的文件系统
  • 相当灵活
  • 易于演变为全功能的CI解决方案(自动化测试,代码度量等)
  • 处理客户端不同步,因为钩子将无法合并,并且开发人员将被警告

缺点:

  • 复杂,因此设置
  • 成本高
  • 你必须通知你的客户关于新的sftp地址使用(除非你明智地使用了不同的子域,你可以只是等待 dns更新)。

我不认为有一百个开发人员部署到单个web服务器并试图跟踪他们的变化有什么意义,但是快速而肮脏的方法是使用cron工作到git add .git push --force服务器克隆到其他地方的适当镜像,在那里您可以更好地管理合并并推回服务器克隆(应该在一个不同的分支上)。从外观上看,服务器克隆(对于那些对git不可见的设计人员来说)几乎总是很脏,所以您可能想要放松cron间隔。

也许在dulwich之上自定义的东西会适合你的需要,某种基于python的web服务器来管理它的repos。https://github.com/jelmer/dulwich

最新更新