如何将所有打开的文件上传到 NetBeans 中的远程主机 (PHP)

How to upload all open files to remote host in NetBeans (PHP)

我已经在各种目录中编辑了几十个文件,我想先将它们上传到测试服务器,然后再上传到生产服务器(在 NetBeans 中设置不同的连接)。

(编辑: 由于特定于服务器的原因,我也不能为此使用版本控制。我只有 FTP 访问权限。甚至 SFTP。没有 shell。)

因此,在 NetBeans 中,我们可以通过键盘快捷键或上下文菜单轻松上传单个文件或递归目录。

以前我是用快捷键上传当前文件,然后CTRL+W,然后重复,直到上传完所有文件。但是因为我想上传到两台服务器,所以这不是一个选项。还有,文件多的时候怎么用都比较不方便

使用 NetBeans 的同步似乎也不是一个选项,因为在我的源中有数以万计的文件。一个上传目录也可能有超过10,000个文件(这是FTP服务器愿意服务的限制,我无法重新设计系统以避免单个目录中有太多文件)。

我想我可以计算出所有包含编辑文件的目录并尝试同步它们而不是整个源,但这也不是一件容易的事,因为打开了几十个文件(我必须将鼠标悬停在每个文件上选项卡并查看它来自哪个目录)。即便如此,NetBeans 的同步也完全是一种手动体验。

有人可以建议一种半自动(至少)方法来上传在当前活动选项卡中打开的文件吗?

我还想避免比较本地和远程的完整内容,因为远程有千兆字节的内容。

本地的一些文件也不同于远程的,必须保持原样(特定于服务器的配置)。这些显然不在当前打开的文件中。

注意:此解决方案适用于Windows,并假设要上传的文件都是本项目中打开的文件。

所以,这不是我一直在寻找的理想解决方案,但它解决了我的问题。

首先,通过执行此操作,我们可以获得项目当前打开的文件列表(注意:虽然这与在选项卡中打开的文件不完全相同,但足以解决我的问题,因为我有一个单独的选项卡用于以任何方式与该特定项目相关的所有文件):

  1. 打开 NetBeans 项目文件夹
  2. 在项目文件夹中,打开nbproject\private\private。xml
    它将有一个为此项目打开的文件列表,例如:

    <file>file:/W:/xampp/htdocs/index.php</file>
    <file>file:/W:/xampp/htdocs/templates/main.html</file>
    <file>file:/W:/xampp/htdocs/js/jquery.js</file>
    
  3. 将其复制到一个单独的文本文件,并切断直到并包括远程根 (htdocs) 级别的路径
    不要忘记修复斜杠,例如:

    index.php
    templates\main.html
    js\jquery.js`
    

    现在我们有了文件列表,我们可以将它们包括目录结构复制到一个临时位置,我们将从那里将它们上传到 FTP

  4. 创建批处理文件prepare-patch.bat,内容如下:

    @echo off
    SETLOCAL EnableDelayedExpansion
    for /F "tokens=*" %%A in ('type %1') do (
        set original_path=%~2%%A
        set destination_path=%~3%%A
        echo Copying `!original_path!` to `!destination_path!`
        echo f | xcopy /Y /Q "!original_path!" "!destination_path!"
    )
    

    需要 3 个参数:
    1) 文件列表的路径
    2) htdocs 根路径
    3) 临时目录路径

  5. 这样使用:

    w:\prepare-patch.bat "D:\work\patched_files.txt" "w:\xampp\htdocs\" "w:\temp\"
    

现在临时目录包含了完整文件夹结构的所有文件:

w:\>dir /s /b w:\temp
w:\temp\index.php
w:\temp\js
w:\temp\templates
w:\temp\js\jquery.js
w:\temp\templates\main.html

您可以连接到 FTP,导航到 htdocs 根目录并从这个临时目录简单地上传覆盖。

当然,这比理想情况下的工作量要多得多,但仍然比有几十个文件时一个一个上传文件要快。