Git分布式版本控制工具

快速搭建git环境

1.下载git

GitHub - Sjj1024/Git-win: Git for Windows. 国内直接从官网下载比较困难,需要FQ。这里提供一个国内的下载站,方便网友下载

2.下载SourceTree

Sourcetree | Free Git GUI for Mac and Windows (sourcetreeapp.com)

 

3.下载TortoiseGit

下载 – TortoiseGit – Windows Shell Interface to Git

下载语言包

 

4.gitee绑定

C:\Program Files\TortoiseGit\bin\puttygen.exe

generate(生成钥匙对)->把public key放入gitee设置SSH公钥里->Save private key(保存私钥)

右键文件夹->TortoiseGit->推送->管理->URL:gitee仓库SSH->Putty密钥:导入保存的私钥

 

 

.gitignore:

使用‘#’ 开头的行被视为注释,可以在文件中添加说明。
以‘/' 开头:从项目根目录开始匹配,否则会在项目内所有目录中搜索。
以‘/' 结尾:匹配文件夹,而不是同名文件。
通过‘!’取消忽略,即使之前有忽略规则。

.gitignore文件的匹配规则
1.空行或者以#开头的行会被Git忽略。一般空行用于可读性的分隔,#一般用作注释
2.使用标准的Blob模式匹配,例如:
   星号*通配任意个字符
 问号 ?匹配单个字符
 中括号[]表示匹配列表中的单个字符,比如: [abc] 表示a/b/c
3.两个星号 ** 表示匹配任意的中间目录
4.中括号可以使用短中线连接,比如:[0-9]表示任意一位数字,[a-z]表示任意一位小写字母
5.感叹号!表示取反
github.com/github/gitignore

 

如何在GitHub上创建一个我们自己的仓库,点击一下左上角的logo回到我们的主页->绿色的创建仓库的按钮create repository->

那这是远程仓库地址的
SSH协议
git clone SSH地址

配置SSH的密钥,首先回到我们的用户根目录cd,->进入到点SSH这个目录:cd .shh->ssh-keygen -t rsa -b 4096->test回车
回到GitHub页面->点一下右上角的头像->settings->SSH and GPG keys->新建SSH密钥->粘贴公钥
回到命令行终端:创建config文件并添加
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test 

Push就是把本地仓库的修改推送给远程仓库
Pull就是把远程仓库的修改拉取到本地仓库

 

使用GitKraken来打开仓库,这样就可以看到每次执行命令之后的变化

 

 

vscode+git

安装git->Use Visual Studio Code as Git's default editor
安装vscode终端插件terminal
右键文件夹->Open in Integrated Terminal->git status

初始化仓库->推送->从GitHub添加远程

怎么增加文件夹,变绿并且出现了一个大写的U
U代表的是attracted,也就是说没有被git跟踪的文件
M(黄色)是modify,修改
D(红色)是delete,删除

vscode自带git管理界面
加号“+”添加到暂存区

比较好用的git的插件
1.get graph :按住ctrl键可进行版本对比
2.get history:版本对比more->Select this commit->Compare with

 

 

环境配置:

在 Linux 上安装

以 Fedora 为例,如果你在使用它(或与之紧密相关的基于 RPM 的发行版,如 RHEL 或 CentOS),你可以使用 dnf:

$ sudo dnf install git-all

如果你在基于 Debian 的发行版上,如 Ubuntu,请使用 apt:

$ sudo apt install git-all

下载地址:https://git-scm.com/download

Git GUI:Git提供的图形界面工具

Git Bash:Git提供的命令行工具

当安装Git后首先要做的事情是设置用户名称和email地址。

    1.打开Git Bash
    2.设置用户信息:
    git config--global user.name"xxx"
    git config--global user.email "xxx@itcast.cn"
    查看配置信息
    git config--global user.name
    git config--global user.email
 
为常用指令配置别名:
1.打开用户目录,创建.bashrc文件
部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行touch~/.bashrc
2.在.bashrc文件中输入如下内容:
#用于输出git提交日志 
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 
#用于输出当前目录所有文件及基本信息 
alias 11='1s -al'

3.打开gitBash,执行source ~/.bashrc

 

解决GitBash乱码问题

1.打开GitBash执行下面命令

git config --global core.quotepath false

 2. ${git_home}/etc/bash.bashrc 文件最后加入下面两行

export LANG="zh_CN.UTF-8" 
export LC_ALL="zh_CN.UTF-8"

 

 

 

 

 

 

了解Git基本概念

git是一个免费开源的分布式版本控制系统,它使用一个叫做仓库的数据库来记录文件的变化,仓库中的每个文件都有一个完整的版本历史记录。可以看到谁在什么时间修改了哪些文件的哪些内容。

现在最流行的版本控制系统有两种,一种是集中式版本控制系统:SVN、CVS等等;另一种是分布式版本控制系统:Git、Mercurial等等。

集中式版本控制系统中所有的文件都保存在中央服务器上,每个人的电脑上只保存了一个副本。
修改文件过程:中央服务器下载最新的版本->添加修改内容->上传回中央服务器
优点:是使用起来非常简单;缺点:中央服务器的单点故障问题,如果中央服务器出现故障或者网络连接出现问题,那么所有人都无法工作了,只能等待中央服务器或者网络恢复正常。
而分布式版本控制系统就没有这个问题,每个人的电脑上都有一个完整的版本库,所以我们可以在本地进行修改,不需要考虑网络问题。
当需要将我们的修改内容分享给其他人的时候,只需要将仓库互相同步一下就可以了。

安装完成之后可以在终端中输入Git-v命令,如果能够看到版本信息,那么就说明已经安装成功了
终端的打开方式:右键->Git Bash Here

Git的使用方式主要有三种:命令行、图形化界面、IDE插件/扩展。
命令行:在终端中输入Git命令的方式来使用Git
图形化界面也叫GUI:通过一些专用的图形化工具软件来使用Git
ID插件:在IDE或者VSCode中,通过插件或者扩展的方式来使用Git

为了区分Linux操作系统中的命令,Git的所有命令都以Git开头,后面跟着具体的命令,比如Git init就是初始化的一个仓库
设置颜色:
Mac:iTerm2+Zsh+oh-my-zsh+Agnoster
Windows:posh-Git

使用Git Config命令:配置一下用户名和邮箱

Global参数:全局配置,对所有仓库都有效
System参数:系统配置,对所有用户都有效

global credential.helper store
这个命令来保存用户名和密码,这样就不用每次都输入了

global --list
这个命令来查看Git的配置信息

新建一个版本库来对本地的代码进行管理
版本库又叫仓库,英文名叫Repository,简称Repo,大家可以把仓库理解成一个目录,这个目录里面所有的文件都可以被Git管理起来,每个文件的修改、删除、添加等操作,Git都能够跟踪到。以便任何时候都可以追踪历史或者还原到之前的某一个版本
创建一个仓库非常的简单,只需要把一个目录变成Git可以管理的仓库就可以了

两种方式:一种是在自己电脑本地直接创建一个仓库;另一种是从远程服务器上克隆一个已经存在的仓库
首先需要找到一个合适的位置来创建一个空目录:mkdir learn-git->cd learn-git->git init
ls -a查看.git隐藏目录
git init后面还可以指定目录的名称,如果指定了,就会在当前目录下面创建一个新的目录作为Git仓库
就是使用git clone命令来从GitHub或者Gitty这种远程服务器来克隆一个Git仓库
提前在GitHub上建好了一个远程仓库->git clone +仓库地址

 

 

  版本控制器的方式:

a.集中式版本控制工具:版本库是集中存放在中央服务器的, team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
    举例:SVN和CVS

b.分布式版本控制工具:没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。
    举例:Git

 

git工作流程:

1.clone(克隆):从远程仓库中克隆代码到本地仓库

2.checkout(检出):从本地仓库中检出一个仓库分支然后进行修订

3.add(添加):在提交前先将代码提交到暂存区

4.commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本

5.ftch(抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。

6.pull(拉取):从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge

7.push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

 

Git的工作区域和文件的状态:
Git的本地数据管理分为三个区域:工作区、暂存区、本地仓库
工作区就是我们实际操作的目录,在资源管理器里面能够看到的文件夹就是工作区
暂存区就是一个中间区域,用于临时存放即将提交的修改内容
本地仓库就是Git存储代码和版本信息的主要位置,通过Git init命令创建的那个仓库

但是如果我们每次修改文件之后都需要进行一次提交操作的话会比较麻烦,所以Git给我们提供了一种方式,也就是可以将修改的文件先添加到暂存区中,然后再把所有暂存区中的文件统一执行一下提交操作

相应的,Git中的文件也存在几种状态:分别是"未跟踪","未修改","已暂存"和"已提交"
"未跟踪"就是我们新创建的还没有被Git管理起来的文件
"未修改"就是我们已经被Git管理起来,但是文件的内容没有变化,还没有被修改过
"已修改"就是我们已经修改了的文件,但是还没有添加到暂存区里面
"已暂存"就是我们修改之后并且已经添加到暂存区内的文件

能够使用Git常用命令:   

●ls/ll:查看当前目录

●cat:查看文件内容

●touch:创建文件

●vi:vi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、editPlus、notPad++等其它编辑器)

 

 

 

熟悉Git代码托管服务

1.获取本地仓库:

1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库

2)进入这个目录中,点击右键打开Git bash窗口

3)执行命令git init

4)如果创建成功后可在文件夹下看到隐藏的.git目录。

 

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

如何使用命令来控制这些状态之间的转换:
1. git add(工作区->暂存区)

2. git commit(暂存区->本地仓库)

touch xxx.txt//创建文件
git status//查看状态
git add .//添加所有文件进入暂缓区
git commit -m "标记"//提交暂存区到本地仓库(commit)
git log [options]//查看提交日志
    options
    -all:显示所有分支
    -pretty=oneline:将提交信息显示为一行
    -abbrev-commit:使得输出的commitld更简短
    -graph:以图的形式显示
git-log//查看提交日志
git reset --hard commitID//版本切换
git reflog//查看删除的记录

不需要git管理的文本:创建.gitignore文件

能够使用idea操作git

 

将文件添加到仓库里面
git status:查看仓库的状态,比如可以查看当前仓库处在哪个分支,有哪些文件,以及这些文件当前处在怎样的一个状态


首先来创建文件echo “文件名”>file1.txt
cat file1.txt查看文件内容

git add file1.txt
git commit -m "第一次提交"
不指定-m这个参数,会进入一个交互式的界面,默认会使用vim来编辑提交信息
提交完成之后再来看一下仓库的状态

可以使用通配符来添加多个文件
git add *.txt

添加所有文件:git add .

Reset命令用于回退版本,可以退回到之前的某一个提交的状态
Reset命令有三种用法
后面可以加上三个不同类型的参数
Soft参数:回退到某一个版本,并且保留工作区和暂存区的所有修改内容
Hard参数:回退到某一个版本,并且丢弃工作区和暂存区的所有修改内容
Mixed:介于Soft和Hard这两个参数之间,它表示回退到某一个版本,并且只保留工作区的修改内容,而丢弃暂存区的修改内容
Mixed也是Reset命令的默认参数

 

git diff这命令:查看文件在工作区、暂存区以及版本库之间的差异,查看两个版本之间的差异,或者两个分支之间的差异
git diff默认比较的是工作区和暂存区之间的差异内容,它会显示发生更改的文件以及更改的详细信息
--hede:比较工作区和版本库之间的差异
--cache:比较暂存区和版本库之间的差异

Git diff后面加上两次版本的提交ID就可以比较这两个版本之间的差异内容

比较当前版本和上一个版本之间的差异:git diff HEAD~ HEAD

 

从版本库中删除文件
两种常用的方式:第一种,就是直接删除文件之后提交:rm file1.txt->git add file1.txt->git commit -m"delete file1.txt"
另一种方法:git rm file1.txt->git commit -m"delete file1.txt"

 

Git中的一个特殊文件.gitignore这个文件,这个文件的作用也就是可以让我们忽略掉一些不应该被加入到版本库中的文件


一般来说,我们应该遵循下面这几个原则
1.就是一些系统自动生成的文件
2.就是编译生成的一些中间文件,可执行文件等等
3.就是系统运行过程中自动生成的一些文件
4.带有敏感信息的一些配置文件

echo "access.log" > .gitignore
vi .gitignore
*.log

如果先把other.log这个文件添加到仓库里面了,再对other.log这个文件做一些修改的话


如果先把other.log这个文件添加到了版本库中,然后才修改的.gitignore文件,那么.gitignore文件对other.log是没有作用的,因为它已经被添加到了版本库中
这个时候我们就需要把other.log这个文件先从版本库中先删除掉:git rm -cached other.log

 

 

 

命令:

初始化设置
配置⽤户名:git config --global user.name "Your Name"  
配置邮箱:git config --global user.email"mail@example.com"
存储配置:git config --global credential.helper store

创建仓库
创建⼀个新的本地仓库(省略project-name则在当前⽬录创建):git init <project-name>
克隆⼀个远程仓库:git clone <url>

四个区域
⼯作区(Working Directory):电脑⾥能实际看到的⽬录
暂存区(Stage/Index):暂存区也叫索引,⽤来临时存放未提交的内容,⼀般在.git⽬录下的index中
本地仓库(Repository):Git在本地的版本库,仓库信息存储在.git这个隐藏⽬录中
远程仓库(Remote Repository):托管在远程服务器上的仓库,常⽤的有GitHub  GitLab  Gitee

⽂件状态
已修改(Modified):修改了但是没有保存到暂存区的⽂件
已暂存(Staged):修改后已经保存到暂存区的⽂件
已提交(Committed):把暂存区的⽂件提交到本地仓库后的状态

基本概念
main/master:默认主分⽀
origin:默认远程仓库
HEAD:指向当前分⽀的指针
HEAD^:上⼀个版本
HEAD~4:上四个版本

特殊⽂件
.git:Git仓库的元数据和对象数据库
.gitignore:忽略⽂件,不需要提交到仓库的⽂件
.gitattributes:指向当前分⽀的指针
.gitkeep:使空⽬录被提交到仓库
.gitmodules:记录⼦模块的信息
.gitconfig:记录仓库的配置信息

添加和提交
添加⼀个⽂件到暂存区:git add <file>
添加所有⽂件到暂存区:git add .
提交所有暂存区的⽂件到本地仓库:git commit -m "message"
提交所有已修改的⽂件到本地仓库:git commit -am "message"

分⽀
查看所有本地分⽀,当前分⽀前⾯会有⼀个星号*,-r查看远程分⽀,-a查看所有分⽀:git branch
创建⼀个新的分⽀:git branch <branch-name>
切换到指定分⽀,并更新⼯作区:git checkout <branch-name>
创建一个新分支,并切换到该分支:git checkout -b <branch-name>
删除⼀个已经合并的分⽀:git branch -d <branch-name>
删除⼀个分⽀,不管是否合并:git checkout -D <branch-name>
给当前的提交打上标签,通常⽤于版本发布:git tag <tag-name>
合并分支a到分支b,--no-ff 参数表示禁用Fast forward模式,合并后的历史有分支,能看出曾经做过合并:git merge --no-ff -m message <branch-name>
合并分支a到分支b,--ff 参数表示使用Fast forward模式,合并后的历史会变成一条直线:git merge --ff -m message <branch-name>
合并&挤压(squash)所有提交到⼀个提交:git squash <branch-name>

rebase 操作可以把本地未push的分叉提交历史整理成直线,看起来更加直观。但是,如果多⼈协作时,不要对已经推送到远程的分⽀执⾏rebase操作。
rebase不会产⽣新的提交,⽽是把当前分⽀的每⼀个提交都 “复制”到⽬标分⽀上,然后再把当前分⽀指向⽬标分⽀,⽽merge会产⽣⼀个新的提交,这个提交有两个分⽀的所有修改
git checkout <dev>
git rebase <main>

撤销和恢复
移动⼀个⽂件到新的位置:git mv <file> <new-file>
从⼯作区和暂存区删除⼀个⽂件,并且将这次删除放⼊暂存区:git rm <file>
从索引/暂存区中删除⽂件,但是本地⼯作区⽂件还在,只是不希望这个⽂件被版本控制:git rm --cached <file>
恢复⼀个⽂件到之前的版本:git checkout <file> <commit-id>
创建⼀个新的提交,⽤来撤销指定的提交,后者的所有变化将被前者抵消,并且应⽤到当前分⽀:git revert <commit-id>
重置当前分⽀的HEAD为之前的某个提交,并且删除所有之后的提交:git reset --mixed <commit-id>
--hard参数表示重置⼯作区和暂存区
--soft参数表示重置暂存区
--mixed参数表示重置⼯作区
撤销暂存区的⽂件,重新放回⼯作区(git add的反向操作):git restore --staged <file>

查看状态或差异
查看仓库状态,列出还未提交的新的或修改的⽂件:git status
查看提交历史,--oneline表示简介模式:git log --oneline
查看未暂存的⽂件更新了哪些部分:git diff
查看两个提交之间的差异:git diff <commit-id> <commit-id>

Stash
Stash操作可以把当前⼯作现场 “储藏”起来,等以后恢复现场后继续⼯作:git stash save "message"
-u 参数表示把所有未跟踪的⽂件也⼀并存储
-a 参数表示把所有未跟踪的⽂件和忽略的⽂件也⼀并存储
save参数表示存储的信息,可以不写
查看所有stash:git stash list
恢复最近⼀次stash:git stash pop
恢复指定的stash,stash@{2}表示第三个stash,stash@{0}表示最近的stash:git stash pop stash@{2}
重新接受最近⼀次stash:git stash apply
pop和apply的区别是,pop会把stash内容删除,⽽apply不会。可以使⽤git stash drop 来删除stash:git stash drop stash@{2}
删除所有stash:git stash clear

远程仓库
添加远程仓库:git remote add <remote-name> <remote-url>
查看远程仓库:git remote -v
删除远程仓库:git remote rm <remote-name>
重命名远程仓库:git remote rename <old-name> <new-name>
从远程仓库拉取代码,默认拉取远程仓库名origin的master或者main分⽀:git pull <remote-name> <branch-name>
fetch默认远程仓库(origin)当前分支的代码,然后合并到本地分支:git pull
将本地改动的代码rebase到远程仓库的最新代码上(为了有⼀个⼲净,线性的提交历史):git pull --rebase
推送代码到远程仓库(然后再发起pull request):git push <remote-name> <branch-name>
获取所有远程分⽀:git fetch <remote-name>
查看远程分⽀:git branch -r
Fetch某⼀个特定的远程分⽀:git fetch <remote-name> <branch-name>

GitFlow
GitFlow 是⼀种流程模型,⽤于在Git上管理软件开发项⽬。
主分⽀(master/main):代表了项⽬的稳定版本,每个提交到主分⽀的代码都应该是经过测试和审核的。
开发分⽀(develop):⽤于⽇常开发。所有的功能分⽀、发布分⽀和修补分⽀都应该从开发分⽀派⽣出来。
功能分⽀(feature):⽤于开发单独的功能或者特性。每个功能分⽀都应该从开发分⽀派⽣,并在开发完成后合并回开发分⽀。
发布分⽀(release):⽤于准备项⽬发布。发布分⽀应该从开发分⽀派⽣,并在准备好发布版本后合并回主分⽀和开发分⽀。
修复分⽀(hotfix):⽤于修复主分⽀上的紧急问题。热修复分⽀应该从主分⽀派⽣,并在修复完成后,合并回主分⽀和开发分⽀。
posted @   阿Q熊  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示