web-map/sync_workflow.md

129 lines
3.2 KiB
Markdown
Raw Normal View History

# Git多远程仓库同步工作流
## 仓库配置
- **upstream**: `http://192.168.189.2:8418/amr.core/web-amr` (镜像仓库,只读)
- **origin**: `http://192.168.189.2:8418/xudan/web-map` (你的仓库,可读写)
## 日常工作流程
### 1. 从镜像仓库获取最新代码
```bash
# 获取镜像仓库的最新代码
git fetch upstream
# 查看镜像仓库的更新
git log HEAD..upstream/master --oneline
```
### 2. 合并镜像仓库的最新代码到本地
```bash
# 方法1: 使用merge (推荐,保留完整历史)
git merge upstream/master
# 方法2: 使用rebase (如果你想要线性历史)
git rebase upstream/master
```
### 3. 推送到你的仓库
```bash
# 推送到你的仓库
git push origin master
```
## 完整的同步脚本
### 方法1: 使用merge
```bash
#!/bin/bash
echo "开始同步镜像仓库..."
# 获取镜像仓库最新代码
git fetch upstream
# 检查是否有新的提交
if git log HEAD..upstream/master --oneline | grep -q .; then
echo "发现镜像仓库有新的提交,开始合并..."
# 合并镜像仓库的代码
git merge upstream/master
# 推送到你的仓库
git push origin master
echo "同步完成!"
else
echo "镜像仓库没有新的提交,检查本地是否有未推送的修改..."
# 检查是否有本地修改需要推送
if git log origin/master..HEAD --oneline | grep -q .; then
echo "发现本地有未推送的修改,推送中..."
git push origin master
echo "推送完成!"
else
echo "没有需要同步的内容。"
fi
fi
```
### 方法2: 使用rebase (如果你想要更干净的历史)
```bash
#!/bin/bash
echo "开始同步镜像仓库..."
# 获取镜像仓库最新代码
git fetch upstream
# 检查是否有新的提交
if git log HEAD..upstream/master --oneline | grep -q .; then
echo "发现镜像仓库有新的提交开始rebase..."
# rebase到镜像仓库的最新代码
git rebase upstream/master
# 推送到你的仓库 (可能需要force push)
git push origin master --force-with-lease
echo "同步完成!"
else
echo "镜像仓库没有新的提交,检查本地是否有未推送的修改..."
# 检查是否有本地修改需要推送
if git log origin/master..HEAD --oneline | grep -q .; then
echo "发现本地有未推送的修改,推送中..."
git push origin master
echo "推送完成!"
else
echo "没有需要同步的内容。"
fi
fi
```
## 推荐的工作流程
1. **每天开始工作前**: 运行同步脚本,确保有最新的镜像仓库代码
2. **进行本地开发**: 正常开发你的功能
3. **提交本地修改**: `git add``git commit`
4. **推送前再次同步**: 运行同步脚本,确保没有冲突
5. **推送到你的仓库**: `git push origin master`
## 处理冲突
如果在合并时遇到冲突:
1. 解决冲突文件
2. `git add` 冲突文件
3. `git commit` 完成合并
4. `git push origin master`
## 注意事项
- 使用 `--force-with-lease` 而不是 `--force` 来避免意外覆盖其他人的提交
- 定期清理本地分支: `git branch -d <branch-name>`
- 如果镜像仓库有大量更新,考虑创建一个新分支来处理合并