如何在本地仓库间使用Git或等效方案实现代码同步?
本地代码同步方案:Git 或 rsync 实现需求
一、用本地Git实现同步(支持.gitignore规则)
你可以利用Git的文件跟踪机制和.gitignore规则完成同步,步骤如下:
- 初始化Dev目录为Git仓库:
进入Dev目录执行:cd ~/dev/remote git init - 配置忽略规则:
在Dev目录创建.gitignore文件,写入需要排除的内容:# 忽略backups目录 backups/ # 忽略所有点文件 .* - 提交初始版本:
将需要同步的文件加入Git跟踪:git add . git commit -m "初始提交" - 同步到Localhost目录:
每次修改代码并提交后,执行以下命令将Git跟踪的文件导出到Localhost:
该命令会自动排除git archive HEAD | tar -x -C /var/www/html.gitignore里的内容,将仓库中所有已跟踪文件覆盖到目标目录。如果需要增量更新,也可以结合git ls-files和rsync,只同步已跟踪文件:git ls-files | rsync -av --files-from=- ~/dev/remote/ /var/www/html/
二、用rsync实现更高效的增量同步(推荐)
rsync是专门的文件同步工具,支持类似.gitignore的排除/包含规则,增量同步效率比cp -ur更高:
- 配置同步规则:
创建规则文件(比如~/.sync_rules),写入排除规则:
如果想用白名单(比如只同步# 排除backups目录 backups/ # 排除所有点文件 .*.php和.css),规则写成:# 先包含所有目录,确保rsync能进入子目录 + */ # 包含指定文件类型 + *.php + *.css # 排除其他所有内容 - * - 执行同步命令:
- 用排除规则同步:
rsync -av --exclude-from='~/.sync_rules' ~/dev/remote/ /var/www/html/ - 用白名单规则同步:
rsync -av --include-from='~/.sync_rules' ~/dev/remote/ /var/www/html/
-a:归档模式,保留文件权限、修改时间等属性,递归同步子目录-v:显示同步详情(可选,方便排查问题)--exclude-from/--include-from:指定规则文件,规则格式和.gitignore兼容
- 用排除规则同步:
- 简化操作:
把同步命令做成Shell别名,比如在~/.bashrc或~/.zshrc中添加:
之后直接输入alias sync-dev="rsync -av --exclude-from='~/.sync_rules' ~/dev/remote/ /var/www/html/"sync-dev就能完成同步。
总结
- 如果已经习惯Git工作流,用Git结合归档/rsync的方式可以直接复用
.gitignore规则; - 如果更关注同步效率和操作简洁性,rsync是更合适的选择,无需Git提交步骤,直接实现增量同步和规则过滤。
内容的提问来源于stack exchange,提问作者John P
相关产品推荐
相关产品推荐

