Git学习笔记

桌桌 2022-8-12 338 8/12

学习课程:【狂神说Java】Git最新教程

Git相关知识

SVN是集中式的版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活动推送到中央服务器,集中式版本控制必须联网才能工作,对网络宽带的要求比较高。

Git是分布式的版本控制系统,没有中央服务器,每个人的电脑都是一个完整的版本库,工作的时候不需要联网,因为版本都在自己的电脑上。协同的办法是:如果A在自己的电脑上修改了文件1,其他人也在电脑上修改了文件1,这时,两个人之间只需要把各自的修改推送给对方,就可以查看对方的修改了。Git可以直接看到更新了哪些代码和文件。

Git是目前世界上最先进的分布式版本控制系统。

Git学习笔记

使用镜像下载,会比官网快很多,以下是淘宝的镜像下载网站

CNPM Binaries Mirror (npmmirror.com)

Git安装

安装好后

Git学习笔记

Git Bash : Unix与Linux风格的命令行,一般使用这个

Git CMD : Windows风格的命令行

Git GUI : 图形界面的Git

其中Git Bash操作与linux类似,较为简单

pwd:显示当前所在的目录路径

Git必要配置

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

查看配置
git config -l
过滤查看系统的配置
git config --system --list
过滤查看当前用户(global)配置
git config --global --list
git相关的配置文件
  • Git\mingw64\etc\gitconfig : Git 安装下目录的gitconfig --system级

    Git学习笔记

  • C:\User\Administrator.gitconfig : 只适用于当前登录用户的配置 --global全局

    Git学习笔记

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

当安装好Git之后首要的事是设置用户名称和email地址,每次Git提交都是使用该信息。他被永远嵌入到了提交中:

git config --global user.name "zhuozhuo"
git config --global user.email 787934074@qq.com

只需要做一次这个设置,如果传递了--global这个选项,Git将总是会使用该信息来处理用户在系统内的一切操作。如果希望在一个特定的项目中使用不同的名称或者email地址,可以在该项目运行命令而不使用--global这个选项。总之--global为全局配置,不为某个项目的特定配置。

Git的工作原理

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系:

Git学习笔记

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

  • index/Stage:暂存区,用于临时存放改动,事实上只是一个文件

  • Repository:仓库区(或者叫做本地仓库),就是安全存放数据的位置,里面容纳着提交过的所有版本的数据。其中HEAD指向最新放入仓库的版本。

  • Remote:远程仓库,托管代码的服务器

Git学习笔记

工作流程

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

2 将需要进行版本管理的文件放入暂存区域;

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

因此会出现三种管理状态:已修改(modified),已暂存(staged),已提交(committed)

Git项目搭建

工作目录WorkSpace一般就是需要git帮助进行管理的文件夹,也可以是项目的目录,空目录等,建议不要出现中文。

Git学习笔记

本地仓库搭建

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

1、创建全新的仓库

#在本地新建一个Git代码库
git init

2、执行后可以看到在项目目录中多了一个.git隐藏文件,关于版本的所有信息都包含在这个目录里面

Git学习笔记

Git学习笔记

克隆远程仓库
# 克隆一个项目和它的整个代码历史、版本信息
git clone [url]

Git文件操作

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了目前还不需要提交的文件,或者需要提交的文件没有提交

  • Untracked:未跟踪,此文件在文件夹中,但是没有提交到git库,不参与版本控制,可以通过git add状态变为Staged

  • Unmodify:文件已经入库,未修改,即版本中的文件快照内容与文件夹中的完全一致,这种类型的文件有两种去处,如果它被修改了,而变为Modified状态,如果使用git rm移出版本库,则成为Untracked文件

  • Modified:文件已经修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout则丢弃修改,返回到unmodify的状态。git checkout即从库中取出文件,覆盖当前的修改

  • Staged:暂存状态,执行git commit则将修改同步到库中,这时库中更多文件又和本地文件又变为一致,文件为Unmodify状态。执行git reset HEAD filename取消暂存,文件状态为Modified

查看文件状态
# 查看指定文件的状态
git status [filename]

# 查看所有文件的状态
git status
提交等操作
# git add .                 # 添加所有文件到暂存区
# git commit -m "message"   # 提交暂存区中的内容到本地仓库中 -m 提交信息

一般我们是在workspace中对代码进行操作,得到一个版本之后使用git add . 来跟踪文件,然后确认没有问题之后使用git commit -m "message"进行提交到本地仓库中

Git学习笔记

忽略文件

有些时候我们不需要把项目中的所有文件进行版本控制,比如数据库文件、临时文件、设计文件等

可以在主目录下建立“.gitignore”文件,有以下规则:

  1. 忽略文件中国的空行或以井号(#)开始的行将会被忽略

  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问好(?)代表一个任意一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选字符串...

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不会被忽略。

  4. 如果名称的最前面是一个路径分隔符有(/),表示要忽略的文件在此目录下,而子目录的文件不忽略。

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件

# 为注释
*.txt       # 忽略所有以 .txt结尾的文件
!lib.txt    # 但是lib.txt文件除外
/temp       # 仅仅忽略项目根目录下的TODO文件,不包括其他目录temp
build/      # 忽略build/目录下的所有文件
doc/*.txt   # 会忽略 doc/note.txt 但是不包括 doc/server/arch.txt(隔了两层)

使用Gitee

github有墙比较慢,国内一般可以使用gitee,公司有时候会搭建自己的git服务器

gitlab:The One DevOps Platform | GitLab

1 注册并登录,设置好信息

Git学习笔记

2 设置本机绑定SSH公钥,实现免密码登录

平时工作在本地仓库,提交到码云远程仓库时就不需要写密码了

# 进入 C:\Users\78793\.ssh
# 生成公钥
ssh-keygen -t rsa
# 位置就在C:\Users\78793\.ssh

Git学习笔记

3 将新建的公钥信息添加到gitee账户中。

Git学习笔记

4 使用gitee创建一个自己的仓库

Git学习笔记

git克隆

Git学习笔记

测试克隆gitee的项目

Git学习笔记

出现Git Credential Manager Enter credentials for ‘https://gitee.com/‘时,可以输入gitee用户名与密码来继续。(应该只会出现一次)

IDEA中集成Git

  • 新建项目,绑定git

  • 修改文件,使用IDEA操作git

  • push到远程仓库

以下进行实践

在git初始化的目录下新建项目,或者在新建之后将远程仓库中的所有文件拷贝到新建项目里面即可,如下所示:

Git学习笔记

尝试add

Git学习笔记

commit之后如下所示:

Git学习笔记

在文件进行修改过后也可以右键对文件进行提交

Git学习笔记

使用git push或者在IDEA中点击push,将项目push到远程仓库

Git学习笔记

可以在gitignore文件中写下选择每次操作默认push等操作的文件。

Git分支

git分支的作用:解决多人合作时的版本控制。

以下是使用git版本控制的分支流程图示例。

Git学习笔记

git分支常用指令

# 列出所有常用分支
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/]

push操作可以选择

Git学习笔记

如果多个分支并行执行,就会导致我们的代码不冲突,也就是同时存在多个版本。


例如在项目实践中,多个项目组可能会出现多个分支

web-api 假设A组开发

web-admin 假设B组开发

web-app 假设C组开发

可能B会调用并修改了A写的方法,C会调用B或者A的代码


如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件之后重新提交,协商选择使用谁的代码继续开发

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

- THE END -

桌桌

8月16日15:46

最后修改:2022年8月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 3 条评论

  1. bitcoin

    Thanks to my father who shared with me regarding this webpage, this weblog is in fact remarkable. Abe Peaches

  2. passwords

    Payday loans are loans with an unexpected expense that you pay back quickly, by your following payday, to avoid the exorbitant fees and interest. Arron Falley

  3. bahis oyna

    No matter if some one searches for his essential thing, thus he/she wants to be available that in detail, so that thing is maintained over here. Virgil Lemme