You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Git时间戳在bash脚本中实现类似cp -u的自动同步效果

Git实现类似cp -u的自动同步方案

核心逻辑

利用Git原生合并策略处理无重叠的文件修改,全程无人工干预,适配你两台设备修改不同文件的场景。

完整自动化bash脚本

#!/bin/bash
# 替换为你本地仓库的实际路径
REPO_PATH="/home/xxx/your_repo"
# 替换为你实际使用的分支名,比如main、master
TARGET_BRANCH="main"

cd "${REPO_PATH}" || exit 1

# 1. 提交本地自动化修改的robot.txt
git add robot.txt
# 仅当有实际改动时提交,避免空提交报错
if ! git diff --cached --quiet; then
    git commit -m "auto update robot.txt: $(date +%Y%m%d_%H%M%S)"
fi

# 2. 拉取远程最新内容,自动合并无冲突改动,冲突时优先保留本地修改
# 不需要加--allow-unrelated-histories参数,避免不必要的冲突提示
git pull origin "${TARGET_BRANCH}" --no-rebase -X ours

# 3. 推送本地更新到远程
git push origin "${TARGET_BRANCH}"

方案说明

  • 你两台设备分别修改robot.txt和math.html两个完全不重叠的文件,Git默认的递归合并策略可以自动识别这类无冲突修改,直接完成合并,不会弹出需要手动处理的冲突提示。
  • 之前使用git merge --allow-unrelated-histories出现异常冲突,是因为该参数本就是用于合并两个无共同提交基础的独立分支,正常同一个分支的同步完全不需要加这个参数。
  • 合并参数-X ours表示如果出现极端冲突(比如有其他人也修改了robot.txt),优先保留本地自动化生成的版本,如果你需要优先保留远程版本可以替换为-X theirs。

该方案完全实现类似cp -u的效果:本地更新的文件会推送覆盖远程旧版本,远程其他更新的文件会自动同步到本地,不会覆盖本地更新的内容。

内容的提问来源于stack exchange,提问作者SmoothKen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 07:18:01