git_tutorials/Lab4/lab4.md

90 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 基线版本和定制版本同步更改
可以参考这个链接
https://www.cnblogs.com/Mufasa/p/14431990.html
有两种方案:
- 多分支
- 多仓库
结合咱们公司项目分配到具体负责人的特点,推荐大家采用 **多仓库**方案创建定制规约版本。
~~## 多分支~~
~~1. 从基线仓库拉取最新的程序到本地~~
~~2. 创建新分支代表定制版本,并切换到新分支~~
~~3. 做一些定制化修改~~
~~4. 测试无误后提交更改~~
~~5. 把定制版本分支推送到服务器~~
~~6. 基线仓库更新优化~~
~~7. 切换到定制版本分支单次更改可以采用摘取cherry-pick命令把基线上的更改提交到当前定制分支。同时同步多次更改可以采用合并命令。~~
~~8. 推送定制分支~~
## 多仓库
### 定制版本搭建
#### 1. 从基线仓库克隆最新的程序到本地
在文件夹右键选择Git克隆在URL栏填写基线仓库的服务器地址,点击确定
![](./git_clone.png)
#### 2. 做一些定制化修改,代表定制版本
- 如果是新定制版本,直接在当前程序上修改即可
- ~~如果是已经存在的定制版本,首先删除基线程序所有文件(保留.git文件夹和.gitignore文件),然后把定制程序复制过来即可。**需要注意的是: 要保证定制程序和基线程序的版本相同。如果定制程序比基线落后的话,会丢失中间版本的更改。**~~
拿一个已经存在的定制程序举例,删除基线程序所有文件,只保留.git和.gitignore文件。(这里简化操作,所有操作都在"master"分支进行,如果已经用上"Git Flow"分支管理,应当先切换到"develop"分支,再删除。)
![](./git_deletebase.png)
然后把定制程序复制过来,可以用TortoiseGit查看已修改的内容此时的已修改应当是基线程序和定制程序的不同点和用BC对比出来是一样的。
![](./git_diff1.png)
![](./BC_diff.jpg)
#### 3. 提交更改
测试无误后提交更改
![](./git_submit.png)
#### 4. 创建定制版本仓库
在服务器新建定制版本仓库。
打开TortoiseGit的推送界面点击“管理”按钮选中“origin”查看详细信息。会发现“URL”还是原来的基线仓库连接。我们需要将"URL"改成定制仓库的连接。
然后我们需要再添加一个名叫“upstream”上游仓库**名字可以任意能表示基线需要和origin区分开**)的远端仓库,链接为原来基线仓库的链接。后面抓取时会用到。
此时的远端列表如下:
![](./git_origin.png)
![](./git_upstream.png)
#### 5.推送
把定制版本程序推送到定制版本仓库打开TortoiseGit的推送界面保持远端还是origin点击确定。
![](./git_push.png)
### 实际应用
前面的操作把定制版本的架子搭好了,下面就要测试应用了。
#### 基线程序的更改同步到定制版本
![](./git_from_base_to_custome.png)
##### 1. 基线程序版本更新
在基线程序上面做一些更改并且提交推送。
##### 2. 定制版本获取基线更改
在本地的定制版本库打开TortoiseGit的获取界面把远端改成“upstream”,点击确定。
![](./git_fetch.png)
##### 3. 合并获取的更改
打开TortoiseGit的合并界面分支选择“remotes/upstream/master”点击确定。
![](./git_merge.png)
如果没有冲突,合并会顺利结束;如果有冲突,需要手动解决冲突。
合并完成后,就可以测试程序、提交更改、推送更改。
<span style="color: red;font-weight: bold;font-size: 24px;">注意合并只是代码文本的合并git不会检查字节对齐、EE跨页等问题仍然需要自己检查改动点。</span>
#### 定制版本更改同步到基线程序
***定制版本更改同步到基线版本仍然采用原来手动比对的方式***
下面的方案暂不采用
定制版本同步到基线程序要麻烦一些。
![](./git_from_custome_to_base.png)
##### 1. 定制版本更改
在定制程序上面做一些更改、提交和推送到定制仓库。
##### 2. 推送定制版本到基线仓库
如何让基线仓库知道定制版本修改了什么呢?给基线仓库也推送一份就可以了。
在定制程序下打开TortoiseGit的推送界面修改要推送到远端的分支名称不要和master、develop等重要分支重复并且把远端的连接改为“upstream”点击确定。
![](./git_push_upstream.png)
这样在服务器上就会多出一个分支“GX”内容为定制版本的更改。
##### 3. 获取基线仓库的更改
在基线程序下打开TortoiseGit的获取界面点击确定。
然后打开TortoiseGit的日志信息界面点击右上角的超链接这里是master
![](./git_log_main.png)
然后在引用列表选择“remotes/origin/GX”即上一步新上传的分支。双击打开。
##### 4. 摘取更改
找到要采纳的更改,右键选择“摘取此提交”,点击“继续”。
![](./git_cherry_pick.png)
有冲突的会提示冲突,需要解决冲突,没有冲突了,然后点击提交。这样就把定制版本的更改同步到基线。测试无误后就可以推送到基线仓库。
##### 5. 删除基线上的定制分支
一切都结束后,基线上的定制分支就用不到了,可以删除它。
在引用列表界面选中“remotes/origin/GX”右键选择“删除远端分支”这样本地和服务器上都会删除该分支。
![](./git_delete_branch.png)