Git学习笔记

Git学习

Git 与 SVN 区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

  • 2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

  • 3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

  • 4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

  • 5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

git安装配置
git安装

在 Windows 平台上安装 Git ,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:

安装包下载地址:Git for Windows

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5weTcQt-1652540848048)(C:\Users\Administrator\AppData\Roaming\marktext\images\2022-03-10-17-22-16-image.png)]

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

Git 配置
用户信息

配置个人的用户名称和电子邮件地址:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置:

$ git config --global core.editor emacs
查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
http.postbuffer=2M user.name=runoob
user.email=test@runoob.com

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

这些配置我们也可以在 ~/.gitconfig 或 /etc/gitconfig 看到,如下所示:

vim ~/.gitconfig
# 显示内容如下所示:
[http] postBuffer = 2M [user] name = runoob
 email = test@runoob.com

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
runoob

Git 工作流程

Git 工作区、暂存区和版本库

基本概念
  • 工作区:就是你在电脑里能看到的目录。

  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 git rm --cached  命令时,会直接从暂存区删除文件,工作区则不做出改变。

  • 当执行 git checkout . 或者 git checkout –  命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

  • 当执行 git checkout HEAD . 或者 git checkout HEAD  命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

Git 创建仓库

git init

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

使用方法

使用当前目录作为 Git 仓库,我们只需使它初始化。

git init

该命令执行完后会在当前目录生成一个 .git 目录。

使用我们指定目录作为Git仓库。

git init newrepo

初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$git add *.c
$git add README
$git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

git clone

我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • repo:Git 仓库。
  • directory:本地目录。

比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit
配置

git 的设置使用 git config 命令。

显示当前的 git 配置信息:

$ git config --list
$ credential.helper=osxkeychain
$ core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true core.precomposeunicode=true

编辑 git 配置文件:

$ git config -e # 针对当前仓库

或者:

$ git config -e --global # 针对系统上所有仓库

设置提交代码时的用户信息:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

如果去掉 –global 参数只对当前仓库有效。

Git 基本操作

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。

本章将对有关创建与提交你的项目快照的命令作介绍。

Git 常用的是以下 6 个命令:git clonegit pushgit add 、git commitgit checkoutgit pull,后面我们会详细介绍。

说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

一个简单的操作步骤:

$ git init
$ git add .
$ git commit
  • git init - 初始化仓库。
  • git add . - 添加文件到暂存区。
  • git commit - 将暂存区内容添加到仓库中。
创建仓库命令

git init 命令用于在目录中创建新的 Git 仓库。

在目录中执行 git init 就可以创建一个 Git 仓库了。

git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

拷贝项目命令格式如下:

$ git clone [url]
提交与修改

git add 命令可将该文件添加到暂存区。

添加一个或多个文件到暂存区:

$ git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录:

$ git add [dir]

添加当前目录下的所有文件到暂存区:

$ git add .

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。

git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

显示暂存区和工作区的差异: git diff [file]

git commit 命令将暂存区内容添加到本地仓库中。

提交暂存区到本地仓库中:

$ git commit -m [message]

[message] 可以是一些备注信息。

提交暂存区的指定文件到仓库区:

$ git commit [file1] [file2] ... -m [message]

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

$ git commit -a
设置提交代码时的用户信息

开始前我们需要先设置提交的用户信息,包括用户名和邮箱:

$ git config --global user.name 'runoob'
$ git config --global user.email test@runoob.com

如果去掉 --global 参数只对当前仓库有效。

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

$ git reset [--soft | --mixed | --hard] [HEAD]

–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

$ git reset [HEAD]

–soft 参数用于回退到某个版本:

$ git reset --soft HEAD

git rm 命令用于删除文件。

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

git rm 删除文件有以下几种形式:

1、将文件从暂存区和工作区中删除:

$ git rm <file>

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。

强行从暂存区和工作区中删除修改后的 文件:

$ git rm -f <file>

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:

$ git rm --cached <file>

git mv 命令用于移动或重命名一个文件、目录或软连接。

$ git mv [file] [newfile]

如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数:

$ git mv -f [file] [newfile]
提交日志

Git 提交历史一般常用两个命令:

  • git log - 查看历史提交记录。
  • git blame  - 以列表形式查看指定文件的历史修改记录。
远程操作

git fetch 命令用于从远程获取代码库。

该命令执行完后需要执行 git merge 远程分支到你所在的分支。

从远端仓库提取数据并尝试合并到当前分支:

git merge

该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:

git fetch [alias]

以上命令告诉 Git 去获取它有你没有的数据,然后你可以执行:

git merge [alias]/[branch]

git pull 命令用于从远程获取代码并合并本地的版本。

git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。 命令格式如下:

git pull <远程主机名> <远程分支名>:<本地分支名>

git push 命用于从将本地的分支版本上传到远程并合并。

命令格式如下:

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号:

git push <远程主机名> <本地分支名>

Git 分支管理

创建分支命令:

git branch (branchname)

切换分支命令:

git checkout (branchname)

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

合并分支命令:

git merge
Git 分支管理

列出分支基本命令:git branch

删除分支命令:git branch -d (branchname)

分支合并:git merge

Git,GitHub与GitLab的区别

  • Git - 它是一个源代码版本控制系统,可让您在本地跟踪更改并从远程资源推送或提取更改。

  • GitHub是一项公开可用的免费服务,它要求所有代码(除非您有付费帐户)公开。 任何人都可以看到您推送给GitHub的代码并提供改进建议。 GitHub目前承载数以万计的开源项目的源代码。

  • GitLab是一种类似github的服务,组织可以使用它来提供git存储库的内部管理。 它是一个自我托管的Git-repository管理系统,可以保持用户代码的私密性,并且可以轻松地部署代码的更改。

在Windows上安装GitLab:

第1步: 首先在系统中创建一个名为'gitlab-runner'的文件夹。 例如,可以在D盘驱动器中创建D:\software\gitlab-runner

第2步: 现在下载x86amd64的二进制文件并将其复制到创建的文件夹中。 将下载的二进制文件(这里我下载的是:gitlab-runner-windows-amd64.exe)重命名为gitlab-runner.exe

第3步: 打开命令提示符并进入到上面创建的文件夹(D:\software\gitlab-runner)。现在输入下面的命令并按回车。

D:\software\gitlab-runner> gitlab-runner.exe register

第4步: 运行上述命令后,它会要求输入gitlab-ci协调器URL。

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com

第5步: 输入runner的gitlab-ci标记。

Please enter the gitlab-ci token for this runner:
xxxx-of-your-token
  • 要获取令牌(token),请登录到您的GitLab帐户,打开URL: https://gitlab.com/users/sign_in :
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GsU1mqAE-1652540848053)(C:\Users\Administrator\AppData\Roaming\marktext\images\2022-03-10-18-15-46-image.png)]
  • 登录账号后,现在转到项目,并点击项目名称(如:first-gitlab-project ):
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bt16W6cY-1652540848054)(C:\Users\Administrator\AppData\Roaming\marktext\images\2022-03-10-18-15-21-image.png)]loads/images/201804/1004/811090458_52505.jpg)
  • “Runners Settings”部分下,将获得如下图所示的令牌:

    使用上面红圈中指定的token。

第6步: 接下来,输入runnergitlab-ci描述。

Please enter the gitlab-ci description for this runner:
[Admin-PC]: Hello GitLab Runner

第7步: 它会要求输入runnergitlab-ci标签。

Please enter the gitlab-ci tags for this runner (comma separated):
tag1,tag2

稍后可在GitLab的用户界面中更改这些标签。

第8步: 可以通过将Runner设置为true值,用来将Runner锁定到当前项目。

Whether to lock the Runner to current project [true/false]:
[true]: true

完成上述步骤后,您将看到成功的消息:“Registering runner… succeeded”。

第9步: 现在输入建立项目的Runner执行器。

Please enter the executor: parallels, shell, docker+machine, kubernetes, docker-
ssh+machine, docker, docker-ssh, ssh, virtualbox:
docker

使用选择器作为'docker'来创建构建环境并轻松地管理依赖项来开发项目。

第10步: 接下来,它会要求为 docker 选择器设置默认镜像。

Please enter the default Docker image (e.g. ruby:2.1):
alpine:latest

第11步: 完成上述步骤后,将显示“Runner registered successfully”。 下图将描述上述命令的工作流程:

第12步: 现在转到您的项目,单击设置部分下的CI / CD选项,将看到该项目的激活运行程序。

可以在GitLab-Runner文件夹下的D:\software\gitlab-runner\config.toml文件中看到GitLab Runner配置,如下所示:

concurrent = 1
check_interval = 0

[[runners]]
  name = "Hello GitLab Runner"
  url = "https://gitlab.com"
  token = "f12fa30b56c49dea3c356480027f7e"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "latest"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]

SSH密钥

步骤(1): 要创建SSH密钥,请打开Git Bash命令提示符并输入命令,如下所示:

ssh-keygen

它会提示’输入保存密钥的文件(//.ssh/id_rsa):’,只需键入文件名并按回车。 接下来提示输入密码显示“输入密码(空密码)”。 输入一些密码并按回车。 您将看到生成的SSH密钥,如下图所示:

步骤(2): 现在登录到您的GitLab帐户,然后单击**[Settings]** 选项。

步骤(3): 要创建SSH密钥,请单击菜单左侧的 SSH Key 选项卡。

步骤(4): 现在转到您的电脑C盘驱动器,您将看到第一步中生成的.pub扩展名的文件(在目录:C:\Users\Administrator\.ssh)。

步骤(5): 接下来打开 id_rsa.pub 文件,复制SSH密钥并将其粘贴到高亮显示的密钥框中,如下图所示:

步骤(6): 单击添加密钥(Add key)按钮,将SSH密钥添加到您的GitLab。 您将看到SSH密钥的简短版本,标题和创建日期,如下图所示:

一、IDEA集成git

示例: 打开IDEA 随便创建一个项目控制台项目

在这里插入图片描述

找到git选项

在这里插入图片描述

检查设置是否已经配置好了git路径然后确定

在这里插入图片描述

二、使用步骤
1.使用IDEA完成本地库的初始化操作

在这里插入图片描述

此时多了一个git文件夹,说明完成了初始化

在这里插入图片描述

2.使用IDEA完成代码并添加到git和提交到本地库

创建代码以后就会提示是否需要ADD操作,当点击了add后就会变为绿色。说明添加到了暂存区在这里插入图片描述

这里先将整个模块添加到暂存区,然后整个模块都变绿了

在这里插入图片描述

然后进行commit操作

在这里插入图片描述

填写提交描述后就点击commit提交,

在这里插入图片描述

Version Control会显示提交的内容

在这里插入图片描述

在这里插入图片描述

提交完了改代码,前面会出现绿色,然后需要添加到暂存区,然后提交到本地库

在这里插入图片描述

提交的时候会显示代码变化

在这里插入图片描述

控制台会显示提交的内容

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

当更改内容时会显示绿色,需要提交

3.本地库和远程库的交互

在这里插入图片描述

从远程拉取代码

Apple@DESKTOP-OK1UFD6 MINGW64 ~/IdeaProjects/untitled2 (master)
$ git pull https://gitee.com/gitee13913150025/git-resp.git master --allow-unrelated-histories
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 21 (delta 5), reused 17 (delta 4), pack-reused 0
Unpacking objects: 100% (21/21), 2.35 KiB | 73.00 KiB/s, done.
From https://gitee.com/gitee13913150025/git-resp
 * branch            master     -> FETCH_HEAD
Merge made by the 'ort' strategy.
 Demo.txt  | 1 +
 Demo2.txt | 1 +
 Test.txt  | 5 +++++
 Test2.txt | 1 +
 4 files changed, 8 insertions(+)
 create mode 100644 Demo.txt
 create mode 100644 Demo2.txt
 create mode 100644 Test.txt
 create mode 100644 Test2.txt

Apple@DESKTOP-OK1UFD6 MINGW64 ~/IdeaProjects/untitled2 (master)
$

在这里插入图片描述

提交到远程仓库

Apple@DESKTOP-OK1UFD6 MINGW64 ~/IdeaProjects/untitled2 (master)
$ git push -u https://gitee.com/gitee13913150025/git-resp.git master -f
Enumerating objects: 25, done.
Counting objects: 100% (25/25), done.
Delta compression using up to 4 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (24/24), 2.15 KiB | 1.08 MiB/s, done.
Total 24 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/gitee13913150025/git-resp.git
   8b8e74a..ffe7ffd  master -> master
Branch 'master' set up to track remote branch 'master' from 'https://gitee.com/gitee13913150025/git-resp.git'.

Apple@DESKTOP-OK1UFD6 MINGW64 ~/IdeaProjects/untitled2 (master)
$

4.从远程库的克隆操作

在这里插入图片描述

在这里插入图片描述

克隆到本地以后即是本地库,又是工作空间
[GNK-6.2]
To https://gitee.com/gitee13913150025/git-resp.git
8b8e74a…ffe7ffd master -> master
Branch ‘master’ set up to track remote branch ‘master’ from ‘https://gitee.com/gitee13913150025/git-resp.git’.

Apple@DESKTOP-OK1UFD6 MINGW64 ~/IdeaProjects/untitled2 (master)
$


### 4.从远程库的克隆操作

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4791e69d6493fd9bec4e61884fb7bfd0.png)

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/74b109e035cec4b02046d9bb3f813aa1.png)

克隆到本地以后即是本地库,又是工作空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值