Git推入生产(FTP)


130

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

Answers:


162

最近在Git Wiki中添加了一些工具:

RenéMoser的git-ftp是一个简单的Shell脚本,用于通过Git方式进行FTP。使用git-ftp.sh仅将Git跟踪的文件上传到FTP服务器,该文件自上次上传以来已更改。这样可以节省时间和带宽。即使您使用不同的分支,git-ftp.sh也会知道哪些文件不同。没有普通的FTP客户端可以做到这一点。

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


3
使用git-ftp,有没有办法只将一个子目录(例如html5样板的发布文件夹)推送到指定的ftp目录?
帮派

如果团队中有几个开发人员,该怎么办。仍然可以使用此脚本吗?
Trilliput

@Trilliput:有点晚了,但是是的,网络上的中间服务器/ vm是每个人都推送的地方,然后:github.com/ezyang/git-ftp#using-a-bare-repository-as-a -proxy
Pranav 2013年

github.com/banago/PHPloy也做了类似的事情,但与子模块一起使用,我怀疑其中提到的某些工具可能会遇到困难
西蒙·伊斯特

git-ftp的主要问题(不确定脚本或python)我尝试了此问题,当上传大块文件和长文件列表时,它非常糟糕。
indianwebdevil


11

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

https://github.com/banago/PHPloy

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

做完了!

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


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. 光盘/ usr / sbin
  3. chmod + x git-传输
  4. 为您的实时应用发送设置发送
  5. 在您的git仓库中运行git-transmit。

1
该脚本对于选择“最近更新的文件”非常笨拙。查看此前叉,以找到更优雅的解决方案。
quickshiftin 2014年

除此之外,您可能只想传输跟踪的和未提交的文件。这是一个很小的脚本,它可以做到这一点:gist.github.com/borisdiakur/37b8f512f6f8865b79c7
borisdiakur 2016年

5

严格来讲,这不是git的目的。但是,如果您的源代码不需要编译或处理,例如说一个完全由html和javascript文件等组成的网站,则可以在Web服务器上复制存储库并git pull从服务器上使用它来保持它的正常运行。 -至今。注意,我将配置您的网络服务器以隐藏git目录等。而这仅仅是安全问题的开始。

如果您进行任何形式的编译或处理,则应开始查看AntMavenBuildRSBT等。


29
唯一的问题是,当您无权访问生产服务器时,即它可能是简单的共享托管,仅具有FTP访问权限。
dodgy_coder 2012年

4

您可以使用Deployhq.com,它的工作原理像一个超级按钮,您唯一需要做的就是设置存储库和FTP帐户。

他们当前使用以下版本控制系统:

Git,Subversion,Mercurial。

托管资源库

  • 的GitHub
  • 比特桶
  • 亚搏体育app
  • 程式库

在此处输入图片说明




1

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

如另一个答案中所述,这是Python git-ftp.py脚本,它执行类似的操作。

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

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


0

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

无论如何,只要构建了.RPM(或EXE或其他文件),您都可以将其通过FTP传输到生产系统,然后像安装其他任何软件包一样安装它。


5
好吧,实际上git可以很好地利用此功能。签出标签并创建签出后,合并后等挂钩,以处理所需的任何安装过程。我们曾经使用RPM软件包,但是在改用git之后,这简直就是过分杀伤力。
d11wtq 2010年

0

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



0

我为此付出了很多努力。我想出了一个简单的方法来从各种来源(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"

希望这可以帮助。


0

您可以尝试FTPloy ...

https://ftploy.com

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

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

您有一个免费的项目可以尝试。我目前正在使用一个小型php网站,并且效果很好。该网站上有一些错误,但它是一个活跃的项目,因此至少他们正在该网站上工作。


1
我过早发布了这个答案。FTPloy尚未完全“准备就绪”,并且存在许多错误。我无法正常工作。我正在使用DeployHQ,效果很好。
戴夫·汤普森

0

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

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

如果您不喜欢为带有小团队的数十个小型项目每月支付费用,则特别方便。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.