前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 操作指南

Git 操作指南

作者头像
星姮十织
发布2021-12-25 06:44:39
6230
发布2021-12-25 06:44:39
举报
文章被收录于专栏:技术-汇集区技术-汇集区

1. 版本控制

1.1 概述

**版本控制(Revision control)**是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

版本控制主要有以下作用:

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

简单来说,版本控制就是用于管理多人协同开发项目的技术。

如果没有进行版本控制,或者版本控制本身缺乏正确的流程管理,那么在软件开发过程中将会导致很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等。

1.2 版本控制工具

主流的版本控制器有如下这些:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

其中,Git 和 SVN 最为常用

1.3 版本控制分类

  1. 本地版本控制 **在本地记录文件每次的更新。**可以对每个版本做一个快照,或是记录补丁文件,适合个人用。代表产品为 RCS。
  2. 集中版本控制 **所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改,本地就只有自己以前所同步的版本。**如果不连网的话,开发者就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据。当然,可以通过定期备份来降低损坏后带来的损失。代表产品为 SVN。
  3. 分布式版本控制 **所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,并可以在离线时先提交到本地,等到连网时再 push 到相应的服务器或其他用户那里即可。**由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,不会因为服务器损坏或者网络问题,造成不能工作的情况。但是另一方面,这也增加了本地存储空间的占用。并且,每个用户都拥有完整的版本数据,可能会为公司带来安全隐患。代表产品为 Git。

1.4 SVN 与 Git 的区别

  • SVN SVN 是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
  • Git Git 是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件 A,其他人也在电脑上改了文件 A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。另外,Git 也可以直接看到更新了哪些代码和文件。

2. Git 环境配置

2.1 下载 Git

由于 Git 官网的下载速度过慢,我们需要通过淘宝镜像下载 Git:淘宝镜像 Git 下载

下载完成后,直接打开安装包,全选 “下一步”,安装即可。

安装完成后,鼠标在任意目录下点击右键,可以看到菜单栏中出现了两个新的选项:

  • **Git Bash Here:**Unix 与 Linux 风格的命令行,推荐使用。
  • Git GUI Here:图形界面,不推荐使用。

2.2 基础命令

打开 Git Bash,输入以下指令进行测试:

代码语言:javascript
复制
cd 			改变目录。
cd.. 		回退到上一个目录,直接cd进入默认目录
pwd			显示当前所在的目录路径
ls			列出当前目录中的所有文件
ls(ll)		更详细地列出当前目录中的所有文件
touch		新建一个文件
rm			删除一个文件
mkdir		新建一个目录
rm -r		删除一个目录
mv			移动文件
reset		重新初始化终端/清屏
clear		清屏
history		查看命令历史。
help		帮助
exit		退出
#			注释

还有一个命令,大家千万不要去尝试rm -rf /,它会从根目录开始,清除所有的文件

2.3 Git 配置

Git 中所有的配置,其实都保存在本地文件里,使用 git config -l 指令即可查看。

代码语言:javascript
复制
Administrator@PC202006090948 MINGW64 ~/Desktop
$ git config -l
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
credential.helper=manager

如果输入 git config --system --list,即可查看所有的系统配置:

代码语言:javascript
复制
Administrator@PC202006090948 MINGW64 ~/Desktop
$ git config -l
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
credential.helper=manager

可以看到,目前的系统配置就是全部的配置。这是因为,我们还没有进行用户配置。输入以下命令即可配置用户名和邮箱:

代码语言:javascript
复制
git config --global user.name ""	# 引号内输入你的用户名
git config --global user.email ""	# 引号内输入你的邮箱

注意,这里配置的信息十分重要,不要胡乱输入。

配置完成之后,我们可以使用 git config --global --list 命令查看所有的用户配置信息:

代码语言:javascript
复制
Administrator@PC202006090948 MINGW64 ~/Desktop
$ git config --global --list
user.name=		# 你刚刚配置的用户名
user.email=		# 你刚刚配置的密码

此时,我们再次输入 git config -l 查看所有配置,就可以看到如下内容:

代码语言:javascript
复制
Administrator@PC202006090948 MINGW64 ~/Desktop
$ git config -l
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
credential.helper=manager
user.name=		# 你刚刚配置的用户名
user.email=		# 你刚刚配置的密码

3. Git 基本理论

3.1 工作区域

Git 共有四个工作区域:

  • 工作目录(Working Directory):平时存放项目代码的地方
  • 暂存区(Stage / Index):用于临时存放代码的改动。事实上,它只是一个文件,用于保存即将提交到文件列表信息。
  • 本地仓库(Repository 或 Git Directory):安全存放数据的位置,这里包含你提交到所有版本的数据。其中,HEAD 指向最新放入仓库的版本。
  • 远程仓库(Remote Directory):托管代码的服务器。

其中,前三个区域在本地,最后一个区域在云端(如 GitHub、Gitee 等)。

文件在这四个区域之间的转换关系如下:

  • 工作目录 --(git add)--> 暂存区 --(git commit)--> 本地仓库 --(git push)--> 远程仓库
  • 远程仓库 --(git pull)--> 本地仓库 --(git reset)--> 暂存区 --(git checkout)--> 工作目录

3.2 工作流程

若不考虑最后推送到远程仓库,Git 的工作流程一般是这样的:

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

因此,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)。

4. Git 项目操作

4.1 项目搭建

**工作目录(WorkSpace)**一般就是我们希望 Git 帮助管理的文件夹、可以是项目的目录,也可以是一个空目录。建议路径中不要包含中文。

而想要搭建本地仓库,一般有两种方法。这两种方法都只需要在工作目录中右键点击 "Git Bash Here",然后分别输入以下指令即可:

  • 创建本地仓库: git init
  • 克隆远程仓库: git clone [远程仓库的url] # 远程仓库的url可以从github或gitee等远程代码托管平台上获取

4.2 文件操作

4.2.1 文件状态

版本控制实际上就是对文件的版本控制。要对文件进行修改、提交等操作,首先要知道文件当前在什么状态。否则可能会出现提交了现在还不想提交的文件,或者要提交的文件没提交上的问题。

文件的四种状态如下:

  • Untracked:未跟踪。此文件在文件夹中,但并没有加入到 Git 库,不参与版本控制。通过 git add 状态变为 Staged。
  • Unmodify:文件已经入库,但尚未修改。即,版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处:如果它被修改,则变为 Modified;如果使用 git rm 移出版本库,则成为 Untracked 文件。
  • Modified:文件已修改,但仅仅是修改,并没有进行其他的操作。这个文件也有两个去处:通过 git add 可进入暂存 Staged 状态;使用 git checkout 丢弃修改返回到 Unmodify 状态。
  • Staged:暂存状态。此时执行 git commit 则将修改同步到库中,使得库中的文件和本地文件又变为一致,文件变为 Unmodify 状态;若执行 git reset HEAD filename 则会取消暂存,文件状态变为 Modified。
4.2.2 相关命令
代码语言:javascript
复制
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status

git add .	# 添加所有文件到暂存区
git commit -m "消息内容"	# 提交暂存区中的内容到本地仓库,其中-m后面的内容是提交信息
git push	# 推送所有文件到远程仓库
4.2.3 忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等,这时可以在主目录下建立 ".gitignore" 文件。

此文件有如下规则:

  1. 默认状态下,文件和目录都不会被忽略。
  2. 以井号(#)开始的行将会被视为注释。
  3. 可以使用 Linux 通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
  4. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  5. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  6. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件。
代码语言:javascript
复制
#			注释
*.txt		忽略所有以.txt结尾的文件
!lib.txt	lib.txt除外
/temp       忽略temp目录下的所有文件,但不包括其子目录下的文件
build/      忽略build目录下的所有子目录
doc/*.txt   忽略doc目录下的.txt文件,但不包括其子目录下的.txt文件
4.2.4 分支

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。分支可以让一个项目中存在多份互不干扰的代码,通常用于区别主线发布版本与开发版本。这些分支也可以合并,但如果同一个文件在不止一个分支中被修改,那么在合并分支时就会引起冲突。想要解决这种冲突,只能先通过协商,修改冲突文件,然后重新提交。

master 分支是主分支,应该非常稳定,通常用来发布新版本。一般情况下,不允许在主分支上工作,而是在新建的 dev 分支上工作。工作完成后,比如马上要发布,或者 dev 分支代码稳定后,就可以合并到主分支 master 上来。

Git 分支中常用的指令:

代码语言:javascript
复制
# 列出所有本地分支
git branch

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

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

# 切换到一个分支
git checkout [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]

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 版本控制
    • 1.1 概述
      • 1.2 版本控制工具
        • 1.3 版本控制分类
          • 1.4 SVN 与 Git 的区别
          • 2. Git 环境配置
            • 2.1 下载 Git
              • 2.2 基础命令
                • 2.3 Git 配置
                • 3. Git 基本理论
                  • 3.1 工作区域
                    • 3.2 工作流程
                    • 4. Git 项目操作
                      • 4.1 项目搭建
                        • 4.2 文件操作
                          • 4.2.1 文件状态
                          • 4.2.2 相关命令
                          • 4.2.3 忽略文件
                          • 4.2.4 分支
                      相关产品与服务
                      代码托管
                      CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档