diff --git a/Lab4/BC_diff.jpg b/Lab4/BC_diff.jpg new file mode 100644 index 0000000..664bb13 Binary files /dev/null and b/Lab4/BC_diff.jpg differ diff --git a/Lab4/git_cherry_pick.png b/Lab4/git_cherry_pick.png new file mode 100644 index 0000000..68664c9 Binary files /dev/null and b/Lab4/git_cherry_pick.png differ diff --git a/Lab4/git_clone.png b/Lab4/git_clone.png new file mode 100644 index 0000000..e5650f2 Binary files /dev/null and b/Lab4/git_clone.png differ diff --git a/Lab4/git_delete_branch.png b/Lab4/git_delete_branch.png new file mode 100644 index 0000000..3812e2c Binary files /dev/null and b/Lab4/git_delete_branch.png differ diff --git a/Lab4/git_deletebase.png b/Lab4/git_deletebase.png new file mode 100644 index 0000000..d7b22bb Binary files /dev/null and b/Lab4/git_deletebase.png differ diff --git a/Lab4/git_diff1.png b/Lab4/git_diff1.png new file mode 100644 index 0000000..650908c Binary files /dev/null and b/Lab4/git_diff1.png differ diff --git a/Lab4/git_fetch.png b/Lab4/git_fetch.png new file mode 100644 index 0000000..7e61a17 Binary files /dev/null and b/Lab4/git_fetch.png differ diff --git a/Lab4/git_fetch_2.png b/Lab4/git_fetch_2.png new file mode 100644 index 0000000..dc7cd10 Binary files /dev/null and b/Lab4/git_fetch_2.png differ diff --git a/Lab4/git_log_main.png b/Lab4/git_log_main.png new file mode 100644 index 0000000..8ec6ac3 Binary files /dev/null and b/Lab4/git_log_main.png differ diff --git a/Lab4/git_merge.png b/Lab4/git_merge.png new file mode 100644 index 0000000..1d9e6cb Binary files /dev/null and b/Lab4/git_merge.png differ diff --git a/Lab4/git_merge_conflicts.png b/Lab4/git_merge_conflicts.png new file mode 100644 index 0000000..72891e4 Binary files /dev/null and b/Lab4/git_merge_conflicts.png differ diff --git a/Lab4/git_origin.png b/Lab4/git_origin.png new file mode 100644 index 0000000..d15e8ab Binary files /dev/null and b/Lab4/git_origin.png differ diff --git a/Lab4/git_push.png b/Lab4/git_push.png new file mode 100644 index 0000000..96a117f Binary files /dev/null and b/Lab4/git_push.png differ diff --git a/Lab4/git_push_upstream.png b/Lab4/git_push_upstream.png new file mode 100644 index 0000000..518caaa Binary files /dev/null and b/Lab4/git_push_upstream.png differ diff --git a/Lab4/git_submit.png b/Lab4/git_submit.png new file mode 100644 index 0000000..f8f1f78 Binary files /dev/null and b/Lab4/git_submit.png differ diff --git a/Lab4/git_upstream.png b/Lab4/git_upstream.png new file mode 100644 index 0000000..709525d Binary files /dev/null and b/Lab4/git_upstream.png differ diff --git a/Lab4/lab4.md b/Lab4/lab4.md index 3f1f6a9..a209630 100644 --- a/Lab4/lab4.md +++ b/Lab4/lab4.md @@ -5,7 +5,7 @@ https://www.cnblogs.com/Mufasa/p/14431990.html - 多分支 - 多仓库 -多分支大体思路是: +## 多分支 1. 从基线仓库拉取最新的程序到本地 2. 创建新分支代表定制版本,并切换到新分支 3. 做一些定制化修改 @@ -15,15 +15,68 @@ https://www.cnblogs.com/Mufasa/p/14431990.html 7. 切换到定制版本分支,单次更改可以采用摘取(cherry-pick)命令把基线上的更改提交到当前定制分支。同时同步多次更改可以采用合并命令。 8. 推送定制分支 -多仓库大体思路: -1. 从基线仓库拉取最新的程序到本地 -2. 做一些定制化修改,代表定制版本 -3. 测试无误后提交更改 -4. 在服务器新建定制版本仓库,把推送远端仓库的链接改成定制版本的链接。再添加一个名叫“upstream”(好像学名上游分支)的远端仓库,链接为原来基线仓库的链接。 -5. 把定制版本程序推送到定制版本仓库 -6. 基线仓库更新优化 -7. 在本地定制版本库,通过抓取(或称获取,fetch)命令,抓取上游分支基线上的更改。 -8. 通过合并或者变基命令把上一步更改同步提交到定制仓库 -9. 推送定制分支 +## 多仓库 +### 定制版本搭建 +#### 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”(上游分支)的远端仓库,链接为原来基线仓库的链接。后面抓取时会用到。 +此时的远端列表如下: +![](./git_origin.png) +![](./git_upstream.png) +#### 5.推送 +把定制版本程序推送到定制版本仓库,打开TortoiseGit的推送界面,保持远端还是origin,点击确定。 +![](./git_push.png) +### 实际应用 +前面的操作把定制版本的架子搭好了,下面就要测试应用了。 +#### 基线程序的更改同步到定制版本 +##### 1. 基线程序版本更新 +在基线程序上面做一些更改并且提交推送。 +##### 2. 定制版本获取基线更改 +在本地的定制版本库,打开TortoiseGit的获取界面,把远端改成“upstream”,点击确定。 +![](./git_fetch.png) +##### 3. 合并获取的更改 +打开TortoiseGit的合并界面,分支选择“remotes/upstream/master”,点击确定。 +![](./git_merge.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) \ No newline at end of file