如何基于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
相关产品推荐
相关产品推荐

