git - 使用版本控制同步 sftp 文件系统

标签 git sync sftp

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

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

顺便说一句,我之前对此经验很少,因此不胜感激。这同样适用于合理的万无一失的方法来做事,而不是一定是最圆滑但可怕的配置方式。

谢谢!

最佳答案

通过 SSH 使用 Rsync

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

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

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

使用 SFTP 进行树操作

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

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 提供了一个更清晰的界面,并支持符号链接(symbolic link)(SFTP 不支持),但对于您的用例可能还有其他限制。特别是,它可能不会打印它复制的空目录的名称;这是否重要取决于您。

关于git - 使用版本控制同步 sftp 文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714178/

相关文章:

git - 当我将发布分支 merge 到 main 中,然后 merge 到 dev 中以 merge 那里的更改时,我的开发人员说它是 X 次提交,X 次提交在后面。为什么?

asynchronous - 编写/转换 Meteor 同步函数

Java 垃圾收集和图形处理方法

java - 如何使用 SSHJ 从 SFTP 服务器获取预过滤的文件列表

rest - 对于数据传输,REST API 与 SFTP,哪个更安全?

git - 使用快速导入/导出流的 SVN 到 Git

git - 为什么我不能使用 VS Code 直接编辑 git 索引中的分阶段更改?

php - cURL sftp 公钥认证失败 "Callback Error"

Git 相当于 "hg id"?

javascript - 在nodeJs中使用动态参数串联运行函数