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

Spl*_*iFF 5 git sftp autocommit

我有很多虚拟主机网站,目前正在通过 chrooted SFTP 进行更新。更新由客户(通常使用 Dreamweaver 和 CuteFTP/Filezilla)和我公司的员工(通常使用 Eclipse Team Syncronisation 和 JCraft SFTP)完成。除非客户与我们同时编辑他们的网站,否则此设置可以正常工作。在这种情况下,我们必须不断同步以检查缓慢且不可靠的更改。考虑到每个站点中的大量文件、缓慢的目录遍历和缺乏增量压缩,SFTP 传输也很慢。

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

  • 为了方便或兼容性,我们的一些客户将需要使用 SFTP,而不是 Git
  • 我不想强制使用特定的 SFTP 客户端(如 git-ftp)。我们的客户对他们自己的选择感到满意(例如 Dreamweaver 或 CuteFTP)。它们可能在任何操作系统上并且它们不使用外壳。
  • 没有我们的客户可以在本地测试,每一个细小的变化,必须上传到Web服务器去“活”马上(我们有考点所以在这种情况下,“活”并不一定意味着“生产”或“公共”)
  • 大约 90% 的更改将是小的 1 行 CSS/HTML 更改,这使得提交消息非常耗时。
  • 某些更改是通过 shell 或脚本直接在服务器 webroot 上完成的。

我想我想要的是远程 git repo 使用 webroot 作为工作目录并自动提交在那里更改的任何文件,并带有一条指示哪些文件已更改的通用消息。但是,我一直在读到,项目的主要存储库不应该有工作目录 (git init --bare),即使有,它通常也不会提交在那里所做的更改。我不在乎此设置是否会丢失提交的所有权详细信息(因为它不知道谁更改了文件,而我通常不在乎)。

如果失败,我基本上想使用 Git 作为 Rsync-over-SSH 的替代方案(Eclipse Team Sync 似乎不支持)。任何暗示另一种技术需要支持 Eclipse(我选择的工具)和 Dreamweaver(我的客户选择的主要工具)的答案。我意识到这并不理想,但没有商量余地。如果我可以强制使用 Git,我会并且这个问题将无关紧要。我必须与数百个客户打交道,主要是 Mac 上的平面设计师。

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

任何人都可以提供有关此设置的指导(Centos 6.4 linux)。

jsz*_*ody 3

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

看一下Gitwatch,它是“一个用于监视文件或文件夹并将更改提交到 git 存储库的 bash 脚本”。这似乎正是您正在寻找的东西。

您可能不希望将您的 webroot 作为主存储库,而是作为远程克隆存储库。在其他地方(例如 github 或 bitbucket)设置您的主数据库,将其克隆到网络服务器上。用于gitwatch监视更改、自动提交并推送到您的主/github 存储库。

使用像 github/bitbucket 这样的单独的主存储库的一大好处是,您可以轻松查看/查看正在进行的更改,并根据需要自行将它们拉到本地,而无需直接访问网络服务器上的 git 存储库。

对于通过 git 进行的更改

您是否还希望通过 git 进行更改并将它们自动拉到网络服务器上?理论上,您可以在 git 中连接一个 post-receive 挂钩来为您完成此操作。但是,如果同时直接在服务器上进行更改,则很容易出现合并冲突。

再想一想,避免这种情况。坚持使用单向网络服务器 -> 本地提交 -> 推送到主 git 存储库。

在此插入免责声明,说明这不是 git 的正确用户,违反了各种规则,并违反了最佳实践。您似乎已经很清楚这一点,所以我将跳过它。=)