我有很多虚拟主机网站,目前正在通过chrooted SFTP进行更新。更新由客户端(通常使用Dreamweaver和CuteFTP / Filezilla)和我公司的员工完成(通常使用Eclipse Team Syncronisation with JCraft SFTP)。除非客户端在我们同时编辑他们的网站,否则此设置无效。在这种情况下,我们必须不断同步以检查缓慢且不可靠的变化。鉴于每个站点中的文件数量很大,目录遍历缓慢且缺少delta压缩,SFTP传输速度也很慢。
我想转向(部分)Git工作流程主要是为了从delta压缩中受益,但也引入了一些基本的版本控制。我说“基本”是因为在将更改捆绑到git提交之前在本地开发和测试的典型git工作流程不适合我们的需求,因为:
我想我想要的是远程git repo将webroot用作工作目录并自动提交任何更改的文件,其中包含指示哪些文件已更改的通用消息。但是我继续读到项目的主要仓库不应该有一个工作目录(git init --bare),即使这样做也不会提交更改。我不在乎这个设置是否会丢失提交的所有权细节(因为它不知道谁更改了文件,我通常不在乎)。
如果失败,我基本上想用Git作为Rsync-over-SSH的替代品(Eclipse Team Sync似乎不支持)。任何建议另一种技术的答案都需要支持Eclipse(我选择的工具)和Dreamweaver(我的客户选择的主要工具)。我意识到这不是理想的,但它不可协商。如果我可以强制使用Git,那么这个问题将无关紧要。我必须与数百个客户打交道,主要是Mac上的平面设计师。
PS。我意识到当客户端不能定期重新同步本地文件时会出现问题。任何有关处理的建议都将受到赞赏。
任何人都可以提供有关此设置的指导(Centos 6.4 linux)。
答案 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)
对我来说,您应该设置一个持续集成工具,例如Jenkins,CruiseControl或其中一个many other alternatives,配置为在Web服务器上部署。
你需要:
gitwatch
观看提交更改(如jszobody建议)和 githook pull / push / ask_for_help_via_email_to_a_developer_if_merge_fails 优点:
.git/
文件夹中)重载Web服务器的文件系统缺点:
答案 2 :(得分:1)
我没有看到让一百个开发人员部署到单个Web服务器并尝试跟踪他们的更改的意义,但快速而肮脏的方式是使用cron作业git add .
和{{ 1}}服务器克隆到其他地方的适当镜像,在那里您可以更好地管理合并并推回服务器克隆(应该在不同的分支上)。服务器克隆(对于git不可见的设计者)几乎一直都是脏的,所以你可能想要放松cron间隔。
答案 3 :(得分:0)
也许在德威之上定制的东西可以满足您的需求,某种基于python的网络服务器可以用它来管理回购。 https://github.com/jelmer/dulwich