# Git派生(fork)的仓库代码的同步问题

部门有产品代码一份,其它项目代码多从这份产品上派生(fork)。

但产品代码其实并不成熟,还在修改完善中。其它派生的仓库需要和产品仓库保持同步。

好了,需求有了,现在有两个办法:🤔

# 一、给派生仓库设置上游仓库

forked-update-01

forked-update-02

forked-update-03

# 命令详解

# 设置上游仓库地址
git remote add upstream http://example/exampleRepo.git

# 查看该仓库关联的所有远程仓库
git remote -v

# 拉取上游仓库代码,拉取成功后会存放在 upstream/master 分支
git fetch upstream

# 查看所有分支
git branch -a # 下面的 "git branch" 是查看当前所在分支

# 合并要在 master 进行,若当前不在需要切换回 master
git merge upstream/master
git checkout master # 切换回 master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

合并之后将代码上传至远程仓库(非上游仓库)即可。

# 二、给产品仓库设置多个远程仓库

第二个方法就是给产品仓库设置多个远程仓库地址,这样在产品仓库修改代码提交(push)时可以同步提交到设置的那几个远程仓库,实现多仓库同步。

# 设置远程仓库
git remote set-url --add --push origin http://example/exampleRepo.git

# 查看该仓库关联的所有远程仓库
git remote -v
1
2
3
4
5

不用输命令也可以查看关联的远程仓库地址

在本地仓库根目录中找到.git/config.git一般隐藏。

forked-update-04

# 三、编写同步脚本

第三个方法是后面添加的,最后采用了这个方法。

结合之前的经验,考虑到当前产品派生的项目非常多,一个个项目这样打命令还是太麻烦。

所以还是写一个脚本来同步更新比较好。下面是一个脚本实例:👇

# update.sh

set -e # 确保脚本执行时抛出错误

echo '代码同步开始...'
echo # 空行

echo '当前项目所有分支:'
git branch --list
echo

echo '切换到主分支master:'
git checkout master
echo

echo '拉取产品最新代码:'
git fetch http://exampleRepo.git
echo

echo '合并代码:'
git merge FETCH_HEAD
echo

echo '提交代码:'
git push
echo

echo '代码同步完成!'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

注意

  • Windows下执行shell脚本不要使用CMDPowerShell,请使用Git Bash,就是安装Git自带的那个命令行工具。

  • 执行上文脚本使用命令bash update.sh

Last Updated: 2 years ago