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

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

【问题讨论】:

    标签: git ftp push


    【解决方案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-ftpINSTALLgit-ftpUPLOADgit-ftpIssuegit-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 StackOverflow" >> index.txt
          git commit application/libraries/index.txt -m "I love StackOverflow"
          git ftp push
          

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

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

          希望这会有所帮助。

          【讨论】:

            【解决方案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/

                设置:

                1. cp git-transit /usr/sbin/.
                2. cd /usr/sbin
                3. chmod +x git-transmit
                4. 为您的实时应用设置 drop send
                5. 在您的 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 目录等。这只是安全问题的开始。

                    如果您有任何类型的编译或处理,您应该开始查看AntMavenBuildRSBT 等。

                    【讨论】:

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

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

                    【讨论】:

                      【解决方案15】:

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

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

                      【讨论】:

                      • 好吧,实际上 git 可以很好地用于此目的。签出标签并创建签出后、合并后等挂钩来处理所需的任何安装过程。我们曾经使用 RPM 包,但在迁移到 git 之后,它简直是矫枉过正。
                      猜你喜欢
                      • 2012-08-03
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-03-08
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多