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

时间:2013-04-03 03:53:03

标签: git sftp autocommit

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

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

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

我想我想要的是远程git repo将webroot用作工作目录并自动提交任何更改的文件,其中包含指示哪些文件已更改的通用消息。但是我继续读到项目的主要仓库不应该有一个工作目录(git init --bare),即使这样做也不会提交更改。我不在乎这个设置是否会丢失提交的所有权细节(因为它不知道谁更改了文件,我通常不在乎)。

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

PS。我意识到当客户端不能定期重新同步本地文件时会出现问题。任何有关处理的建议都将受到赞赏。

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

4 个答案:

答案 0 :(得分:2)

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

查看Gitwatch“bash脚本来查看文件或文件夹并提交对git仓库的更改。”这似乎只是你要找的东西。

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

使用像github / bitbucket这样的独立主要仓库的一大好处是,您可以轻松查看/查看正在进行的更改,并在需要时自行将其下载到本地,而无需直接访问git仓库中的git仓库。网络服务器。

对于通过git进行的更改

您是否也希望通过git进行更改并将其自动拉到网络服务器上?理论上你可以在git中连接一个post-receive hook来为你做这个。但是,如果同时在服务器上直接进行更改,则很容易出现合并冲突。

第二个想法,避免这个。坚持使用单向网络服务器 - >本地提交 - >推送到主要的git repo。

在此处插入免责声明,了解这不是git的正确用户,违反了各种规则,违反了最佳做法。你似乎已经意识到了这一点,所以我会跳过它。 =)

答案 1 :(得分:2)

对我来说,您应该设置一个持续集成工具,例如JenkinsCruiseControl或其中一个many other alternatives,配置为在Web服务器上部署。

你需要:

  1. 每个网站的存储库,可通过sftp访问,并通过 gitwatch观看提交更改(如jszobody建议)和 githook pull / push / ask_for_help_via_email_to_a_developer_if_merge_fails
  2. 一个“中央”存储库,开发人员和钩子将推送每个提交。
  3. 您选择的CI工具,在中央存储库收到的每次推送中,唤醒并将更新的内容发送到网络服务器(sftp,直接fs访问......什么对您更好)。
  4. 一个网络服务器,现在不需要通过git或sftp提供公共访问。
  5. 优点:

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

    缺点:

    • 复杂,因此设置昂贵
    • 您必须告知您的客户有关要使用的新sftp地址(除非您明智地使用了不同的子域,并且您可以等待以便DNS更新)。

答案 2 :(得分:1)

我没有看到让一百个开发人员部署到单个Web服务器并尝试跟踪他们的更改的意义,但快速而肮脏的方式是使用cron作业git add .和{{ 1}}服务器克隆到其他地方的适当镜像,在那里您可以更好地管理合并并推回服务器克隆(应该在不同的分支上)。服务器克隆(对于git不可见的设计者)几乎一直都是脏的,所以你可能想要放松cron间隔。

答案 3 :(得分:0)

也许在德威之上定制的东西可以满足您的需求,某种基于python的网络服务器可以用它来管理回购。 https://github.com/jelmer/dulwich