Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践 | 青训营

73 阅读6分钟

选题背景

在开发中,每次对文件的修改都会衍生出新的版本,多人协作时也会产生不同版本,不停的修改会产生大量文件,此时可以引入版本控制工具,帮助版本迭代与合并,管理修改历史。 下面是版本控制的好处:

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

分布式版本控制 Git

分布式管理可以让每个人都可以下载所有的代码,防止服务器崩溃导致无法更新代码。

与SVN的区别

  1. SVN是集中式版本控制系统 版本库是集中放在中央服务器的 而工作的时候 用的都是自己的电脑 所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作 ,对网络带宽要求较高
  2. Git是分布式版本控制系统 没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网

Git可以直接看到修改的文件内容

Git使用方式

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git

一般使用git bush

基本linux命令

  1. cd 改变目录
  2. cd .. 切换到上一级目录(cd后面跟空格

1.png

  1. pwd 显示当前所在目录,是Print Working Directory的缩写

1.png 4. clear 清屏 5. ls 列出目录下所有文件(绿色代表程序,蓝色代表目录,白色代表文件 6. 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件 7. rm 删除一个文件(remove 如rm index.js 8. mkdir 新建一个目录 mkdir src 9. rm -r 删除目录 例如rm -r src 删除src目录

r代表递归(recursive)的意思。递归删除意味着它将删除指定的目录及其所有子目录和文件 f代表force 强制删除

  1. mv 移动文件 mv index.js srcindex.js移动到src目录下
  2. reset重新初始化终端,约等于清屏
  3. history 查看命令历史,查看用过的所有命令
  4. help 帮助
  5. exit退出
  6. #表示注释

Git配置

所有的配置文件,其实都保存在本地

查看配置 git config -l -l其实就是--list

#查看系统config
git config --system --list
#查看当前用户(global)配置
git config --global --list

设置用户名与邮箱(用户标识,必要)

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "xxxx" #名称
git config --global user.email xxx@qq.com # 邮箱

本质是存到了本地文档.gitconfig

Git原理

1.png

  • Workspace:工作区,就是平时存放项目代码的地方

  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

工作流程

1.png

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域; 如git add .( **.**的意思是所有文件)

3、将暂存区域的文件提交到git仓库。 如 git commit

4、提交到远程git push 因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

Git项目搭建

工作目录(WorkSpace)一般就是希望Git管理的文件夹,可以是项目目录,也可以是一个空目录,建议使用全英文。

1.png

本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

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

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

此时关于版本等的所有信息都在.git文件内。

克隆远程仓库

1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地

# 克隆一个项目和它的整个代码历史(版本信息)
git clone [url] # https://gitee.com/cicadasmile/model-arithmetic-parent.git

我在gitee上克隆了一个文件并存到相应目录下,如下

1.png

Git文件操作

文件的四种状态

  1. 未跟踪(Untracked):表示该文件在git仓库中不存在,git无法跟踪对其的更改。可以通过使用git add命令将文件添加到git仓库中。

  2. 已修改(Modified):表示该文件已存在于git仓库中,但在工作目录中发生了更改。这意味着在下一次提交之前需要将更改的内容通过git add命令添加到暂存区。

  3. 已暂存(Staged):表示已修改的文件已经通过git add命令添加到暂存区。这意味着文件的更改已经准备好被提交到git仓库中。

  4. 已提交(Committed):表示已暂存的文件已经通过git commit命令提交到git仓库中。文件的更改已经永久保存在git仓库中,并且可以通过git checkout命令回滚到该提交的版本。

具体操作

git status:查看所有文件状态

30a5f0be-6161-4276-b347-c0b42cdc1747.png

git status filename 查看指定文件状态

79b68354-0cc5-4bd9-89cc-78f9a9101827.png git add .将所有文件添加到缓存区

8464449a-8268-4016-9c57-2907583f7838.png git commit -m "message"指定注释内容并提交暂存区的内容到本地仓库 m:message

4a5d1889-b554-4a6b-925e-478701121dda.png

文件的忽略规则

在主目录下新建.gitignore

忽略规则:

可以使用通配符*、?、[]、{} !代表例外

/filename 代表忽略此目录下的子目录

filename/ 代表忽略上级目录

ecc8a1ee-9137-4ed2-9efb-725a4bd47e11.png 此时将忽略以上内容

28b6005a-3c10-4859-b840-ecea14e93373.png

遇到的问题

在删除已提交的文件时提示无法删除

014db05e-4056-4bfd-8bb6-69c9a5e5c9a4.png 此时可以关闭git并重启

引申: .git目录下生成的是一个仓库,没必要删除