Compare commits
21 Commits
Author | SHA1 | Date |
---|---|---|
|
c70c7280c3 | |
|
71a8cbeb63 | |
|
ccd287340d | |
|
975fcf4cb3 | |
|
caf33dbe07 | |
|
aa4cc6100a | |
|
8e3af01327 | |
|
e724517172 | |
|
454e758f12 | |
|
bcab3adc12 | |
|
c748f12eb7 | |
|
318476a2fc | |
|
0c730121fe | |
|
96c180404f | |
|
8aebbca0b2 | |
|
0fc81ab31c | |
|
2c68859608 | |
|
e53c1d1a13 | |
|
90eaabae86 | |
|
25d9de05fe | |
|
6725477bca |
After Width: | Height: | Size: 38 KiB |
15
Lab0/lab0.md
|
@ -1,8 +1,11 @@
|
||||||
# Git环境搭建
|
# Git环境搭建
|
||||||
## 资源准备
|
## 资源准备
|
||||||
|
- git服务器账号注册
|
||||||
- Git for Windows. https://git-scm.com/download/win, 一般选择“64-bit Git for Windows Setup”版本
|
- Git for Windows. https://git-scm.com/download/win, 一般选择“64-bit Git for Windows Setup”版本
|
||||||
- TortoiseGit. https://tortoisegit.org/download/, 需要下载安装两个软件,一个主程序的安装包,另一个为语言支持包
|
- TortoiseGit. https://tortoisegit.org/download/, 需要下载安装两个软件,一个主程序的安装包,另一个为语言支持包
|
||||||
- git服务器账号注册
|
|
||||||
|
Git软件安装包已经在服务器准备好了,http://172.188.24.12:3000/mengfanxing/git_tutorials/releases
|
||||||
|

|
||||||
## 安装教程
|
## 安装教程
|
||||||
### Git for Windows
|
### Git for Windows
|
||||||
打开下载好的Git应用程序开始安装:
|
打开下载好的Git应用程序开始安装:
|
||||||
|
@ -12,8 +15,8 @@
|
||||||
3. 选择组件,没有特别需求直接Next
|
3. 选择组件,没有特别需求直接Next
|
||||||

|

|
||||||
4. 在开始菜单创建git文件夹
|
4. 在开始菜单创建git文件夹
|
||||||

|

|
||||||
5. 为git选择默认的文本编辑器,初始值为vim,可以选择VSCode、NotePad++等
|
5. 为git选择默认的文本编辑器,初始值为vim,可以选择VSCode、NotePad++等
|
||||||

|

|
||||||
6. git默认分支名称,直接Next
|
6. git默认分支名称,直接Next
|
||||||

|

|
||||||
|
@ -22,13 +25,13 @@
|
||||||
8. 后面的全部默认Next,然后等待安装成功
|
8. 后面的全部默认Next,然后等待安装成功
|
||||||
|
|
||||||
### TortoiseGit
|
### TortoiseGit
|
||||||
先安装TortoiseGit主程序
|
先安装TortoiseGit主程序
|
||||||
打开下载好的“TortoiseGit-2.15.0.0-64bit.msi”:
|
打开下载好的“TortoiseGit-2.15.0.0-64bit.msi”:
|
||||||
一路Next,根据下图所示,选择安装位置,Next,Install
|
一路Next,根据下图所示,选择安装位置,Next,Install
|
||||||

|

|
||||||
安装完后,第一次打开会让你选择语言包。 不要关闭,先放到一边。
|
安装完后,第一次打开会让你选择语言包。 不要关闭,先放到一边。
|
||||||
先安装TortoiseGit 语言包
|
先安装TortoiseGit 语言包
|
||||||
打开“TortoiseGit-LanguagePack-2.15.0.0-64bit-zh_CN.msi”,直接下一步,等待安装完成。
|
打开“TortoiseGit-LanguagePack-2.15.0.0-64bit-zh_CN.msi”,直接下一步,等待安装完成。
|
||||||
这时回到TortoiseGit,点击“Refresh”,会出来中文选项。
|
这时回到TortoiseGit,点击“Refresh”,会出来中文选项。
|
||||||
一路下一页,在“配置用户信息”界面,填入用户名和邮箱,要和在公司服务器注册时保持一致。
|
一路下一页,在“配置用户信息”界面,填入用户名和邮箱,要和在公司服务器注册时保持一致。
|
||||||

|

|
||||||
|
|
After Width: | Height: | Size: 137 KiB |
After Width: | Height: | Size: 15 KiB |
39
Lab1/lab1.md
|
@ -1,4 +1,6 @@
|
||||||
# 创建、修改、暂存和提交
|
# 创建、修改、暂存和提交
|
||||||
|
## Git整体流程图
|
||||||
|

|
||||||
## 创建
|
## 创建
|
||||||
要将现有的软件程序纳入git管理,首先是创建版本库(或称存储库):
|
要将现有的软件程序纳入git管理,首先是创建版本库(或称存储库):
|
||||||
选中要管理的工程文件夹,右键选择“Git 在这里创建版本库”,点击“确定”,git就会在工程目录下创建“.git”文件夹,一个空白的版本库就创建成功。
|
选中要管理的工程文件夹,右键选择“Git 在这里创建版本库”,点击“确定”,git就会在工程目录下创建“.git”文件夹,一个空白的版本库就创建成功。
|
||||||
|
@ -10,36 +12,51 @@
|
||||||
并不是所有的文件都需要纳入Git管理,有些文件与源代码无关,只是编译生成的中间文件或者用户个人的配置,纳入管理反而增加存储库的内存。
|
并不是所有的文件都需要纳入Git管理,有些文件与源代码无关,只是编译生成的中间文件或者用户个人的配置,纳入管理反而增加存储库的内存。
|
||||||
这里拿Keil的工程举例:
|
这里拿Keil的工程举例:
|
||||||

|

|
||||||
“./objects”文件夹下编译生成的中间文件(.o、.d、.crf)是用不到版本管理的。但是生成的hex文件**可以选择**记录。“./listing”下的map文件也是用不到的。
|
“./objects”文件夹下编译生成的中间文件(.o、.d、.crf)是用不到版本管理的。但是生成的hex、bin、scf文件**可以选择**记录。“./listing”下的map文件可以纳入管理。
|
||||||
用户自己的uvguix文件,不会影响编译结果,也没必要管理。
|
用户自己的uvguix文件,不会影响编译结果,也没必要管理。
|
||||||
我们通过创建.gitignore文件,确定工作目录下哪些文件要纳入管理,哪些文件要忽略掉。
|
我们通过创建.gitignore文件,确定工作目录下哪些文件要纳入管理,哪些文件要忽略掉。
|
||||||
举例:在Hello目录下创建 “.gitignore” 文件,将./objects文件夹下编译生成的中间文件忽略掉,但是保留生成的hex文件。内容如下:
|
举例:在Hello目录下创建 “.gitignore” 文件,将./objects文件夹下编译生成的中间文件忽略掉,但是保留生成的hex、bin、scf文件。内容如下:
|
||||||
```
|
```
|
||||||
#这是注释
|
#Git管理忽略文件
|
||||||
#忽略整个listing文件夹
|
#忽略objects文件夹下的所有文件
|
||||||
/listing
|
|
||||||
#忽略某个文件夹下的所有文件
|
|
||||||
/objects/*
|
/objects/*
|
||||||
#在上面基础上将hex文件纳入管理(可选)
|
#在上面基础上将hex文件纳入管理
|
||||||
!/objects/*.hex
|
!/objects/*.hex
|
||||||
|
#在上面基础上将bin文件纳入管理
|
||||||
|
!/objects/*.bin
|
||||||
|
#在上面基础上将sct文件纳入管理
|
||||||
|
!/objects/*.sct
|
||||||
#忽略keil的用户uvguix文件
|
#忽略keil的用户uvguix文件
|
||||||
*.uvguix.*
|
*.uvguix.*
|
||||||
#忽略JLinkLog.txt文件
|
#忽略单独一个JLinkLog.txt文件
|
||||||
JLinkLog.txt
|
JLinkLog.txt
|
||||||
```
|
```
|
||||||
现在在“检查已修改”窗口,点击“刷新”按钮,./objects文件夹下只剩hex文件,./listing文件夹消失,uvguix文件消失。
|
现在回到“检查已修改”窗口,点击“刷新”按钮,./objects文件夹下只剩hex、bin、scf文件,uvguix文件消失,JLinkLog.txt文件消失。
|
||||||
## 暂存和提交
|
## 暂存和提交
|
||||||
### 暂存
|
### 暂存
|
||||||
在其他Git客户端中可能有暂存的概念,它们提交的过程为:修改 >> 暂存 >> 提交。
|
在其他Git客户端中可能有暂存的概念,它们提交的过程为:修改 >> 暂存 >> 提交。
|
||||||
暂存主要用于分批提交,比如已经开发了A、B两个功能,想要把A、B分开提交,可以先把A的文件放在暂存区,然后提交。再把B放到暂存区,然后提交。
|
暂存主要用于分批提交,比如已经开发了A、B两个功能,想要把A、B分开提交,可以先把A的文件放在暂存区,然后提交。再把B放到暂存区,然后提交。
|
||||||
TortoiseGitz支持勾选文件提交,因此用不到暂存功能,它的提交过程为:修改 >> 提交。
|
TortoiseGitz支持勾选文件提交,因此用不到暂存功能,它的提交过程为:修改 >> 提交。
|
||||||
### 提交
|
### 提交
|
||||||
紧跟上面的操作,点击“提交”,弹出提交窗口:
|
紧跟上面的操作,点击“提交”,弹出提交窗口:
|
||||||

|

|
||||||
最上面是选择提交到哪个分支,现在只有“master”分支。
|
最上面是选择提交到哪个分支,现在只有“master”分支。
|
||||||
然后是本次提交的日志信息,日志信息必须写,不写提交不了。日志信息应尽可能详细,和之前的readme.txt一样。
|
然后是本次提交的日志信息,日志信息必须写,不写提交不了。日志信息应尽可能详细,和之前的readme.txt一样。
|
||||||
下面选择要提交的文件,这里我们点击“全部”。
|
下面选择要提交的文件,这里我们点击“全部”。
|
||||||
最后点击提交。
|
最后点击提交。
|
||||||
|
## 检出
|
||||||
|
有时候要临时回到之前的版本工作,这时候用到“检出”。
|
||||||
|
在工程目录下,右键选择“TortoiseGit”,在“TortoiseGit”下选择“切换/检出”,弹出“切换/检出”窗口,选择“提交”,点击右边三个点,选择要检出的版本,点确定,然后下面注意不需要选创建新分支(不然还得手动删除),点击确定。
|
||||||
|
回到最新更新一样操作。
|
||||||
|

|
||||||
|
## 回退(慎用)
|
||||||
|
有时候最近的几次变更不想要了。这时候就要回退了。
|
||||||
|
在工程目录下,右键选择“TortoiseGit”,在“TortoiseGit”下选择“显示日志”,弹出“日志信息”窗口,选中要回退到的更改,右键选择“重置xxx到此版本”。点击确定,重置类型选择合适的类型:
|
||||||
|
- 软重置,要删除的更改退回到暂存区
|
||||||
|
- 混合,要删除的更改退回到修改状态,适用于稍作改动再提交
|
||||||
|
- 硬重置,彻底删除更改
|
||||||
|
|
||||||
|
点击“刷新”,所选版本之后的版本消失了。
|
||||||
## 贮藏更改
|
## 贮藏更改
|
||||||
有些情况下,正在开发的功能被打断,需要做其他工作,例如紧急修复BUG。这时需要保留已经更改的代码, “检查已修改” >> 贮藏 >> 填写贮藏日志 >> 确定
|
有些情况下,正在开发的功能被打断,需要做其他工作,例如紧急修复BUG。这时需要保留已经更改的代码, “检查已修改” >> 贮藏 >> 填写贮藏日志 >> 确定
|
||||||
其他工作忙完后,弹出贮藏
|
其他工作忙完后,弹出贮藏
|
||||||
|
|
26
Lab2/Lab2.md
|
@ -1,6 +1,24 @@
|
||||||
|
## 推送
|
||||||
|
在前一章我们在本地创建了版本库,现在把它推送到服务器。
|
||||||
|
### 服务器新建仓库
|
||||||
|
登录到[服务器](http://172.188.24.12:3000),点击右上角的“+”,选择“创建仓库”。
|
||||||
|

|
||||||
|

|
||||||
|
填写“仓库名称”和“仓库描述”,正式应用时“可见性”记得勾选。
|
||||||
|
其他的默认即可,点击“创建仓库”,一个新的仓库便创建完成。
|
||||||
|
### 推送
|
||||||
|
在前一章的工作目录下,右键菜单选择“TortoiseGit”,点击“推送”,弹出推送窗口。
|
||||||
|
在“目标” >> "远端"下,点击"管理"按钮,添加远程仓库的链接。
|
||||||
|

|
||||||
|

|
||||||
|
在URL中填写复制的链接,点击确定。
|
||||||
|
选择刚添加的远程仓库“origin”,点击“确定”,等待推送完成。第一次推送时,会做身份验证。
|
||||||
|
刷新网页,可以看到代码已经同步到服务器。
|
||||||
## 克隆
|
## 克隆
|
||||||
指将远端服务器的存储库下载到本地
|
指将远端服务器的存储库下载到本地。如果想把别人的存储库下载到本地就用到克隆了。
|
||||||
拿本存储库举例,在本地新建一个文件夹,进入文件夹,右键菜单选择“Git 克隆”,弹出克隆窗口,在URL输入"http://172.188.24.12:3000/mengfanxing/git_tutorials.git",前面的链接可以在服务器存储库界面复制。点击确定,开始克隆,等待克隆完成,然后在本地文件夹就可以看到名为“git_tutorials”的存储库。
|
拿本存储库举例,在本地新建一个文件夹,进入文件夹,右键菜单选择“Git 克隆”,弹出克隆窗口。
|
||||||
|

|
||||||
|

|
||||||
|
在URL输入"http://172.188.24.12:3000/mengfanxing/git_tutorials.git",前面的链接可以在服务器存储库界面复制。点击确定,开始克隆,等待克隆完成,然后在本地文件夹就可以看到名为“git_tutorials”的存储库。
|
||||||
## 拉取
|
## 拉取
|
||||||
由于服务器存储库不只一个人维护,常常出现本地软件版本才V1.0,服务器仓库都更新到V1.3的情况。这时,可以在本地存储库右键菜单选择“TortoiseGit”,然后选择“拉取”,点击确认。这样维持服务器和本地的同步。
|
多人协作工作时,常常出现服务器程序版本比本地新的情况,需要通过拉取操作维持本地和服务器的同步
|
||||||
## 推送
|
|
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 13 KiB |
62
Lab3/lab3.md
|
@ -1,8 +1,60 @@
|
||||||
# 分支管理
|
# 分支管理
|
||||||
|
前面提交、推送操作都是在“master”分支进行的。针对一个不断迭代的复杂项目,如果全部都在“master”上操作,版本的结构会乱,其他人看不懂哪个提交是稳定的,是生产下发版本,哪个提交是尚在开发版本。
|
||||||
|
针对这一问题,下面介绍Git flow分支模型,大家不一定要严格套这个模型。
|
||||||
|
## Git Flow
|
||||||
|
模型的分支如下:
|
||||||
- master
|
- master
|
||||||
- develop
|
- develop
|
||||||
- release
|
- feature/xxx
|
||||||
- hotfix
|
- hotfix/xxx
|
||||||
|
- release/xxx
|
||||||
多定制版本维护
|
|
||||||
|
它们的流程图如下:
|
||||||
|

|
||||||
|
## master
|
||||||
|
- master主分支,代码库应该有一个、且仅有一个主分支,主分支存放最稳定的程序版本
|
||||||
|
- 所有用于正式生产下发的版本都应该在master分支上发布
|
||||||
|
- 不能直接在master分支上修改提交,只能从其它分支合并
|
||||||
|
- 所有在master上的提交应该标记tag
|
||||||
|
## develop
|
||||||
|
- develop分支是主开发分支
|
||||||
|
- 用于合并来自feature分支的程序
|
||||||
|
- 从该分支创建release分支
|
||||||
|
- 接收来自release和hotfix分支的优化
|
||||||
|
## feature
|
||||||
|
- 用于新功能的开发
|
||||||
|
- 从develop分支签出
|
||||||
|
- 开发完后合并到develop
|
||||||
|
## hotfix
|
||||||
|
- 用于紧急修复现场出现的bug
|
||||||
|
- 从master签出
|
||||||
|
- 完成修复后要双向合并到master和develop
|
||||||
|
## release
|
||||||
|
- 用于准备版本发布
|
||||||
|
- 从develop分支签出
|
||||||
|
- 等测试组测试通过,双向合并到master和develop
|
||||||
|
## 其他说明
|
||||||
|
远程仓库应该只存在两个分支,一个是master分支,存放生产环境版本,这个分支的代码总是可靠可用的;另一个是develop分支,这个分支用于日常开发。
|
||||||
|
hotfix分支、feature分支和release分支都在本地,原则上不能推送到远程仓库。这三种分支都属于临时性需要,使用完以后,应该删除。
|
||||||
|
develop分支下允许有多个feature分支,且尽量避免冲突;允许在有feature处在开发中的情况下从develop分支拉取到release分支。
|
||||||
|
|
||||||
|
# 分支操作
|
||||||
|
## 创建分支
|
||||||
|
在工程目录下右键菜单选择“TortoiseGit”,点击“创建分支”。
|
||||||
|

|
||||||
|
输入分支名称。“切换到新分支”可选,后面可以手动切换。点击“确认”新分支便创建成功。
|
||||||
|
## 切换分支
|
||||||
|
想要在某个分支上做修改提交,首先要切换到该分支。
|
||||||
|
在工程目录下右键菜单选择“TortoiseGit”,点击“切换/检出”。
|
||||||
|

|
||||||
|
选择分支,点击确认。
|
||||||
|
## 创建标签
|
||||||
|
master分支提交后要加一个标签,用来表示版本号。
|
||||||
|
在工程目录下右键菜单选择“TortoiseGit”,点击“创建标签”。
|
||||||
|
输入标签名称,选择分支即可。
|
||||||
|

|
||||||
|
## 分支推送
|
||||||
|
当某个分支提交的差不多了,就可以推送了。
|
||||||
|
之前推送的是master分支,现在可以选择本地的其他分支。
|
||||||
|

|
||||||
|
值得注意的是“包括标签”选项,按照模型,master分支需要标记Tag版本号,master分支推送时勾选该选项可以将Tag同步到服务器。
|
After Width: | Height: | Size: 289 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,90 @@
|
||||||
|
# 基线版本和定制版本同步更改
|
||||||
|
可以参考这个链接
|
||||||
|
https://www.cnblogs.com/Mufasa/p/14431990.html
|
||||||
|
有两种方案:
|
||||||
|
- 多分支
|
||||||
|
- 多仓库
|
||||||
|
|
||||||
|
结合咱们公司项目分配到具体负责人的特点,推荐大家采用 **多仓库**方案创建定制规约版本。
|
||||||
|
|
||||||
|
~~## 多分支~~
|
||||||
|
~~1. 从基线仓库拉取最新的程序到本地~~
|
||||||
|
~~2. 创建新分支代表定制版本,并切换到新分支~~
|
||||||
|
~~3. 做一些定制化修改~~
|
||||||
|
~~4. 测试无误后提交更改~~
|
||||||
|
~~5. 把定制版本分支推送到服务器~~
|
||||||
|
~~6. 基线仓库更新优化~~
|
||||||
|
~~7. 切换到定制版本分支,单次更改可以采用摘取(cherry-pick)命令把基线上的更改提交到当前定制分支。同时同步多次更改可以采用合并命令。~~
|
||||||
|
~~8. 推送定制分支~~
|
||||||
|
|
||||||
|
## 多仓库
|
||||||
|
### 定制版本搭建
|
||||||
|
#### 1. 从基线仓库克隆最新的程序到本地
|
||||||
|
在文件夹右键选择Git克隆,在URL栏填写基线仓库的服务器地址,点击确定
|
||||||
|

|
||||||
|
|
||||||
|
#### 2. 做一些定制化修改,代表定制版本
|
||||||
|
- 如果是新定制版本,直接在当前程序上修改即可
|
||||||
|
- ~~如果是已经存在的定制版本,首先删除基线程序所有文件(保留.git文件夹和.gitignore文件),然后把定制程序复制过来即可。**需要注意的是: 要保证定制程序和基线程序的版本相同。如果定制程序比基线落后的话,会丢失中间版本的更改。**~~
|
||||||
|
拿一个已经存在的定制程序举例,删除基线程序所有文件,只保留.git和.gitignore文件。(这里简化操作,所有操作都在"master"分支进行,如果已经用上"Git Flow"分支管理,应当先切换到"develop"分支,再删除。)
|
||||||
|

|
||||||
|
然后把定制程序复制过来,可以用TortoiseGit查看已修改的内容,此时的已修改应当是基线程序和定制程序的不同点,和用BC对比出来是一样的。
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
#### 3. 提交更改
|
||||||
|
测试无误后提交更改
|
||||||
|

|
||||||
|
|
||||||
|
#### 4. 创建定制版本仓库
|
||||||
|
在服务器新建定制版本仓库。
|
||||||
|
打开TortoiseGit的推送界面,点击“管理”按钮,选中“origin”查看详细信息。会发现“URL”还是原来的基线仓库连接。我们需要将"URL"改成定制仓库的连接。
|
||||||
|
然后我们需要再添加一个名叫“upstream”(上游仓库,**名字可以任意,能表示基线,需要和origin区分开**)的远端仓库,链接为原来基线仓库的链接。后面抓取时会用到。
|
||||||
|
此时的远端列表如下:
|
||||||
|

|
||||||
|

|
||||||
|
#### 5.推送
|
||||||
|
把定制版本程序推送到定制版本仓库,打开TortoiseGit的推送界面,保持远端还是origin,点击确定。
|
||||||
|

|
||||||
|
|
||||||
|
### 实际应用
|
||||||
|
前面的操作把定制版本的架子搭好了,下面就要测试应用了。
|
||||||
|
#### 基线程序的更改同步到定制版本
|
||||||
|

|
||||||
|
##### 1. 基线程序版本更新
|
||||||
|
在基线程序上面做一些更改并且提交推送。
|
||||||
|
##### 2. 定制版本获取基线更改
|
||||||
|
在本地的定制版本库,打开TortoiseGit的获取界面,把远端改成“upstream”,点击确定。
|
||||||
|

|
||||||
|
##### 3. 合并获取的更改
|
||||||
|
打开TortoiseGit的合并界面,分支选择“remotes/upstream/master”,点击确定。
|
||||||
|

|
||||||
|
如果没有冲突,合并会顺利结束;如果有冲突,需要手动解决冲突。
|
||||||
|
合并完成后,就可以测试程序、提交更改、推送更改。
|
||||||
|
<span style="color: red;font-weight: bold;font-size: 24px;">注意,合并只是代码文本的合并,git不会检查字节对齐、EE跨页等问题,仍然需要自己检查改动点。</span>
|
||||||
|
|
||||||
|
#### 定制版本更改同步到基线程序
|
||||||
|
***定制版本更改同步到基线版本仍然采用原来手动比对的方式***
|
||||||
|
下面的方案暂不采用
|
||||||
|
定制版本同步到基线程序要麻烦一些。
|
||||||
|

|
||||||
|
##### 1. 定制版本更改
|
||||||
|
在定制程序上面做一些更改、提交和推送到定制仓库。
|
||||||
|
##### 2. 推送定制版本到基线仓库
|
||||||
|
如何让基线仓库知道定制版本修改了什么呢?给基线仓库也推送一份就可以了。
|
||||||
|
在定制程序下打开TortoiseGit的推送界面,修改要推送到远端的分支名称,不要和master、develop等重要分支重复,并且把远端的连接改为“upstream”,点击确定。
|
||||||
|

|
||||||
|
这样,在服务器上就会多出一个分支“GX”,内容为定制版本的更改。
|
||||||
|
##### 3. 获取基线仓库的更改
|
||||||
|
在基线程序下,打开TortoiseGit的获取界面,点击确定。
|
||||||
|
然后打开TortoiseGit的日志信息界面,点击右上角的超链接(这里是master)
|
||||||
|

|
||||||
|
然后在引用列表选择“remotes/origin/GX”,即上一步新上传的分支。双击打开。
|
||||||
|
##### 4. 摘取更改
|
||||||
|
找到要采纳的更改,右键选择“摘取此提交”,点击“继续”。
|
||||||
|

|
||||||
|
有冲突的会提示冲突,需要解决冲突,没有冲突了,然后点击提交。这样就把定制版本的更改同步到基线。测试无误后就可以推送到基线仓库。
|
||||||
|
##### 5. 删除基线上的定制分支
|
||||||
|
一切都结束后,基线上的定制分支就用不到了,可以删除它。
|
||||||
|
在引用列表界面,选中“remotes/origin/GX”,右键选择“删除远端分支”,这样本地和服务器上都会删除该分支。
|
||||||
|

|
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 216 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 13 KiB |
|
@ -0,0 +1,40 @@
|
||||||
|
# 解决冲突
|
||||||
|
## 文件冲突原因
|
||||||
|
在进行合并、摘取和变基操作时,不可避免的会遇到更改发生冲突,需要先解决冲突,然后才能继续。
|
||||||
|

|
||||||
|
产生冲突的原因很简单:
|
||||||
|
从同一个节点衍生出两个版本A和B, 在相同的位置,A版本改成某个值,B版本改成另个值,然后把B合并到A上,这时git就会触发冲突,两个版本的优先级是相同的,git不知道该采用哪个值,所以就需要人工干预。
|
||||||
|

|
||||||
|
|
||||||
|
## 冲突界面介绍
|
||||||
|
右键TortoiseGit,选择解决冲突,就会弹出冲突列表。
|
||||||
|

|
||||||
|
双击列表中的文件,打开合并窗口。
|
||||||
|

|
||||||
|
### 文本框
|
||||||
|
合并窗口有三个文本框:
|
||||||
|
- 左上角是要导入的版本
|
||||||
|
- 右上角是当前的版本
|
||||||
|
- 下方是合并后的版本
|
||||||
|
|
||||||
|
要注意的是,只有下方的文本框可以编辑,上面两个都是只读的。
|
||||||
|
文本框的左边会有一些小图标,它们代表对应行所做更改的操作类型。
|
||||||
|

|
||||||
|
### 工具栏
|
||||||
|
常用的几个操作:
|
||||||
|
- 标记为已解决:在该文档的所有冲突解决完后点击,会在冲突文件列表中删除该文件。
|
||||||
|
- 上/下一处冲突:快速定位冲突。
|
||||||
|
- 使用左侧文本块:用于快速采纳更改,下面有个三角,可以选择“使用右侧文本块”。
|
||||||
|
|
||||||
|
## 详细操作
|
||||||
|
1. 在冲突列表打开冲突文件。
|
||||||
|
2. 找到下文本框左侧的叹号,该行表示尚未解决的冲突。
|
||||||
|
3. 然后再看上方两文本框的相同位置。
|
||||||
|
- “=”代表该版本的修改前的文本;
|
||||||
|
- “+”代表新增或者修改后的文本;
|
||||||
|
- “-”代表删除该行;
|
||||||
|
4. 然后根据实际情况选择左边或者右边,亦或者两个都不满足,直接在下文本框编辑。
|
||||||
|
5. 用“上/下一处冲突”切换到下一处冲突编辑。
|
||||||
|
6. 全部修改完后,点击“标记为已解决”,然后再保存退出。
|
||||||
|
7. 处理剩下的冲突文件。
|
||||||
|
8. 测试、提交、推送。
|
|
@ -2,7 +2,7 @@
|
||||||
研发Git工具内部培训教程
|
研发Git工具内部培训教程
|
||||||
## 服务器
|
## 服务器
|
||||||
用浏览器访问公司Git服务器网址 (孙村或临沂的同事需要先打开PLM的VPN):
|
用浏览器访问公司Git服务器网址 (孙村或临沂的同事需要先打开PLM的VPN):
|
||||||
http://172.188.24.12:3000/
|
http://172.188.23.7:3000/
|
||||||
后面所有涉及到Git服务器的操作都应保证VPN畅通
|
后面所有涉及到Git服务器的操作都应保证VPN畅通
|
||||||
|
|
||||||
新用户需要先注册:
|
新用户需要先注册:
|
||||||
|
@ -12,6 +12,7 @@ http://172.188.24.12:3000/
|
||||||
## 教程内容
|
## 教程内容
|
||||||
0. [Git环境安装](./Lab0/lab0.md)
|
0. [Git环境安装](./Lab0/lab0.md)
|
||||||
1. [创建、修改、暂存和提交](./Lab1/lab1.md)
|
1. [创建、修改、暂存和提交](./Lab1/lab1.md)
|
||||||
2. [克隆、拉取、推送](./Lab2/lab2.md)
|
2. [推送、拉取、克隆](./Lab2/Lab2.md)
|
||||||
3. [分支管理](./Lab3/lab3.md)
|
3. [分支管理](./Lab3/lab3.md)
|
||||||
4. [进阶(coming)](./)
|
4. [基线和定制版本同步更改](./Lab4/lab4.md)
|
||||||
|
5. [解决冲突](./Lab5/lab5.md)
|