11# Git分布式版本控制系统
2- 为什么说Git是分布式的,原因是Git仓库的每一个参与者都拥有Git仓库的完整副本,
3- 本地修改和提交不依赖于Git服务器,只有参与者之间同步数据时才需要Git服务器。
2+
3+ 为什么说Git是分布式的,原因是Git仓库的每一个参与者都拥有Git仓库的完整副本, 本地修改和提交不依赖于Git服务器,只有参与者之间同步数据时才需要Git服务器。
44
55参考:[ Git 使用教程] ( https://mp.weixin.qq.com/s/4SXOU4cTAjk3HPmpu8IgEw )
6- > SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
6+ > SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
77>
88> Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
99
1010## git服务器
11+
1112推荐使用github和gitlab,其中gitlab可以独立部署(本地化部署)
1213
1314## git概念和基础知识
@@ -19,6 +20,7 @@ Git有两个repository,远程仓库(remote)和本地仓库(local),
1920远程库的默认名称是origin,即远程库上的分支通常以origin/xxx/xyz表示,而本地仓库上的分支一般以xxx/xyz表示。
2021
2122本地仓库涉及两个区,工作区和暂存区,已经add但未commit的文件在暂存区。
23+
22241 . 使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
23252 . 使用git commit提交更改,实际上就是把暂存区的所有内容提交到本地仓库的当前分支上,尚未push到远程仓库。
2426
@@ -27,28 +29,50 @@ HEAD是git指向当前分支节点的一个指针,也叫游标。它可以指
2729git fetch 更新的是本地仓库中的origin部分,并不影响本地仓库中已经创建、打开、签出的分支。
2830
2931git pull 是git fetch + git merge的组合。git pull是把远程仓库更新到本地仓库。
30- > 注意:pull操作可能会影响工作区,而fetch只影响本地仓库,merge操作并不影响本地仓库,只有commit后才会被提交。
32+ > 注意:pull操作可能会影响工作区,而fetch只影响本地仓库,merge操作并不影响本地仓库,只有commit后才会被提交。
3133>
3234> pull后,如果远程仓库和工作区文件存在冲突,则会自动提示,并显示出差异。
3335
3436追踪(tracking):本地分支与远程分支之间如果关联,则本地分支是远程分支的跟踪,跟踪某些场景会自动创建,比如同名情况。
3537
3638## git工作流(workflow/flow)
37- 将仓库区分为公共仓库和个人仓库,公共仓库是发布release的仓库,不作日常开发使用。
38- 项目参与者通过fork公共仓库到个人仓库,所有的日常操作均在个人仓库完成。
3939
40- 公共仓库一般不允许push,只能通过merge进行。
40+ 将仓库区分为公共仓库和个人仓库,公共仓库是发布release的仓库,不作日常开发使用。 项目参与者通过fork公共仓库到个人仓库,所有的日常操作均在个人仓库完成。
41+
42+ 公共仓库一般不允许push,只能通过merge进行(提交拉取请求pull requests)。
4143
4244无论是公共仓库还是个人仓库,master分支一般不允许直接push(可设置为受保护的分支),只能通过由其他分支merge到master。
4345
44- 在这种工作流下,公共仓库一般作为为upstream(这并不是一个git 关键词),而个人仓库实则为remote也就是origin。
45- upstream允许fetch,而origin允许push。
46+ 在这种工作流下,公共仓库一般作为为upstream(这并不是一个git 关键词),而个人仓库实则为remote也就是origin。 upstream允许fetch,而origin允许push。
47+
48+ 添加仓库作为upstream,以便于将公共仓库同步到个人仓库,使用如下命令:
4649
47- 添加仓库作为upstream
4850``` shell script
4951git remote add upstream git://github.com/public/repo.git
52+ git fetch upstream
53+ ```
54+
55+ ## 常见问题FAQ
56+
57+ 1 . 当工作区已经有修改但未提交的文件存在冲突时应该如何解决?
58+
59+ - 保留当前工作区修改
60+
61+ ``` shell
62+ git stash # 将本地的状态暂时保存起来
63+ git pull origin master
64+ git stash pop # 将暂时保存起来本地的状态还原回来
5065```
5166
67+ - 不保留当前工作区修改
68+
69+ ``` shell
70+ git reset --hard # 将本地的状态恢复到上一个commit id
71+ git pull origin master
72+ ```
73+
74+ 2 . 其他问题
75+
5276> 规则:在任何时候,在用户使用的任何一个版本都必须在任何时刻在git中找到,他们必须是1对1的关系。
5377
5478## 运行环境
@@ -60,7 +84,6 @@ git remote add upstream git://github.com/public/repo.git
6084| UAT| User Acceptance Test environment|
6185| PRO| Production environment|
6286
63-
6487## git分支管理
6588
6689简单的版本
@@ -75,7 +98,6 @@ git remote add upstream git://github.com/public/repo.git
7598
7699参考:[ Git 分支设计规范] ( https://www.cnblogs.com/xinliangcoder/p/12336576.html )
77100
78-
79101| 分支| 名称| 可发布到的环境| 说明|
80102| :----| :----| :----| :----|
81103| master| 主分支| PRO||
@@ -84,19 +106,21 @@ git remote add upstream git://github.com/public/repo.git
84106| develop| 测试分支| FAT||
85107| feature| 需求开发分支| DEV| 发布后删除即可|
86108
87- > 如果包含独立部署、特殊定制或封版的分支,建议放release分支
88- > 习惯上,release上的版本是可发布可正式使用的版本
109+ > 如果包含独立部署、特殊定制或封版的分支,建议放release分支
110+ > 习惯上,release上的版本是可发布可正式使用的版本
89111
90112## git命令
113+
91114暂略
92115
93116## others
94117
95118### commit规范
119+
961201 . 提交信息最好能反映出提交修改的意图,简单明了、清晰直观。
971212 . 字数不要过长,建议不超过60字
981223 . 可以附加issue编号
99123
100124### .gitignore
101- ignore顾名思义是不提交到仓库。
102- 在提交时,可以先确定哪些文件或目录需要ignore。
125+
126+ ignore顾名思义是不提交到仓库。 在提交时,可以先确定哪些文件或目录需要ignore。
0 commit comments