Git 推送到生产环境 (FTP)

Posted

技术标签:

【中文标题】Git 推送到生产环境 (FTP)【英文标题】:Git Push into Production (FTP) 【发布时间】:2011-02-26 08:45:54 【问题描述】:

我想知道是否有一种简单的方法可以将 GIT 存储库推送到生产环境(在 FTP 服务器上)? 谢谢

【问题讨论】:

【参考方案1】:

如果您使用的是 MacOS 并且喜欢 GUI,请查看 https://gitftp-deploy.com/。

这是一个不错的小应用程序,它使用 Git 跟踪更改并通过 FTP 仅上传更改的文件。

如果您不喜欢为数十个小团队的小型项目支付月费,这将特别方便。

【讨论】:

【参考方案2】:

您可以使用 Deployhq.com,它就像一个魅力,您唯一需要做的就是设置您的存储库和 FTP 帐户。

他们目前有以下版本控制系统:

Git、Subversion、Mercurial。

托管存储库

GitHub 比特桶 GitLab 代码库

【讨论】:

【参考方案3】:

https://www.deployhq.com/

一个项目免费,效果非常好。

【讨论】:

【参考方案4】:

你可以试试 FTPloy ...

https://ftploy.com

“将更改推送到 GitHub 或 Bitbucket。”

“将更改自动部署到您的服务器”

您有一个免费项目可以试用。我目前正在使用一个小型 php 网站,它运行良好。网站上有一些错误,但它是一个活跃的项目,所以至少他们正在努力。

【讨论】:

我过早地发布了这个答案。 FTPloy 还没有完全“准备好生产”,并且存在很多错误。我无法让它工作。我正在使用运行良好的 DeployHQ。【参考方案5】:

我费了很大劲才弄清楚这一点。我已经找到了一种从各种来源(git-ftpINSTALL、git-ftpUPLOAD、git-ftpIssue、git-ftpPUSH)完成这项工作的简单方法。您可以阅读以供参考,但没有必要,因为我在下面提到了一步一步的过程。

第一件事:在 MAC OS 上使用 brew 安装 git 和 curl

brew install git
brew install curl --with-ssl --with-libssh2
brew install git-ftp

运行以下命令:

git clone https://github.com/git-ftp/git-ftp.git
cd git-ftp
git tag # see available tags
git checkout <tag> # checkout the latest tag by replacing <tag>
sudo make install

使用 git 更新

git pull
git tag # see available tags
git checkout <tag> # checkout the latest tag by replacing <tag>
sudo make install

设置

git config git-ftp.url YourFtpServerName.Net
git config git-ftp.user FtpUserName
git config git-ftp.password YourPassword

上传所有文件

git ftp init

或者如果文件已经存在

git ftp catchup

工作和部署

echo "Hello ***" >> index.txt
git commit application/libraries/index.txt -m "I love ***"
git ftp push

如果出现错误:pathspec 'index.txt' 与 git 已知的任何文件都不匹配。这意味着该文件尚未暂存,因此请添加该文件,然后尝试提交。

git add application/libraries/index.txt
git commit application/libraries/index.txt -m "I love ***"

希望这会有所帮助。

【讨论】:

【参考方案6】:

您始终可以尝试使用 http://linuxconfig.org/mount-remote-ftp-directory-host-locally-into-linux-filesystem 将 ftp 挂载到本地目录。

那你就可以像this一样使用了。

【讨论】:

【参考方案7】:

我发现 PHPloy 是一个很棒的工具,可以通过 FTP 将您的 Git 提交发送到远程服务器。它从命令行运行,用 PHP 编写(甚至可以检测子模块的变化)。

https://github.com/banago/PHPloy‎

git commit ...
phploy -s staging
phploy -s production

完成!

(免责声明:在使用了一段时间后,我现在贡献了一些代码补丁和改进,使其与 Windows 兼容。)

【讨论】:

【参考方案8】:

如果您更喜欢 GUI,请使用 SourceTree,您可以轻松设置使用上述 git-ftp 的自定义操作。 Push a Git repository to an FTP的设置(Mac)简要说明

【讨论】:

@Julix 对于提到的文章。【参考方案9】:

最近添加到Git wiki的一些工具:

René Moser 的git-ftp 是一个简单的 用于对 Git 进行 FTP 的 shell 脚本 大大地。使用 git-ftp.sh 只上传 Git 跟踪文件到 FTP 服务器, 自上次以来发生了变化 上传。这节省了时间和带宽。 即使你玩不同的 分支,git-ftp.sh 知道哪些文件 是不同的。没有普通的FTP客户端 可以做到这一点。

git-ftp by Edward Z. Yang 是 用python编写的简单脚本 在 Git 存储库中上传文件 通过 FTP,只传输新文件 并删除旧文件。

【讨论】:

使用git-ftp,有没有办法将一个子目录(例如html5样板的发布文件夹)推送到指定的ftp目录? 如果团队中有多个开发人员怎么办。这个脚本还能用吗? @Trilliput:这里有点晚了,但是是的,网络上的中间服务器/vm作为每个人推送的地方,然后:github.com/ezyang/git-ftp#using-a-bare-repository-as-a-proxy github.com/banago/PHPloy‎ 也做了类似的事情,但适用于子模块,我怀疑上面提到的一些工具可能会遇到困难。 git-ftp的主要问题(不确定是脚本还是python)我试过上传大块文件和长文件列表时非常糟糕。【参考方案10】:

如果您使用的是 Mac 并且有 Transmit,我建议您使用以下 git-tranmit 脚本 (https://gist.github.com/379750)。它使用 DockSend 仅发送最后更新的文件。如果您不熟悉 DockSend,请查看http://www.panic.com/blog/2010/11/15-secrets-of-transmit/。

设置:

    cp git-transit /usr/sbin/. cd /usr/sbin chmod +x git-transmit 为您的实时应用设置 drop send 在您的 git 存储库中运行 git-transmit。

【讨论】:

这个脚本在选择“最后更新的文件”方面相当笨拙。查看this fork 以获得更优雅的解决方案。 除此之外,您可能只想传输已跟踪和未提交的文件。这是一个可以做到这一点的小脚本:gist.github.com/borisdiakur/37b8f512f6f8865b79c7【参考方案11】:

这是一个 PHP 脚本,几乎可以自动将 git-diff 上传到 FTP 服务器:

http://code.google.com/p/upload-git-diff-with-ftp/

【讨论】:

【参考方案12】:

这里有一个 Ruby 脚本 - Ruby git-deploy via FTP or SSH,它仅通过 FTP 或 SSH 上传 git repo 中更改的文件。

正如另一个答案中提到的,这里是 Python git-ftp.py script,它做了类似的事情。

这里是git-ftp的shell脚本版本。

还有一个名为 git-deploy 的 Ruby gem 项目,它允许您使用 git push 命令通过 git 远程设置自定义部署,其方式与 Heroku 和 Azure 服务相同。对于这个,您可能需要编写自定义方法以通过 FTP 进行部署,我认为它假定您具有对生产服务器的 SSH 访问权限。

【讨论】:

【参考方案13】:

严格来说,这不是 git 的用途。但是,如果您的源是不需要编译或处理的东西,比如一个由 完全 html 和 javascript 文件等组成的网站,您可以在您的网络服务器上克隆一个 repo 并使用来自服务器的git pull 以使其保持最新。请注意,我会将您的网络服务器配置为隐藏 git 目录等。这只是安全问题的开始。

如果您有任何类型的编译或处理,您应该开始查看Ant、Maven、BuildR、SBT 等。

【讨论】:

唯一的问题是当您无法访问生产服务器时,即它可能是简单的共享主机,只有 FTP 访问。【参考方案14】:

将其添加为远程,然后您可以推送到它,但是仅仅推送代码是不够的,它需要与工作树合并。最简单的方法是反过来,在服务器上有一个工作树,然后获取并合并到其中。

【讨论】:

【参考方案15】:

如果您要将代码投入生产,我建议使用“安装程序”(例如 RPM 包)来安装您的代码。这样,它将被标记版本,您将能够利用安装程序包来支持对生产代码的更新。 Git 并不是真正为支持生产安装而设计的,它旨在跟踪代码本身的更改。

无论如何,只要构建了 .RPM(或 EXE 或其他),您就可以将其 FTP 到生产系统并像安装任何其他软件包一样安装它。

【讨论】:

好吧,实际上 git 可以很好地用于此目的。签出标签并创建签出后、合并后等挂钩来处理所需的任何安装过程。我们曾经使用 RPM 包,但在迁移到 git 之后,它简直是矫枉过正。

以上是关于Git 推送到生产环境 (FTP)的主要内容,如果未能解决你的问题,请参考以下文章

Git Release 需要回一个版本

清单第 1 行,第 1 列,推送到生产时的语法错误

VCS用于开发,测试,生产环境[关闭]

Git Config 仅针对一个分支排除文件

Git分支实战入门详细图解

我需要在生产环境中运行“npm run prod”吗?