# Git派生(fork)的仓库代码的同步问题
部门有产品代码一份,其它项目代码多从这份产品上派生(fork)。
但产品代码其实并不成熟,还在修改完善中。其它派生的仓库需要和产品仓库保持同步。
好了,需求有了,现在有两个办法:🤔
# 一、给派生仓库设置上游仓库
# 命令详解
# 设置上游仓库地址
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
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
2
3
4
5
不用输命令也可以查看关联的远程仓库地址
在本地仓库根目录中找到.git/config
,.git
一般隐藏。
# 三、编写同步脚本
第三个方法是后面添加的,最后采用了这个方法。
结合之前的经验,考虑到当前产品派生的项目非常多,一个个项目这样打命令还是太麻烦。
所以还是写一个脚本来同步更新比较好。下面是一个脚本实例:👇
# 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
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
脚本不要使用CMD
和PowerShell
,请使用Git Bash
,就是安装Git
自带的那个命令行工具。执行上文脚本使用命令
bash update.sh
。