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

标签 git sftp autocommit

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

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

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

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

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

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

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

最佳答案

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

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

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

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

对于通过 git 进行的更改:

您是否也希望通过 git 进行更改并将它们自动 pull 到网络服务器上?从理论上讲,您可以在 git 中连接一个接收后 Hook 来为您完成这项工作。但是,如果同时直接在服务器上进行更改,则很容易发生 merge 冲突。

再三考虑,避免这种情况。坚持单向网络服务器 -> 本地提交 -> 推送到主 git 仓库。

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

关于git - 如何为网站设置混合 (S)FTP + Git 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778543/

相关文章:

php - OpenShift 操作 Hook 部署问题

git - 从 PowerShell 调用 git 命令

java - 使用线程池和 BlockingQueue 重新架构 I/O 密集型 Java Web 服务

java - 组合使用 MySQL 和 BoneCP 时 jdbc executeBatch 挂起

connection-pooling - 在 HikariCP 中连接时重置(自动提交)

带有神器的 Git

node.js - 使用 gulp-sftp 仅上传更改的文件

ssh - SFTP,SSH和SSH隧道

c# - 发生未处理的异常后使用 C# Mysql Connector 禁用自动提交

git - Git 中的最大文件大小和最大存储库大小?