本文尽量以初学者的角度让你快速掌握GIT参与多人协作,由简单到复杂,如果你不是初学者,请跳过前面的基础部分。
本文参考:
廖雪峰老师的GIt教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
Git官方文档
https://git-scm.com/book/zh/v1/
是什么
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
--------------------------------------------------------------------------------------来源-百度百科
Git是目前世界上最先进的分布式版本控制系统(没有之一),作为新时代优秀青年,怎么能不接触这么高端大气上档次的玩意,那你肯定又要问
什么是版本控制系统?
OK?举个例子,如果你用过Microsoft Word写过文章,文档或者是什么长篇大论,那你肯定会有这种经历
想删除一个段落,却又怕无法找回,怎么办呢,先把当前的版本另存为另一个文件,然后删完接着来写,接着再遇到这种问题,再另存为。
所以你的word变成了这个样子:
过了一周,你想找回被删除的文字,但是已经记不清保存在哪个文件里面了,只能一个一个去寻找,隔着屏幕我都能知道你这会的心情。
OK,以这个文档为基础,再想下,公司的小王要和你一块整理这个文档,于是你把你现在已经写好的这部分发给他了,你俩一块来写,小王写好后,把文件传给你,这个时候,发动你聪明的小脑筋,你得知道他修改了哪里,他新增了什么,在哪个地方新增的,怎么和你后来自己写的整合,是不是想想都头疼?
没关系,这也是Git出现的原因,记录文件在每个版本的改动信息,不用个人手动管理。
那我们就开始吧
安装
1.在Linux上安装Git
因为我没有接触过Linux,这段内容是从廖雪峰老师的网站直接复制来的,各位如果有问题还希望及时留言
首先,你可以试着输入git,看看系统有没有安装Git:
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。
如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。
老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。
如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。
2.Mac OS 、Windows通用安装Git
- 下载git 文件 地址:https://git-scm.com/downloads
-
下载完之后双击进行安装。
-
选择安装目录
-
选择组件
-
开始菜单目录名设置
-
使用命令行环境
-
以下三步默认,直接点击下一步
安装完成
- 检测是否安装完成
回到电脑桌面,鼠标右键点击,如果看到如下图两个Git单词则安装成功
也可打开命令行工具,输入以下指令
git --version
按下回车如果正确运行,就能得到你电脑上安装的Git的版本号,则安装成功,如下图:
安装完成进行全局配置:
打开命令行输入
git config --global user.name "userName" //用户名
git config --global user.email email //邮箱
因为Git是分布式版本控制,所以多人写作时候,进行操作,你必须自报家门,这样的话,在进行操作的时候,远程仓库才知道是谁,做了什么事。
OK,这样的话,我们就正确的安装和配置好了基本的GIT环境。接下来,我们就简单的讲解下Git的工作流程。
GIT工作流程
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
如下图
创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
$ mkdir gitTest
$ cd gitTest
$ pwd
/git/gitTest
pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/git/gitTest。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /git/gitTest/.git/
这样的话会在仓库的目录内生成一个.git的文件,默认隐藏,在一些特殊的编辑器内可以显示,里面的信息是跟踪管理版本库的,如没有必要,请不要修改。
OK,接下来,我们就来看看GIT的强大力量吧。
我们在刚才建好的文件夹下,创建一个 gitTest.txt 文件
在这个文件中输入以下内容
这是一个git测试文件
和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令 git add 告诉Git,把文件添加到仓库:
$ git add gitTest.txt
执行上面的命令,没有任何显示,这就对了。
第二步,用命令 git commit 告诉Git,把文件提交到仓库:
$ git commit -m "修改的描述 "
[master (root-commit) ea48624] 修改的描述
1 file changed, 1 insertion(+)
create mode 100644 gitTest.txt
简单解释一下 git commit 命令,-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit 命令成功执行后会告诉你,一个文件被更改,也就是我们新添加的 gitTest.txt 文件,插入了一行内容,也就是里面的(这是一个git测试文件)。commit命令可以一次提交很多文件,取决于你添加(add)多少文件到仓库。当然你也可以使用 git add . 讲全部已改动的文件一次性全部添加,然后再使用commit一次性全部提交,这个当然取决你自己了
ok,到现在我们已经成功的添加并提交了一个 gitTest.txt 文件,现在我们继续改动这个文件,再添加一行文字:
Hello,world
这是一个git测试文件
熟悉的hello,world,现在我们运行 git status 命令看看结果。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: gitTest.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status 命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,gitTest.txt被修改过了,但还没有准备提交的修改。
虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的gitTest.txt,所以,需要用git diff这个命令看看:
$ git diff
diff --git a/gitTest.txt b/gitTest.txt
index cb0f561..cbbf0d5 100644
--- a/gitTest.txt
+++ b/gitTest.txt
@@ -1 +1,2 @@
+hello,world
这是一个git测试文件
\ No newline at end of file
上面的命令输出的意思是,我们在第一行添加了一个"hello,world",知道了修改什么之后,就可以放心的提交了,提交修改文件和刚才我们做的提交新文件是一样的步骤
第一步是 git add gitTest.txt
$ git add gitTest.txt
同样没有任何提示,接下来我们在提交之前,先进行一下 git status 的操作,看下当前的仓库状态
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: gitTest.txt
git status 告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:
$ git commit -m "提交修改"
[master 89fe590] 提交修改
1 file changed, 1 insertion(+)
提交后我们再执行 git status 命令,查看当前仓库的状态:
$ git status
On branch master
nothing to commit, working tree clean
Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的
OK,学到简单的添加、提交操作后,我们来直接上手项目,看看更多的git操作,
开始的时候说过,GIT是多人协作分布式管理系统,既然是多人协作,自然会有一个远程的仓库,比如一个电脑24小时开机来充当服务器的角色,其他的每个人都可以从这个"服务器"仓库克隆一分到自己的电脑上来进行操作,然后把各自的提交推送到这个"服务器"上,也可以从服务器仓库中拉取别人的提交。
我们完全可以自己搭建一个这样的GIT服务器,但是,为了学习GIT搭一个服务器,完全是小题大做,也没有必要,于是,大家一定能够想到一个耳熟能详的名字
GitHub
这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库
但是现在为了学习便利,我们来采用开源中国的码云来进行举例。
关于码云的介绍,和码云和github的区别请参考
https://www.zhihu.com/question/50212423
言归正传,注册码云账号并登录,会看到类似以下界面
接着,按以下步骤新建一个项目
输入完成后,点击完成创建,会自动生成项目并且跳转到一个类似这样的页面
然后,如图所示,可以查看项目的git地址
OK,这样的话,我们就已经在码云上创建了一个远程仓库,在实际操作中我们要把远程仓库和本地的仓库关联起来,这样的话,才能在本地仓库中向远程仓库上传或下载东西,怎么做呢?打开命令行,在本地仓库的目录中输入:
$ git remote add origin git@gitee:zyq9613/gittest.git
解释下,上面的代码,git remote add是git关联的命令,后面的git@gitee.com大家都知道了吧,对了,正是码云,github对应的是git@github.com,在这里我们用的是开源中国的码云举例,再往后的zyq9613则是我在码云的账号,大家注意,这一步一定要换成自己的账号,否则你本地关联的就是我的远程库,关联倒是不要紧,但是你以后是肯定推送不上去的,因为我的白名单中没有你的SSH公钥。OK,扯远了,再往后面的gittest.git就是我们刚才创建的远程仓库。
OK,这样我们就关联上了远程仓库,怎么验证是否成功关联呢 ?打开命令行,输入:
$ git remote -v
origin git@gitee.com:zyq9613/gittest.git (fetch)
origin git@gitee.com:zyq9613/gittest.git (push)
这个命令是查看关联的远程库的信息的,到这里我们就成功的将本地仓库和远程仓库关联了,然后就可以快乐的协作开发了。
总结下:
全局配置
git config --global user.name "userName" //用户名
git config --global user.email email //邮箱
创建项目
md dirName //创建文件夹
cd dirName //进入文件夹
git init //初始化git
git clone git地址 //从远程仓库复制项目到本地
提交代码
git status 查看所有已修改但未提交的文件
git add . 将所有已变化的文件提交到暂存区,等待提交,可通过git add path 单个提交文件 path是路径
git commit -m "备注" 以add为索引将修改的代码添加到 仓库中
git pull --rebase origin master 将本地代码与远程仓库代码合并
git push -u origin master 上传合并后的代码(第一次上传使用"-u"进行本地和远程关联,以后不用)
完成
Windows可视化工具
https://www.sourcetreeapp.com/
git常用指令及错误处理方法
https://www.cnblogs.com/mantou811/p/6688517.html