git入门 笔记,电子书,教程

测试常用GIT部署环境的命令

前提:linux本地服务器已安装了Git,本地服务器上并没有远程代码,需要两步即可轻松搭建本地的Git仓库,并将远程代码部署到测试环境。

1、确保本地服务器上配置了Git,参考另一篇随笔:【本地Linux服务器上配置Git】即可;

2、在本地服务器上构建一个代码仓库,使用:

git clone git@git.*****.git wedata-framework (wedata-framework为自定义的本地仓库名,建议和远程仓库的保持一致,仓库路径为执行本命令的路径);

执行完后,使用 ls 即可查看到本地仓库,cd wedata-framework进去就可以看到当前部署的分支代码,默认是克隆master,可以使用 git branch 查看到;

至此,代码仓库已经在本地服务器上建好,下面我们要做的就是【开发分支部署】。

【开发分支部署】

这里只要了解Git的基本命令即可;

1、git branch -a //显示所有的分支:本地分支+远程分支(以remotes/origin/开头)

2、git pull //取回远程主机的分支更新;在本地没有分支A时,使用该命令后,可以看到远程分支A,在本地部署了分支A后使用该命令,会将远程仓库A分支更新到本地,如果本地的和远程的没有任何区别,那会显示“Already up-to-date”;

3、git checkout -b A /remotes/origin/A //将远程A分支拷贝到本地,并在本地部署A分支;

不出意外的话,输入命令后会回显说已经checkout到了A分支;

若在此处出现警告,提示需要先提交,如果不提交则可以使用“git reset --hard”和“git pull”,之后可以使用第3步的命令。

 

git入门 笔记,电子书,教程_第1张图片

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

1991年,Linus在创建了开源的Linux

2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了

2005年,(BitMover公司收回Linux社区的免费权限)Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!

2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

Q: 集中式和分布式版本控制系统有什么区别呢?

Linus一直痛恨的CVS及SVN都是集中式的版本控制系统(需要从服务器下载,修改后要上传服务器。缺点:互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。)

而Git是分布式版本控制系统,每台机器都存的全量代码,都是服务器

Q: 为什么Git比其他版本控制系统设计得优秀,

A: 因为Git跟踪并管理的是修改,而非文件。

Git的杀手级功能之一(注意是之一,也就是后面还有之二,之三……):远程仓库

只要注册一个GitHub账号,就可以免费获得Git远程仓库。

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。

如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。这个方法我们后面会讲到的,相当简单,公司内部开发必备。

确保你拥有一个GitHub账号后,我们就即将开始远程仓库的学习。

 

LINUX安装git

先从Git官网下载源码,然后解压,依次输入:./configmakesudo make install这几个命令安装就好了。

Git使用

git init命令,初始化一个Git仓库。

添加文件到Git仓库,分两步:

  1. 使用命令git add ,注意,可反复多次使用,添加多个文件;第一次修改 -> git add -> 第二次修改 -> git add -> git commit
  2. 使用命令git commit -m ,完成。

  注意:git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的  所有修改提交到分支。

no changes added to commit (use "git add" and/or "git commit -a")

git入门 笔记,电子书,教程_第2张图片

 

git status命令,随时掌握工作区的状态。如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

HEAD指向的版本就是当前版本(Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向你想回退的版本)

git reset --hard commit_id命令,Git允许我们在版本的历史之间穿梭。

git log命令,可以查看提交历史,穿梭前,用这个命令查看并确定要回退到哪个版本。

git reflog命令,要重返未来用来记录你的每一次命令,查看命令历史,以便确定要回到未来的哪个版本。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

文件删除:

有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

删除文件

在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交:

$ git add test.txt

$ git commit -m "add test.txt"
[master b84166e] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    deleted:    test.txt

no changes added to commit (use "git add" and/or "git commit -a")

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

现在,文件就从版本库中被删除了。

小提示:先手动删除文件,然后使用git rm 和git add效果是一样的。

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

远程库

“有了远程仓库,妈妈再也不用担心我的硬盘了。”——Git点读机

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库learngit

根据GitHub的提示,在本地的learngit仓库下运行命令:

$ git remote add origin [email protected]:michaelliao/learngit.git

请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步,就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

git push命令,把本地库的内容推送到远程,实际上是把当前分支master推送到远程。

 

从远程库克隆

首先,登陆GitHub,创建一个新的仓库,名字叫gitskills

我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

$ git clone [email protected]:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

你也许还注意到,GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

创建与合并分支

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

帮助记忆的两张图

git入门 笔记,电子书,教程_第3张图片

git入门 笔记,电子书,教程_第4张图片

电子书:https://git-scm.com/book/zh/v2

廖雪峰Git教程

git常用命令总结--廖雪峰老师Git教程命令总结

Git的基础知识和常用命令

阮一峰写的Git常用命令的博客地址

你可能感兴趣的:(git)