Git的使用

 

 

一、Git基础

  1、Git中的三个区域:工作区,暂存区,版本库

工作区就是我们平时操作的文档代码之类的修改后需要添加到暂存区然后才能提交纳入版本控制

暂存区中的文件可以提交到本地代码库,也可以撤回到工作区。

版本库用于提交到远程代码库,也可以回到任何一个版本进行编辑

 

  2、文件的四种基本状态

Unchecked:此时的文件还没有被追踪,无法纳入到版本控制

Modified:文件已经修改,但还没有被添加到暂存区

Staged:文件已经被添加到暂存区,但是还没有被纳入到版本库

Committed:文件已经被提交到版本库

二、命令介绍

常用命令:

git status 用来查看文件状态,

git log   //查看提交日志

1、初始化仓库

在项目根目录下右击选择git bash here

使用git init 命令来初始化仓库

 

2、添加提交

将文件的添加到暂存区

Git add <filename>

或者

Git add .   //将所有文件添加到暂存区

 

将文件提交到版本库中

Git commit -m “这里写描述(描述是必须的,类似于代码里边的注释,让你知道这一次提交干了什么,但是不能没有)”

3、撤回操作

git commit --amend 撤销上一次的提交并且重新提交

Git checkout -- <filename> (注意,横杠和文件名之间要有个空格)将暂存区拉回到工作区

Git reset HEAD filename 将上一版本拉回到暂存区

Git reset --hard版本号   //将指定版本拉回到暂存区(仓库,工作区,暂存区都改变)

4、删除

Git rm 删除文件(很少用,我一般都是在资源管理器中删除文件)

Git rm --cached filename 删除暂存区中的文件

 

5、git远程操作

Git pull 【远程url】 【远程分支】 【本地分支】将远程分支拉取到本地分支并合并【本地分支不写默认为当前分支

Git push  【远程url】 【本地分支】 【远程分支】将本地分支推送到远程分支

 

通常远程url都比较长,不容易记住,这时我们就需要给url娶个名字,这样每次push或者pull的时候就不需要再输入远程的url了 命令如下

 

Git remote add <name>  <url>  //将<url>绑定到<name>

Git remote -v    //查看已经命名的url

6、git忽略

有时候远程端的配置和本地的配置不一样,每次pull和push的时候都要改一遍,这样太麻烦了,这时候git的忽略就能起到很大的帮助。

 

对于还没有纳入到版本控制中的文件,只需要将文件名或者文件夹(文件夹名字后边要记得带个斜杠)放到.gitignore文件中就可以了

如:

-------------.gitignore-------------

.gitignore

thinkphp\runtime\

 

但是我们平时做的项目基本上都是要先在远程端先pull下来再进行开发的,这时候的文件已经纳入到版本控制中去了,.gitignore文件对它已经不起作用了,如果直接删除,本地又需要它怎么办?这时候暂存区的作用就体现出来了先来看看流程:

首先:将该文件添加到.gitignore文件中

在命令行中输入:

git rm --cached  <filename>

这样就能把暂存区中的文件删除,并且工作区不受影响

如果要删除文件夹的话

  Git rm --cached -r <dirname>

 

然后就可以提交到本地仓库中了,再push或者pull的时配置文件就不会再被更改了

7、裸仓

Git init --bare

创建裸露的仓库,

没有工作区,

只有.git 文件中的内容,

节省服务器的磁盘资源,

适合放在服务器上做远程仓库。

 

8、目录检出

git --work-tree=’F:/www/123’ 

指定文件夹为新的工作区(仅本次有效,本次执行过后工作区还是.git 文件夹所在的目录)

git --work-tree=’F:/www/123’ checkout -- .

将仓库中的文件拉回到工作区(这里的工作区为新指定的工作区)

9、钩子与自动部署

在我的理解看来git中所说的钩子类似于js里面的触发事件,指定的某件事情发生了,指定的钩子中的脚本就会被执行到。

关于钩子的具体介绍请参阅官方文档:

https://git-scm.com/book/zh/v2/自定义-Git-Git-钩子

钩子和目录检出的结合完美实现了自动部署,并且网站根目录里不用存放.git 文件夹

 

  1. 建立裸仓
  2. 在建立的裸仓目录hooks文件下下的post-receive文件中添加以下两行

--------------------------linux------------

git --work-tree=/home/www/website checkout -- .

-----------------------windows-------------

代码同上,只需要在行首添加exec 就可以了

exec git --work-tree=/home/www/website checkout -- .  //只是看文档上这么写,还没有在Windows上测试过

 

如果每次push到服务器之后还要再上传一遍码云或者GitHub的话再加一句:

Git push ssh//git@gitee.......   master

就ok 了

  1. 为post-receive文件设置执行权限(linux)

Chmod +x post-receive

 

上边这两步基本上就将自动部署功能实现了,但是,如果服务器是Linux系统,为了系统安全还要为git新键git专属用户,设置用户的权限,和目录的所有者。不然检出时系统会提示没有权限

 

 

附上几条linux命令:

 

chown -R oracle:oinstall /opt

设置/opt目录的拥有者为Oracle用户组中的oinstall用户

需要将网站根目录和git仓库的拥有者设置为git用户或组,只有这样git才有权限检出文件到网站根目录

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐