仅使用git将网站的已更改部分部署到ftp(对于git为svn2web)

时间:2009-05-14 20:55:47

标签: git deployment mercurial version-control

我的网站上有很多大图片文件。使用git维护源(以及图像)。我希望通过ftp将其部署到类似bluehost的廉价服务器上。

我不希望每次都部署所有网站(这样我就不必一遍又一遍地上传太多未更改的文件),而是大致做以下几点:

  1. 在git存储库中,使用“已部署”标记标记上次部署的修订版。
  2. 当我说“部署修订版X”时,找出哪些文件在修订版X和标记为部署的版本之间发生了变化,并仅上传它们。
  3. 它在精神上与svn2web相似。但我想要DVCS。将考虑Mercurial替代方案。

    这是一个非常简单的编写脚本,但如果网上有类似的脚本,我宁愿不重新发明轮子。

    Capistrano和fab似乎只知道如何在他们的SCM集成中推动整个修订。所以我认为我现在不能使用它们。

7 个答案:

答案 0 :(得分:6)

git-ftp脚本可能就是您要找的内容。它需要更改本地git存储库并将其同步到ftp上的远程git仓库。

我通过托管使用--bare option创建的git仓库来使用它。把它放在我的ftp服务器上。

跑了./git-ftp.py。它会提示输入ftp用户名,密码,ftp主机,本地git repo路径,远程git repo路径(裸存储库的位置)。

然后它连接到ftp git repo,然后单独发送差异。 (它使用git-python库来获取所需的信息)。

该脚本几乎没有问题。它似乎总是提示用户名详细信息,我不得不在第68行注释。

#ftp.voidcmd('SITE CHMOD 755 ' + node.name).

但这些事情很容易解决。

<强>替代

如果您使用的是nix平台,则可以使用curlftpfs。它会将您的ftp帐户挂载为设备目录,您可以从中执行所有正常的git操作(推送,拉取)。当然,这个解决方案不是特定于git的。

您需要在FTP上共享的repo上使用上面提到的bare选项以及运行 在通过FTP共享它之前,在回购中git update-server-info

警告:如果您打算让多个用户写入您的git仓库,这不是一个好主意。由于FTP没有LOCK访问机制。你最终会得到一个腐败的回购。在投入生产之前进行测试。

答案 1 :(得分:6)

我创建了一个名为git-deploy的脚本,希望它有所帮助。

答案 2 :(得分:1)

您可以将最新部署的修订版存储在文件中,然后您只需获取已更改文件的名称:

$ git diff --name-only $deployed $latest

使用相应的sha-1代码替换,或者$ latest可以是“master”,例如。

答案 3 :(得分:1)

另一种选择是使用git archive

当然,正如乔伊在他的“git archive as distro package format”中提到的那样:

  

使用git(或其他rcs)存档作为分发源包格式的棘手部分是处理原始的上游tarball。

     
      
  • 一种方法是尝试创建一个不包含上游tarball中存在的对象的git存档。然后,要解压缩源包,您需要解压缩上游tarball,将其中的文件转换为git对象并将它们添加到.git目录中。
      这看起来似乎有可能实现,但你需要了解很多关于git内部的知识来从git repo中删除多余的对象并从tarball中重新生成它们。

  •   
  • 另一种方法是将原始的上游tarball保留在git存档中,然后源包将完全由git存档组成。这不具有相同的最小带宽上传行为 - 除非您可以“git push”更改以进行上传

  •   
     

在git中存储大量上游tar包效率不高,但脚本 pristine-tar 负责:

     

pristine-tar可以仅使用一个小的二进制增量文件和一个源的副本来重新生成一个原始的上游tarball,该副本可以是一个修订控制结账。
  该软件包还包括一个pristine-gz命令,它可以重新生成一个原始的.gz文件   增量文件旨在与源代码一起检入修订控制,从而允许从修订控件中提取原始tarball。

header of this perl script pristine-tar

中的更多详细信息

答案 4 :(得分:1)

你也可以使用wput(wput --timestamping --reupload --dont-continue) - 就像wget只是用于ftp上传

答案 5 :(得分:0)

Mercurial的小型BASH解决方案:hg-deploy

答案 6 :(得分:0)

来自git-ftpgit-ftp push命令似乎运作良好。

安装

sudo apt-get install git-ftp

安装后,配置您的ftp帐户

git config git-ftp.url ftp.example.net
git config git-ftp.user your-ftp-user
git config git-ftp.password your-secr3t

然后第一次这样做

git-ftp init

然后,对于每一个变化,你只需要

git add -A
git commit -m "update"
git-ftp push

文件将上传到用户主页~/目录。