环境说明:
中心代码库在192.168.120.200的gitlab上,以刚刚克隆下来的tttt库为例
开发机器kunlunsec,用来修改tttt库的代码
编译服务器bmcCompileBak,其中的目录/home/kunlun/rxsunSource/gitSource是用来存放源代码库的,目录/home/kunlun/rxsunSource/openbmc/build/downloads/git2是为构建工具准备的裸库存放的位置.
试验目标:
1.开发机器kunlunsec上的改动能通过192.168.120.200服务器同步到编译服务器bmcCompileBak上的源代码库里
2.编译服务器bmcCompileBak上同步后的源代码库能推送(git push)到编译服务器bmcCompileBak本地的构建目录下/home/kunlun/rxsunSource/openbmc/build/downloads/git2
基本思路:
在编译服务器bmcCompileBak的源代码库/home/kunlun/rxsunSource/gitSource/tttt中设置两个remote仓库,一个是中心代码库192.168.120.200上的tttt.git裸库,命名为origin,另一个是/home/kunlun/rxsunSource/openbmc/build/downloads/git2里的tttt.git裸库,命名为local.然后从origin拉取(git pull)代码变更,推送(git push)到local上.
步骤一:在编译服务器bmcCompileBak上克隆源代码库和裸库到各自的目的地
克隆下来试验用的源代码库,在home/kunlun/rxsunSource/gitSource下
cd /home/kunlun/rxsunSource/gitSource
git clone git@192.168.120.200:qa/tttt.git
到存放所有的裸库的文件夹,克隆裸库下来.
cd /home/kunlun/rxsunSource/openbmc/build/downloads/git2/
git clone –bare git@192.168.120.200:qa/tttt.git
这里的库是为构建所用的.
步骤二:在编译服务器bmcCompileBak上为源代码库添加第二个远程库,就是刚刚克隆下来的裸库
进入目录 cd /home/kunlun/rxsunSource/gitSource/tttt/
git remote add local /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
查看一下,第一种是命令行查看,第二种是查看config文件,看到增加了一个名为”local”的远程库
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git remote
local
origin
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@192.168.120.200:qa/tttt.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "local"]
url = /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
fetch = +refs/heads/*:refs/remotes/local/*步骤三:在开发机kunlunsec上模拟开发过程中两个分支的代码提交
换到开发机kunlunsec上tttt进行操作并提交
kunlun@kunlunsec:~/tmp$ git clone git@192.168.120.200:qa/tttt.git
正克隆到 'tttt'...
接收对象中: 100% (20/20), 完成.
检查连接... 完成。
kunlun@kunlunsec:~/tmp$ cd tttt/
kunlun@kunlunsec:~/tmp/tttt$ ll
-rw-rw-r-- 1 kunlun kunlun 21 8月 17 18:55 a.txt查看当前分支
kunlun@kunlunsec:~/tmp/tttt$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/test
为master分支添加文件b.txt,并commit,push
kunlun@kunlunsec:~/tmp/tttt$ touch b.txt
kunlun@kunlunsec:~/tmp/tttt$ echo "test next remote repo">b.txt
kunlun@kunlunsec:~/tmp/tttt$ cat b.txt
test next remote repo
kunlun@kunlunsec:~/tmp/tttt$ git add .
kunlun@kunlunsec:~/tmp/tttt$ git commit -m "next remote test"
[master 310edf3] next remote test
1 file changed, 1 insertion(+)
create mode 100644 b.txt
kunlun@kunlunsec:~/tmp/tttt$ git push切换到tttt库的另一个分支test,模拟实际开发中的另一个厂商代码:
kunlun@kunlunsec:~/tmp/tttt$ git checkout test
分支 test 设置为跟踪来自 origin 的远程分支 test。
切换到一个新分支 'test'
kunlun@kunlunsec:~/tmp/tttt$ git branch -a
master
* test
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/test
kunlun@kunlunsec:~/tmp/tttt$ ll
总用量 16
drwxrwxr-x 4 kunlun kunlun 4096 8月 17 19:03 ./
drwxrwxr-x 3 kunlun kunlun 4096 8月 17 18:55 ../
-rw-rw-r-- 1 kunlun kunlun 0 8月 17 19:03 ddd.txt看到test分支下的文件与master分支的文件是不同的.
为test分支添加文件eee.txt,并commit,push
kunlun@kunlunsec:~/tmp/tttt$ echo "another file to test branch">eee.txt
kunlun@kunlunsec:~/tmp/tttt$ cat eee.txt
another file to test branch
kunlun@kunlunsec:~/tmp/tttt$ git add .
kunlun@kunlunsec:~/tmp/tttt$ git commit -m "another file to test branch"
[test d983cbf] another file to test branch
1 file changed, 1 insertion(+)
create mode 100644 eee.txt
kunlun@kunlunsec:~/tmp/tttt$ git push以上操作是在tttt库的master分支上增加了文件b.txt,在test分支上增加了文件eee.txt,并推送到192.168.120.200中心代码服务器上.
步骤四:在bmcCompileBak编译服务器上依次拉取master分支和test分支的代码
回到bmcCompileBak编译服务器上
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git branch -a //查看当前分支
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/test
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git pull origin master //与名为origin的远程库,即192.168.120.200中心代码服务器同步master分支的代码
From 192.168.120.200:qa/tttt
* branch master -> FETCH_HEAD
Updating fce3d3b..310edf3
Fast-forward
b.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 b.txt
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ ll //看到新增加的b.txt文件被同步下来
total 24
drwxrwxr-x 4 kunlun kunlun 4096 8月 17 19:24 ./
drwxrwxr-x 8 kunlun kunlun 4096 8月 17 18:32 ../
-rw-rw-r-- 1 kunlun kunlun 21 8月 17 18:29 a.txt
-rw-rw-r-- 1 kunlun kunlun 22 8月 17 19:24 b.txt再同步test分支的代码
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git pull origin test //这时git给出一个merge操作,确定
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From 192.168.120.200:qa/tttt
* branch test -> FETCH_HEAD
2f18328..d983cbf test -> origin/test
Merge made by the 'recursive' strategy.
ddd.txt | 0
eee.txt | 1 +
2 files changed, 1 insertion(+)
create mode 100644 ddd.txt
create mode 100644 eee.txt查看log,发现本地库里包括了在开发机器上两个分支上的提交,并记录了刚刚的合并动作
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git log
commit 9d816d31f5244890927ab1c3b5a846a5bcb651ca
Merge: 310edf3 d983cbf
Author: rxsun <rxsun@bios.zd-tech.com.cn>
Date: Sat Aug 17 19:24:52 2019 +0800
Merge branch 'test' of 192.168.120.200:qa/tttt
commit d983cbf670c31d58cde88da7371f71a6bad7f846
Author: rxsun <“rxsun@zd-tech.com.cn>
Date: Sat Aug 17 19:21:44 2019 +0800
another file to test branch
commit 310edf371ad05051308aa49601d709064403909e
Author: rxsun <“rxsun@zd-tech.com.cn>
Date: Sat Aug 17 18:56:55 2019 +0800
next remote test查看工作区状态,当前工作区是干净的
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
nothing to commit, working directory clean确认当前所在的分支,还是master
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/test查看本地文件,包括了master分支的a.txt,b.txt, 以及test分支的ddd.txt和eee.txt.
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ ll
drwxrwxr-x 4 kunlun kunlun 4096 8月 17 19:24 ./
drwxrwxr-x 8 kunlun kunlun 4096 8月 17 18:32 ../
-rw-rw-r-- 1 kunlun kunlun 21 8月 17 18:29 a.txt
-rw-rw-r-- 1 kunlun kunlun 22 8月 17 19:24 b.txt
-rw-rw-r-- 1 kunlun kunlun 0 8月 17 19:24 ddd.txt
-rw-rw-r-- 1 kunlun kunlun 28 8月 17 19:24 eee.txt可见,在master分支上, git pull origin master和 git pull origin test 都执行的话,会将test分支的内容也拉取到master分支里面 ,这明显不符合要求.
回退到拉取代码之前的commit号
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git reset --hard fbf549d38c71d56171a2cb23cfc4a5218953e943 这是本次操作之前的一个commit号查看当前内容
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ ll
-rw-rw-r-- 1 kunlun kunlun 16 8月 17 19:58 a.txt就回到了本次拉取操作之前的状态
步骤五:在bmcCompileBak编译服务器上只拉取master分支
只同步master分支,查看结果,这个结果是符合预期的
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git pull origin master
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ ll
-rw-rw-r-- 1 kunlun kunlun 21 8月 17 20:00 a.txt
-rw-rw-r-- 1 kunlun kunlun 22 8月 17 20:00 b.txt步骤六:在bmcCompileBak编译服务器上将master分支推送到local的远程仓库里master分支上
执行push,推送的目的地是本地的名为local的远程仓库里master分支上,就是步骤一中克隆下来的裸库/home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git push local master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 336 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
fce3d3b..310edf3 master -> master进入裸库看一下branch和log,已经同步成功
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ cd /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
kunlun@bmcCompileBak:~/rxsunSource/openbmc/build/downloads/git2/tttt.git$ git branch -a
* master
test
kunlun@bmcCompileBak:~/rxsunSource/openbmc/build/downloads/git2/tttt.git$ git log
commit 310edf371ad05051308aa49601d709064403909e
Author: rxsun <“rxsun@zd-tech.com.cn>
Date: Sat Aug 17 18:56:55 2019 +0800
next remote test步骤七:在bmcCompileBak编译服务器上同步origin的远程仓库里test分支变化源代码库里
再回到tttt的源代码库里,切换到tset分支.
kunlun@bmcCompileBak:cd ~/rxsunSource/gitSource/tttt
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git checkout test
Branch test set up to track remote branch test from origin.
Switched to a new branch 'test'
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ ll
-rw-rw-r-- 1 kunlun kunlun 0 8月 17 20:06 ddd.txt
-rw-rw-r-- 1 kunlun kunlun 28 8月 17 20:06 eee.txt发现这种checkout操作会自动拉下远程origin仓库test分支的所有内容.
复习一下,origin和local远程库的地址,origin是中心代码库,在192.168.120.200上,local在bmcCompileBak编译服务器上,是供构建使用的
[remote "origin"]
url = git@192.168.120.200:qa/tttt.git
[remote "local"]
url = /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git步骤八:在bmcCompileBak编译服务器上同步test分支的变化到local的远程仓库里test分支上
将源代码库里test分支的内容push到本地的名为local的远程仓库里test分支上
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ git push local test
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 355 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
2f18328..d983cbf test -> test查看当前分支
kunlun@bmcCompileBak:~/rxsunSource/gitSource/tttt$ cd /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
kunlun@bmcCompileBak:~/rxsunSource/openbmc/build/downloads/git2/tttt.git$ git branch -a
* master
test试图在裸库里切换到test分支,发现不能操作,这种方法没法验证test分支是否被推送上来了.
kunlun@bmcCompileBak:~/rxsunSource/openbmc/build/downloads/git2/tttt.git$ git checkout test
fatal: This operation must be run in a work tree步骤九:在bmcCompileBak编译服务器上验证test分支的变化被推送到了local远程仓库
在bmcCompileBak编译服务器上,到另一个目录再clone一份test分支的内容,从/home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git ,看看结果
kunlun@bmcCompileBak:~/rxsunSource$ mkdir tmp
kunlun@bmcCompileBak:~/rxsunSource$ cd tmp
kunlun@bmcCompileBak:~/rxsunSource/tmp$ git clone /home/kunlun/rxsunSource/openbmc/build/downloads/git2/tttt.git
Cloning into 'tttt'...
done.
kunlun@bmcCompileBak:~/rxsunSource/tmp$ cd tttt/
kunlun@bmcCompileBak:~/rxsunSource/tmp/tttt$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/test
kunlun@bmcCompileBak:~/rxsunSource/tmp/tttt$ git checkout test
Branch test set up to track remote branch test from origin.
Switched to a new branch 'test'
kunlun@bmcCompileBak:~/rxsunSource/tmp/tttt$ ll
-rw-rw-r-- 1 kunlun kunlun 0 8月 17 20:14 ddd.txt
-rw-rw-r-- 1 kunlun kunlun 28 8月 17 20:14 eee.txt结果是符合预期的,证明test分支到local远程库的推送是成功的.
总结:
编译服务器bmcCompileBak上的源代码库可以设置两个远程仓库,一个对应着中心代码库,从这里拉取下来代码,另一个对应着本地的构建代码库,推送代码到这个库.并且,可以实现不同分支的拉取和推送.
这种机制是能够为构建服务的.
=====================================================================================================