Git航行指南:踏上迷人的代码管理之旅

Git航行指南:踏上迷人的代码管理之旅

1、版本控制

所谓版本控制(Revision control),即在版本迭代中管理版本。

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。[1]

使用版本控制方便查看修改历史记录,备份以便恢复以前的版本。

  • 统计工作量
  • 并行开发、提高开发效率
  • 组织和保护源代码与文档

简单说就是用于管理多人协同开发项目的技术。

2、常见版本控制工具

主流的版本控制工具有以下:

  • Git
  • SVN
  • CVS
  • VSS
  • TFS

目前影响力最大的且使用最广泛的是Git和SVN。

3、Git工作原理

Git分区

Git本有三个区域,工作区(work folder)、暂存区(stage)、本地仓库(local repo),再加上远程的git仓库(remote repo)就可以分为四个区域。如下图[2]所示。

Gitfork意为分叉,你可以在GitHub上fork别人的项目到自己的仓库,此时流程如下。

Working with Git

Git工作流程

Git工作流程如下:

  1. 在工作目录中添加修改文件;
  2. 将需要进行版本管理的文件放入暂存区域;
  3. 将暂存区域的文件提交到git仓库。

Git

4、Git项目搭建

Git项目搭建一般有两种方式,一种是创建全新的仓库,另一种是克隆远程的仓库。

Git

本地仓库搭建

本地仓库搭建步骤如下:

1、创建全新的仓库,需要用Git管理的项目的根目录执行:

1
2
#在当前目录新建一个Git代码库
$ git init

2、执行代码后,项目目录中多了一个.git目录,关于版本等所有信息都在目录里面。

克隆远程仓库

1、创建工作目录。

2、根目录执行代码:

1
2
#克隆一个项目和它的整个代码历史
$ git clone [url]

5、Git文件操作

文件有四种状态,如下图所示。

Git文件四种状态

查看文件状态

文件四种状态可以通过下面命令进行查看。

1
2
3
4
5
#查看指定文件的状态
git status [filename]

#查看所有文件的状态
git status

忽略文件

如果不想让某些文件纳入版本控制中,比如数据库文件,临时文件,此时需要忽略文件。

在主目录下简历".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行,以#开始的行会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符。
  3. 如果名称的最前面有一个感叹号(!),代表例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录的文件不忽略。
  5. 如果名称的最后面有一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件。
1
2
3
4
5
#为注释
*.txt #忽略所有以.txt结尾的文件
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其他目录temp
build/ #忽略build/目录下的所有文件

6、Git分支

类似平行宇宙,两个分支不干扰。如下图有Bugfix与feature两个分支。

Git Branch

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支但依然停留在当前分支
git branch [branch-name]

# 新建一个分支并切换到该分支
git checkout -b [branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 删除分支
$ git branch -d [branch-name]

#删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

master主分支应该非常稳定,用来发布新版本,一般不允许在上面工作,工作一般新建dev分支上工作,工作完后合并到主分支。

7、开发推荐流程

1.git clone // 到本地
2.git checkout -b xxx 切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上)
3.修改或者添加本地代码(部署在硬盘的源文件上)
4.git diff 查看自己对代码做出的改变
5.git add 上传更新后的代码至暂存区
6.git commit 可以将暂存区里更新后的代码更新到本地git
7.git push origin xxx 将本地的xxxgit分支上传至github上的git
----------------------------------------------------------------------------------------------
(如果在写自己的代码过程中发现远端GitHub上代码出现改变)
1.git checkout main 切换回main分支
2.git pull origin master(main) 将远端修改过的代码再更新到本地
3.git checkout xxx 回到xxx分支
4.git rebase main 我在xxx分支上,先把main移过来,然后根据我的commit来修改成新的内容
(中途可能会出现,rebase conflict ---->手动选择保留哪段代码)
5.git push -f origin xxx 把rebase后并且更新过的代码再push到远端github上(-f --->强行)
6.原项目主人采用pull request 中的 squash and merge 合并所有不同的commit
----------------------------------------------------------------------------------------------
远端完成更新后
1.git branch -d xxx 删除本地的git分支
2.git pull origin master 再把远端的最新代码拉至本地

  1. 摘选百度百科版本控制词条。https://baike.baidu.com/item/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/3311252 

  2. 配图在各种博客被被转来转去,找不到原作者,懒得写了。 

updatedupdated2023-07-122023-07-12