Git

发布时间 2023-09-14 16:02:50作者: 柠萌吖

介绍

问:git是什么
答:git是分布式版本控制系统

工作原理/流程

  • Workspace:工作区
  • Index/Stage:暂存区
  • Repository:仓库区(本地仓库)
  • Remote:远程仓库

一般工作流程如下:

  • 克隆 Git 资源作为工作目录
  • 在克隆的资源上添加或修改文件
  • 如果其他人修改了,你可以更新资源
  • 在提交前查看修改
  • 提交修改
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提

SVN与GIT的最主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的

  • 干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本
  • 然后干活,干完后,需要把自己做完的活推送到中央服务器
  • 集中式版本控制系统是必须联网才能工作
  • 如果在局域网还可以,带宽够大,速度够快
  • 如果在互联网下,如果网速慢的话,就纳闷了

Git是分布式版本控制系统,那么它就没有中央服务器的

  • 每个人的电脑就是一个完整的版本库
  • 工作的时候就不需要联网了,因为版本都是在自己的电脑上
  • 既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?
    • 比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了

install

Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行

win:点击此处下载

linux

Debian/Ubuntu

apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

apt-get install git

git --version
git version 1.8.1.2

Centos/RedHat

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

yum -y install git-core

git --version
git version 1.7.1

配置

  • etc/gitconfig文件:系统中对所有用户都普遍适用的配置
    • 若使用git config时用--system选项,读写的就是这个文件
  • ~/.gitconfig文件:用户目录下的配置文件只适用于该用户
    • 若使用git config时用--global选项,读写的就是这个文件
  • 当前项目的Git目录中的配置文件(也就是工作目录中的.git/config文件)
  • 这里的配置仅仅针对当前项目有效
    • 每一个级别的配置都会覆盖上层的相同配置
    • 所以.git/config里的配置会覆盖/etc/gitconfig中的同名变量
  • 在 Windows 系统上,Git会找寻用户主目录下的.gitconfig文件
    • 主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER
配置信息
git config --global user.name "用户名" 
git config --global user.email "电子邮箱"

git工作区,暂存区和版本库

  • 工作区:电脑能看到的目录
  • 暂存区: (stage或index)一般放在.git目录下的index文件
  • 版本库:工作区有一个隐藏目录.git这个不算工作区,而是git的版本库

  • 图中左侧为工作区,右侧为版本库
    • 在版本库中标记为index的区域是暂存区(stage/index)),标记为master的是master分支所代表的目录树
  • 此时HEA实际是指maste分支的一个"游标"
    • 所以图示的命令中出现HEAD的地方可以用master来替换
  • objects标识的区域为 Git 的对象库,实际位于 .git/objects目录下,里面包含了创建的各种对象及内容
  • 工作区修改或者新增是,执行git add,暂存区的目录树被更新,同时工作区修改或新增的文件内容被写入到对象库中一个新的对象中,而该对象的ID被记录在暂存区的文件索引中
  • git commit时,暂存区的目录树写到版本库中,master做出分支会做相应的更新
  • git reset HEAD暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响
  • git rm --cached <file>会直接从暂存区删除文件,工作区不做改变
  • git chekout . 或者 git checkout --<file>会用暂存区全部或指定的问题件替换工作区的文件,会清除工作区中未添加到暂存区的改动
  • git checkout HEAD . 或者 git checkout HEAD <file>会用HEAD指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件,不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动

git创建仓库

# 使用之后会生成一个.git的目录,包含了资源的所有元数据,其他的项目保持不变
git init # 初始化仓库,也可以指定目录

# 当前目录下有几个文件想要纳入版本控制,需要先用gitadd命令告诉git开始对这些文件进行追踪
git add . # 表示全部加入
git add *.c # 后缀为.c的全部文件

# 提交说明,win中使用双引号,linux中使用单引号
git commit -m "提交说明"

# 克隆仓库
git clone 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 config -e # 编辑当前仓库的配置文件
git config -e --global #编辑系统上的所有仓库

git基本操作

命令 说明
git init 初始化仓库
git add 添加文件到暂存区
git status 查看仓库当前的状态,显示有变更的文件
git diff 比较暂存区和工作区的文件差异
git commit 提交暂存区到本地仓库
git reset 回退版本
git rm 将文件从暂存区和工作区删除
git mv 移动或重命名工作区文件
git branch 查看分支
git checkout 切换分支
git switch 更清晰的切换分支(git 2.23版本引入)
git restore 恢复或撤销文件的更改(git 2.23版本引入)
git log 查看历史提交纪录
git blame <file> 以列表形式查看指定文件的历史修改纪录
git remote 远程仓库操作
git fetch 从远程获取代码库
git pull 下载远程代码并合并
git push 上传远程代码并合并
git tag -a <name> 打标签

github

首先配置ssh key:ssh-keygen -t rsa -C "邮箱地址"

打开生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key到github的ssh and gpg keys中





参考链接:菜鸟教程