GIT版本管理

GIT是目前世界上最先进的分布式版本控制系统。

版本控制系统(VCS,Revision Control System)的功能及现实意义:

        1.可以追踪文件的变更,能清楚清晰地记录文件是什么时候修改的,修改了哪些内容;

        2.还用于支持多人协同开发,能有效地解决版本同步以及不同开发者之间的交流问题,提高开发效率,解决不同版本软件的BUG修正问题,是大型项目开发管理关键一环。

目前市面上有两种类型的版本控制系统:

        1.集中式控制系统:开源的CVS、SVN和微软的VSS等

        2.分布式版本控制系统:GIT分布式版本控制系统

  • Github(国外、最大)
  • Gitee(国内)
  • GitCode(CSDN)

各机构用开源Git自主部署的平台
  为了认识Git,可以先看一看两个在国内外有影响的代码仓库:

  • Github:https://github.com
  • Gitee:https://gitee.com/explore

  Git应用的优势在于:支持Linux、Mac、Windows等多种平台;远程仓库解决方案丰富;命令行/图形化工具/IDE中内嵌操作等多种使用方式。

GIT支持Linux 、Mac、Windows平台,可以使用命令行/图形化工具/IDE内嵌。下面将介绍本博客主要内容:

1.安装GIT管理仓库;

2.通过命令行完成日常工作需要;

3.熟练工作方法;

4.领悟工作原理;

5.学会在集成开发环境中的应用;

一、环境安装

在本地安装Git客户端软件并完成配置,布置好工作环境。
官网下载客户端软件的地址是:https://git-scm.com/。要选择合适的版本,在安装中,全部选择默认的选项。
  安装成功后,可以在任一文件夹,点右键,出现如下支持Git功能的菜单:

选择菜单中的Git Bash Here,会出现命令窗口

在上面的窗口中,首先设置了用户名和邮箱,用于仓库验证。
用到的命令是:
git config --global user.name "Name"
git config --global user.email "email"

随后查看配置结果,用下面的命令:
git config --list   显示配置文件内容

二、注册Gitee账号和设置用于信息安全公钥与远程代码仓库Gitee相关联

先在Gitee - 基于 Git 的代码托管和研发协作平台注册用户账户和密码

再设置公钥,基于SSH协议的Git服务,防止远程管理过程中的信息泄露。
1.客户端设置公钥方法是:
1)在Git Bash窗口中用ssh-genkey命令生成公钥。

使用命令:ssh-keygen -t ed25519 -C "自命名"

如果已存在则会提示:是否重写并覆盖

如果是第一次设置,则会跳出登录界面,要求登录验证来生成公钥:

这个是生成公钥文件的路径:


     将密钥填写上Gitee中,第一步:登录GITEE,并通过设置完成:

                   

完成公钥设置,如果是团队成员,则类似操作,完成成员访问代码仓权限。

三、使用远程代码仓与本地代码联动

因为Gitee上面有很多开源项目及源代码,根据工作学习需要,可以直接在远程代码仓下载源代或项目代码。具体方法如下:

1.打开开源项目

2.找到开源项目

通过拷贝或克隆将项目源代码下载到本地

使用命令:git  clone   链接   

实现项目源代码下载到本地

四、GIT工作原理

1.Workspace:工作区或工作目录,日常工作中,项目开发存放的地方

2.Index / Stage: 暂存区

用于临时存放文件的改动信息,事实上它只是一个文件。
执行git add命令就把工作区内容加入到了暂存区。

3.Repository: 本地仓库

用于在本地存放多个版本的文件,包括提交到这里的所有版本的数据,也称为版本库。其中有一个HEAD指针指向最新放入仓库的文件版本。
执行git commit命令就会把暂存区的内容提交到本地仓库

4.Remote: 远程仓库

托管代码的服务器上保存的文件。远程仓库用于支持开发团队合作开发的工作,也可以提供向外界共享代码的渠道。
执行git push命令就可以把本地代码推到远程分支。 

我们最终要将代码上传到这里并有效管理各个版本。

应用版本控制系统的过程,就是利用Git命令,在各个工作区域之间传输关于文件编辑、修改历史的过程。这需要清楚地知道各个工作区域。

五、创建远程代码仓用于版本管理

在Gitee中创建一个远程仓库,为开发者提交源代码做好准备。
登录Gitee后,找到创建仓库的按钮或链接:

由“我的仓库”进入:

https://gitee.com/xkjlive/mycapp.git

初始化readme文件

六、将文件提交到远程仓库

实现用Git工作的完整过程,包括在本地工作目录中进行项目开发,到将文件的当前版本推送到远程仓库中

实现这四个工作环节

1. 初始化工作目录

在自己的本地工作文件夹中进行项目开发的工作(实际上Git只关心文件的更新,任意文件都可以)。初始化环节,将要把用于项目开发的本地文件夹“初始化”为Git所用的“工作目录”。
  初始化的方法是,在项目所在文件夹中点鼠标右键,选“Open Git Bash here”,打开命令行窗口后输入命令:
  git init
  例如,下面的命令将“D:\dev\capp”初始化为了工作目录:

产生.git文件,代表初始化完成。

2.将文件添加到暂存区

将文件添加到暂存区的命令是
  git add <filename>
  在Linux中,用“.”表示当前文件夹。常用下面的命令添加所有文件:
  git add .
  将所有文件添加入暂存区后,可以用下面的命令查看状态:
  git status
  添加文件并查看状态的执行结果如:

3. 提交文件到本地仓库

接下来,就可以用下面格式的命令将文件提交到本地仓库:
git commit -m 'main.cpp'
如:

每一次提交,都将保存项目文件的一个完整版本.

4. 推送到远程库
第一次向远程仓库中推送代码,需要用两条命令:
  git remote add origin远程仓库链接
  git push -u origin master
  

将main.cpp文件添加到远程仓库:

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git add main.cpp

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   main.cpp


xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git commit -m 'first orgin'
[master 4efa3e8] first orgin
 1 file changed, 7 insertions(+)
 create mode 100644 main.cpp

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git remote add origin https://gitee.com/xkjlive/mypython.git
error: remote origin already exists.


xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git push -u origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 433 bytes | 433.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 4a4c42a6
To https://gitee.com/xkjlive/mypython.git
   7ad5817..4efa3e8  master -> master
branch 'master' set up to track 'origin/master'.
 

文件添加成功:

向远程仓库提交: README.md文件
xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git add  README.md

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md


xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git commit -m 'second origin'
[master c5cce19] second origin
 1 file changed, 1 insertion(+), 1 deletion(-)

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git push -u origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 365 bytes | 365.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 014ff086
To https://gitee.com/xkjlive/mypython.git
   4efa3e8..c5cce19  master -> master
branch 'master' set up to track 'origin/master'.
 

七、本地工作与远程仓库的同步

如何从远程仓库拉取(pull)的操作和处理冲突

1、从远程仓库获取文件

git pull

2、修改本地文件

3、查看状态

git status

4、查看差异

git diff

5、将更新加入暂存区

git add .  其中“.”代表所有,也可以为修改的具体文件

加入暂存区后,再查看状态

6、提交到本地仓库

git commit -m 'message'

若有其他来源的推送(push),需要先拉取(pull)并解决冲突后再推送:

git pull origin master

7、推送到远程仓库

git push

打开网站,查看远程仓库

下面介绍一下如何解决冲突

现在以README.md文件为例:

1、在网页端修改文件

2、在客户端修改文件

现在如果按常规操作提交文件到远程仓库,则会出现冲突

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git add .

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git commit -m 'he:再次提交'
[master c026289] he:再次提交
 1 file changed, 1 insertion(+)

此时,找打开冲突文件,调整过来,保存后再提交

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master|MERGING)
$ git add .

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master|MERGING)
$ git commit -m 'he'
[master c04f8dc] he

xkj@LAPTOP-S5K44A6G MINGW64 /d/dev/mypython (master)
$ git push
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 680 bytes | 170.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 6949b2ba
To https://gitee.com/xkjlive/mypython.git
   12b4041..c04f8dc  master -> master

八、如何进行团队管理

1.添加团队成员

三种添加成员方式:链接邀请、直接添加、通过仓库邀请成员

2、团队成员工作模式

1)设置用户名和邮箱:让仓库能认识你(如果设置过请忽略)
git config --global user.name "<Name>"
git config --global user.email "<Email->"


2)克隆项目
git clone 仓库链接(可能需要输入Gitee账号、密码)
此后,日常工作包括:

3)拉取项目
git pull


4)本地工作(编辑文件)


5)将更新加入暂存区
git add .


6)提交到本地仓库
git commit -m 'message'


7)推送到远程仓库
git push


8)若发生冲突,需要再拉取并解决冲突
git pull origin master


在工作期间,还可以通过下面的命令观察状态。

9)查看状态
git status


10)查看差异
git diff

九、本地目录中配置.gitignore文件

此文用于忽略文件

.gitignore文件的语法要求:

以星号“*”通配多个字符;

以问号“?”通配单个字符

斜杠“/”表示目录;

叹号“!”表示不忽略匹配到的文件或目录。

hell?.c         #忽略?是任一字符的文件
/temp        #忽略temp文件夹
!lib.txt        #不忽略lib.txt
!temp/readme.md   #不忽略temp目录中的readme.md文件
 

.gitignore文件需要进行版本管理,不可以将其指定到.gitignore中。

十、Git工作原理再解析

1、文件状态与GIT命令关联

文件在不同工作区域流转时,处于不同的状态,使用不同命令,会产生对文件状态的影响

文件状态及其转换方式为:

文件从来没有被add过时,处于Untracked
commit之后文件处于Unmodified——工作目录与本地仓库一致
文件被add之后是Staged状态,等待commite
Unmodified的文件被修改,变为Modified状态
Modified之后的文件add之后将再变为Staged
Unmodifed的文件可以remove后不被追踪,变为Untracked。

2、掌握文件状态,以便于看懂git status命令呈现的信息并利用

十一、使用分支合作开发

分支操作命令:

十二、标签的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值