【问题标题】:Syncing sftp file system with version control将 sftp 文件系统与版本控制同步
【发布时间】:2013-02-05 18:17:28
【问题描述】:

我最近开始为一个大学社团管理一个(小型)网站,显然(根据最后一个管理它的人)访问该网站文件的方式是通过 SFTP。我使用 Linux Mint/Nautilus,所以这没问题。但是,我也有一个本地副本,可以在上传之前使用 Apache/localhost 测试我的更改(暂时忽略我无法真正让它工作的那一刻......)。我使用 Git 来跟踪我的更改。

有什么方法可以区分 SFTP 版本和我自己的版本,然后只更新更改的文件(基本上是通过 SFTP 进行的某种同步),并可能将版本控制也纳入其中?

顺便说一下,我之前对此没有什么经验,因此不胜感激。这同样适用于相当简单的方法来做事,而不一定是最时尚但最可怕的配置方式。

谢谢!

【问题讨论】:

    标签: git sync sftp


    【解决方案1】:

    通过 SSH 使用 Rsync

    如果他们运行的是真正的 SSH 服务器,而不是纯 SFTP 服务器,那么您可以使用 rsync 将本地更改推送到远程。例如:

    cd /my/project/directory
    rsync -PSauve ssh --exclude=.git * $LOGNAME@example.com:/var/www/
    

    您可能还想使用--delete 选项,但如果有可能只存在于服务器端的文件需要保留,请谨慎。

    使用 SFTP 进行树操作

    如果您不能使用 rsync,您可以将上游文件复制到本地分支,对它们进行比较,合并您想要的任何更改,然后将结果推送回来。例如:

    cd /my/project/directory
    git checkout -b upstream
    sftp -r user@example.com:/var/www/\* .
    git add .
    git commit -m 'Import current files from upstream.'
    git checkout master
    git diff upstream
    : # merge or modify files as needed
    sftp user@example.com:/var/www < <(echo 'put -r *')
    

    使用 SCP 而不是 SFTP

    如果您不能使用 rsync,则 SCP 在非交互式操作方面通常比 SFTP 好得多。例如:

    scp -r . user@example.com:/var/www/
    

    SCP 提供更简洁的界面,并支持符号链接(SFTP 不支持),但可能对您的用例有其他限制。特别是,它可能不会打印它复制的空目录的名称;这是否重要取决于您。

    【讨论】:

    • 事实证明服务器确实在运行 ssh,所以我可以用它连接到它并使用 rsync!谢谢。
    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多