129 lines
3.2 KiB
Markdown
129 lines
3.2 KiB
Markdown
# 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>`
|
||
- 如果镜像仓库有大量更新,考虑创建一个新分支来处理合并
|