Git入门

目录

一、Git简介

1.什么是Git

2.Git与SVN的区别

3.文件状态与工作区域

4.常用命令

二、gitee网站相关操作

1.创建仓库(公库和私库)

2.删除仓库

3.创建文件和文件夹

三、git本地配置账号和邮箱

四、实践操作

1.从gitee克隆仓库到本地

2.本地初始化仓库并推送远程

3.从远程仓库拉取项目到本地

4.版本冲突


一、Git简介

1.什么是Git

Git是一种分布式版本控制系统,它被广泛用于协同开发和代码管理。它的设计目标是处理从小型到大型项目的所有内容,并且非常适用于具有高度分支和合并需求的团队开发。Git不仅可以追踪文件的更改,还可以记录每个更改的作者、时间和内容,以便于更好地理解项目的演变历史。通过Git,团队成员可以并行工作、独立开发和合并他们的更改,而不会影响到其他人的工作。Git还具有强大的分支管理功能,允许用户创建和切换不同的分支,以便在不影响主线开发的情况下进行新功能开发、bug修复等任务。

简单概括:Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。(去中心化)

2.Git与SVN的区别

  • SVN(集中式版本控制系统)

只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,去除最新的文件或者提交更新。

版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

Git入门_第1张图片

集中化最显而易见的缺点是中央服务器的单点问题。如果中央服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协调工作。一旦中央服务器的磁盘发送故障,而又碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。  

  • Git(分布式版本能控制系统)

每个终端都是一个仓库,客户端并不只是提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次提取操作,实际上都是一次对代码仓库的完整备份。

Git入门_第2张图片

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

  • git仓库的任何一个拷贝都可以独立作为一个服务器来使用;

  • 在Git中文件有四种状态:未跟踪(untrack)、已修改(modified)、已暂存(staged)和已提交(committed);

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

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

  • GIT分支和SVN的分支不同,分支在SVN中一点不特别,就是版本库中的另外的一个目录

3.文件状态与工作区域

Git入门_第3张图片

文件状态

  • 未跟踪(untrack):表示文件为新增加的

  • 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中

  • 已提交(committed):表示文件已保存在git仓库中

  • 已修改(modified):表示修改了文件,但还没保存到git仓库中

工作区域

  • 本地计算机

    • Working Directory(工作目录):即正在编辑的文件状态。文件状态为未跟踪(untrack)和已修改(modified)在此区域内。

    • Staging Area(暂存区):保存了下次将提交的文件列表信息。文件状态为已暂存(staged)在此区域内。

    • Repository(本地仓库):提交到本地仓库的文件。

  • 远程计算机:已提交到远程计算机内的文件。

4.常用命令

命令 说明
git clone 将远程仓库clone到本地计算机
git status 展示工作区及暂存区域中不同状态的文件
git add 将内容从工作目录添加到暂存区
git commit 所有通过 git add 暂存的文件提交到本地仓库
git push 将本地仓库的记录提交到远程仓库
git reset HEAD 从暂存区移除指定文件
git checkout -- 从本地仓库恢复指定文件
git pull 拉取远程仓库的数据
git init 本地初始化仓库

二、gitee网站相关操作

众所周知,GitHub服务器在国外,有时候登陆会非常麻烦,尤其是进行push和pull操作时,经常失败。我在学习git过程中花费时间最多的就是等待push、pull操作成功,对中国用户极其不友好。幸好,中国就有一款和GitHub类似的代码托管中心,即 Gitee,中文名叫码云。码云是开源中国推出的基于Git的代码托管服务中心,使用方式跟GitHub一样,而且它还是一个中文网站,如果你英文不是很好,那么它是最好的选择。

Gitee是开源中国(OSChina)推出的基于Git的代码托管服务Gitee(码云)是开源中国社区推出的代码托管协作开发平台,支持Git和SVN,提供免费的私有仓库托管。Gitee专为开发者提供稳定、高效、安全的云端软件开发协作平台,无论是个人、团队、或是企业,都能够实现代码托管、项目管理、协作开发。

码云Gitee是开源中国社区在2013年推出的基于Git的代码托管服务,专为开发者提供稳定、高效、安全的云端软件开发协作平台,无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发,更有代码质量分析、项目演示等丰富功能等你体验。

Gitee目前已经成为国内最大的代码托管平台,致力于为国内开发者提供优质稳定的托管服务,与GitHub类似区别在于码云国内,GitHub国外。目前已有超过 500 万的开发者选择码云。Gitee 于 2016 年推出企业版,提供企业级代码托管服务,成为开发领域领先的 SaaS 服务提供商。

Gitee官方网站:Gitee - 基于 Git 的代码托管和研发协作平台

1.创建仓库(公库和私库)

Gitee上仓库分为公库(public)和私库(private);顾名思义public可以被其他人看到并clone;而private是不能被别人看到的,但是可以被clone,由于是private的,要克隆当然是需要一些强前提条件的,不然安全性无法保证,private也就失去了意义。

第一步:点击 + 号,选择 +新建仓库选项。

Git入门_第4张图片

第二步:进入新建仓库页面,输入仓库名称,点击创建按钮即可新建仓库(默认创建私有仓库)  

Git入门_第5张图片

2.删除仓库

进入指定仓库,点击管理选项;找到仓库设置 -> 删除仓库选项切换到删除页面,最后点击删除仓库按钮。

Git入门_第6张图片

3.创建文件和文件夹

切换到指定仓库,选中代码选项。点击文件,选择创建文件或文件夹。

Git入门_第7张图片

三、git本地配置账号和邮箱

一般刚安装Git都要配置用户名、密码和邮箱,因为你提交代码到本地仓库(上传代码到远程仓库)时会用到,如果没有配置,在你提交时它会提醒你的。

找到电脑任意位置右键 -> Git Bash Here 打开命令窗口。

# 查看git的配置列表
git config --list
# 设置用户名/邮箱/密码
git config --global user.name "username"
git config --global user.email "email"
git config --global user.password "password"
  • --global:表示全局变量,即当前用户都有效,该配置会出现在 ~/.gitconfig 文件中,~表示当前用户的目录;

  • 局部变量

    git config user.name  "username"  
    git config user.email  "email"

局部是只对当前仓库起效的,它的配置信息会在当前仓库根目录/.git/config文件下 注意:局部变量覆盖全局变量!!!和编程语言里面的变量关系是一样的。

  • 删除配置

    git config --global --unset user.name

四、实践操作

1.从gitee克隆仓库到本地

第一步:切换到指定仓库,点击克隆/下载按钮,并选择HTTPS,最后点击复制按钮。

Git入门_第8张图片

第二步:右键,点击Git Bash Here打开命令窗口,通过git clone命令克隆项目到本地  

# 克隆远程库到本地,以当前仓库名为目录名
git clone https://gitee.com/lky2010510/t276-a.git
# 克隆远程库到本地,指定仓库名为test
git clone https://gitee.com/lky2010510/t276-a.git test

注意,这里的url请更换成自己仓库的地址。

此命令,会在当前目录下创建一个名为t276a的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。如果进入这个新建的 t276a目录,你会看到项目中的所有文件已经在里边了,准备好后续的开发和使用。

如何查看.git目录(默认为隐藏文件夹) window菜单:“查看”->“选项”->选择,选项卡“查看”->勾中“显示隐藏的文件、文件夹和驱动器”

 第三步:查看初始状态

git status

第四步:添加一个文件并查看文件状态

# 使用echo创建一个文件并添加文件内容
echo '这是一个新的文件' > readme.txt
# 查看git状态
git status

此时可以看到文件上方有个 Untracked files ,表示这个文件 未跟踪

第五步:将新增文件添加到暂存区并查看文件状态

# 通过git add将文件保存到暂存区
git add readme.txt 
# 查看git状态
git status

文件上方有说明使用 git reset HEAD 可从暂存区移除指定文件

第六步:将暂存区的文件提交到本地仓库并查看文件状态

# 执行 git commit 并设置提交说明,这种方式比较麻烦,不推荐
git commit 
# 执行 git commit -m 方式,推荐使用
git commit -m "提交说明"
# 查看git状态
git status

第七步:将本地仓库文件提交到远程仓库并查看文件状态

# 推送远程仓库
git push 
# 查看git状态
git status

可以看到提交后git状态又回到初始化状态。

2.本地初始化仓库并推送远程

可以先在Gitee远程仓库中创建一个新库,不要添加任何文件,如下:

Git入门_第9张图片

第一步:本地仓库初始化

git init

第二步:将新增文件添加到暂存区

git add readme.txt

第三步:将暂存区的文件提交到本地仓库

git commit -m "提交说明"

第四步:将本地仓库与远程仓库关联

git remote add origin https://gitee.com/lky2010510/test.git

远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

注意:这里的关联仓库地址请更换成自己的仓库地址。

补充命令,如果远程仓库地址url打错了,可以通过如下命令修改远程仓库关联:

git remote set-url origin https://gitee.com/lky2010510/test.git

第五步:将本地仓库代码推送到远程库

git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

如果本地仓库推送到远程仓库时,遇到版本冲突,可使用本地强制远程的方式解决问题(不推荐)

git push -f origin master

最佳方案是:先将远程仓库更新到本地,再推送。

3.从远程仓库拉取项目到本地

在现有的项目中通过git pull命令将远程仓库代码更新到本地仓库。

# 将远程仓库代码拉取到本地
git pull

注意:这里在拉取代码的时候可能会存在代码覆盖问题,请及时做好备份工作。

4.版本冲突

  • 情景一:多个分支代码合并到一个分支时;

  • 情景二:多个分支向同一个远端分支推送代码时;

  • 情景三:同一分支,同一文件修改后的提交(即为多个程序员修改了同一个文件)

实际上,push操作和pull操作其实就分别是用本地分支合并到远程分支和将远程分支合并到本地分支,所以这两个过程中也可能存在冲突。

案例演示:分别在同一项目的两个不同本地仓库修改readme.txt并提交,则会报出以下错误:

! [rejected] master -> master (fetch first) error: failed to push some refs to ' ...'

解决方案:

  1. 将代码copy出来

  2. 先从远程仓库pull代码至本地,再修改冲突代码

  3. 依次add/commit/push代码至远程仓库

你可能感兴趣的:(git)