史上最全的GIT简介及操作

集中式版本控制软件

  1. 集中式代表:SVN
  2. 集中式特点:
    1. 版本库是集中存放在中央服务器的。
    2. 必须实时联网才能工作。
      在这里插入图片描述

分布式版本控制软件

分布式代表:Git
分布式特点:
1. 个人电脑都可以作为版本库。
2. 速度快,使用简单。
3. 不必实时联网。
在这里插入图片描述

背景故事:

Linus在1991年创建了开源的Linux。
在2002年以前:世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后Linus本人通过手工方式合并代码。
2002年-2004年:(商用版本控制软件)BitKeeper的东家BitMover公司授权Linux社区免费使用这个版本控制系统。
2005年:Linus花了两周时间自己用C写了git(一个分布式版本控制软件)。
2008年:GitHub网站上线了,它为开源项目免费提供Git存储。

Git下载安装

windows版本下载地址:https://git-scm.com/download/win

使用前准备

1. 安装完成后,在开始菜单里找到“Git”->“Git Bash”,弹出命令行窗口,说明Git安装成功。
2. 安装Git之后,你要做的第一件事情就是去配置你的名字和邮箱,因为每一次提交都需要这些信息。
$ git config --global user.name "Your Name"
$ git config --global user.email "Your [email protected]"

  • 这个命令,会在“ ~/.gitconfig”中以如下形式输出设置文件。
[user]
name = Your_Name
email = [email protected]

  • 将 color.ui 设置为 auto 可以让命令的输出拥有更高的可读性。
$ git config --global color.ui auto

  • ~/.gitconfig”中会增加下面一行。

[color]
ui = auto

####GIT分区
在这里插入图片描述

版本库

版本库又名仓库,英文名repository。
这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪。
以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"。

通过"git init"命令创建。".git"隐藏目录就是版本库。

暂存区

".git"目录下有一个"index"/"stage"的文件即暂存区。

分支

默认情况下,Git会自动为我们创建一个主分支(master)。
".git"下有个名为"HEAD"的文件指向master分支。
最新版本代码需要更新到"当前分支"。
#### 创建版本库

# 创建文件夹
    $ mkdir test

# 进入当前目录
    $ cd test

# 查看目录
    $ pwd

# 将当前目录变成Git可管理的版本库又名仓库,英文名repository
    $ git init
    Initialized empty Git repository in D:/Tools/Git/test/.git/

常用命令

文件添加操作
# 1. 工作区中创建新文件hello.py
    $ vi hello.py

# 2. 查看文件状态
    $ git status

# 3. 将源码拷贝到暂存区
    $ git add hello.py

# 4. 将暂存区移动到当前分支
    $ git commit -m "创建新文件hello.py"

# 5. 查看状态
    $ git status
    On branch master
    nothing to commit, working tree clean


文件删除操作
# 1. 删除工作区中的文件
    rm hello.py 
    
# 2. 删除暂存区中的文件
    git rm hello.py

# 3. 删除当前分支中的文件
    git commit -m '描述信息'
文件修改操作
# 修改文件
    $ vi hello.py

# 查看状态
    $ git status

# 添加暂存区
    $ git add hello.py
    
# 添加版本库
    $ git commit -m '描述信息'
    
    
# 添加并提交到分支中
    $ git commit -am '描述信息'

文件撤销操作
# 查看工作区和版本库里面最新版本的区别
    $ git diff HEAD -- hello.py
    
方式1:可以撤销未被追踪的文件
    
# 丢弃工作区的修改
    $ git checkout -- hello.py
    
方式2:可以撤销到任意版本
    # 查看操作日志
    $ git log
    commit c4e993ddb36d77710dad2c7c8c18130f9a761946 (HEAD -> master)

    $ git log --oneline
    c4e993d (HEAD -> master) first add
    
    # 回退到某个版本2
    $ git reset --hard c4e993ddb36d77710dad2c7c8c18130f9a761946
    
    #回退到上一个版本
    git reset HEAD
    #### 分支定义
    分支可以理解成 独立开发功能的 小房间。


#### 分支操作

创建分支
$ git branch 分支名
查看分支
$ git branch
切换分支
$ git checkout 分支名
创建+切换分支
$ git checkout -b 分支名
合并某分支到当前分支
$ git merge 分支名
删除某分支
$ git branch -d 分支名
查看日志记录(以图形形式展现)

$ git log --graph --pretty=oneline --abbrev-commit


#### 合并分支解决冲突

当前分支1 分支2 前提分支1和分支2都进行了代码修改。

将分支2的内容合并到分支1

1. 切换到当前分支1
$ git checkout 分支1
2. 和分支2进行合并
$ git merge 分支2
3. 执行第二步后出现冲突(CONFLICT)
$ git merge dev
Auto-merging hello.py
CONFLICT (content): Merge conflict in hello.py
Automatic merge failed; fix conflicts and then commit the result.
4. 解决方案:
print 'first'
<<<<<<< HEAD
print 'master second'
=======
print 'dev second'
>>>>>>> dev
1. 编辑合并分支1和分支2的内容
2. 修改好之后,$ git add 文件名
3. $ git commit -m "描述信息"
采用快进模式合并的缺陷
  1. 删除dev分支后会丢失该分支的所有提交记录。
采用非快进模式合并分支
#新建并切换分支
$ git checkout -b dev

#添加内容到暂存区
$ git add readme.txt 

#提交到dev分支
$ git commit -m "add merge"

#合并分支(ff= fast forward 快进模式)
$ git merge --no-ff -m "merge with no-ff" dev

#查看日志记录(以图形形式展现)
$ git log --graph --pretty=oneline --abbrev-commit

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
github网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

github官网:https://github.com/
远程库
1. github版本库即为远程库。
本地库
1. 本地创建的Git版本库即为本地库。
使用说明
1. 先在github官网中注册账户。
2. 创建SSH key。
    由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。
    Windows下打开Git Bash,创建SSH key。
    $ ssh-keygen -t rsa -C "[email protected]"

3. 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件(密钥对)。
    用户主目录:C:\Users\Administrator
    
4. 登陆GitHub,打开"Account settings","SSH Keys"页面。

5. 点"Add SSH Key",填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
本地库 关联 远程库
origin:默认远程库名称
# 在本地库当前分支
    $ git remote add origin [email protected]:pythonde/newRepository.git


上传数据到远程库
$ git push -u origin dev
The authenticity of host 'github.com (13.250.177.223)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
To github.com:pythonde/newRepository.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to '[email protected]:pythonde/newRepository.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

远程库更新本地库
$ git pull --rebase origin dev

From github.com:pythonde/newRepository
 * branch            dev        -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: first add
Applying: dev second
Applying: test2 dev third


成功将本地库内容上传到远程库
$ git push -u origin dev

Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 852 bytes | 852.00 KiB/s, done.
Total 9 (delta 0), reused 0 (delta 0)
To github.com:pythonde/newRepository.git
   a69bffd..da7dd11  dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

注意事项
1. 远程操作git push / git pull 时,本地库和远程库分支名相同。
2. 第一次push时:$ git push -u origin dev
3. 之后只需要简写:$ git push  origin dev
4. 远程库分支之间的合并,创建一个pull request进行合并。
查看远程库信息
$ git remote -v 
删除连接远程库
$ git remote rm origin
从远程库下载源码到本地库
$ git clone [email protected]:pythonde/newRepository.git
Git支持多协议方式
Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令。
但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

加密方式:

  1. 对称加密:性能高
    用什么加密就用什么解密(异或)
	'123'^'456'--->'4321432'   加密
	'4321432'^'456'--->'123'   解密
  1. 非对称加密:安全性高(支付宝采用下面加密方式)
    公钥加密,私钥解密
		 客户端:					服务器端:
		服务器端的公钥             服务器端的私钥
		客户端的私钥               客户端的公钥

SSH密钥对(公钥+私钥)

客户端:git很简单-密钥配对(验证用户时使用SSH),git服务器会随机生成一个对称的密钥。

发给客户端,客户端通过对称的密钥对数据传输的时候使用的是对称加密。

多人协作开发实现步骤

1. 由张三上传一个基本版本到张三的github远程库master上。

2. 李四登录github账户访问remoteb版本库。fork  将张三的版本转载到李四的个人github中。

3.李四:在github上新建一个分支dev  本地库中也得新建一个dev分支

4.李四:将本地库的dev分支和远程库的dev分支进行关联

本地库连接远程库

1. github注册账户

2. 创建远程版本库

3. 本地库和远程库进行关联 
git remote -v
    
git remote add origin [email protected]:pythonde/remoteRepository.git
  1. 更新本地库
git pull --rebase origin master
    
git status
    
git add hello.py
    
git commit -m '描述信息'

5.将本地库内容上传至远程库

git push -u origin master
    

来源于多方资料整理

发布了19 篇原创文章 · 获赞 3 · 访问量 3467

猜你喜欢

转载自blog.csdn.net/qq_43544005/article/details/89958546
今日推荐