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.cppxkj@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.cppxkj@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.mdxkj@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命令呈现的信息并利用
十一、使用分支合作开发
分支操作命令:
十二、标签的使用