介绍
问: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
- 主目录即 $HOME 变量指定的目录,一般都是
配置信息
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中
参考链接:菜鸟教程
标签:文件,git,--,暂存区,Git,版本,目录 From: https://www.cnblogs.com/NingYaFelix/p/17702745.html