Git

版本控制系统

    git  分布式 没有中心代码库 所有机器之间的地位是同等的,每台机器上有所有的代码
    svn  集中管理 中心代码库--client  必须要连网
开发
    git是linus开发的
功能  只能控制文本文件 .txt 结尾的文件
    可以进行版本控制
    可以进行很好的团队开发
    作为运维人员的上线工具

git属于分布式版本控制系统:
客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。
优点:
a.由于任何人每次提取操作,实际上都是一次对代码仓库的完整备份,因此近乎所有的操作都可以在
本地执行,速度就是相当的快,并且可以在网络断开的时候操作仍然不受影响,可以频繁的进行提交
更新,等到有网络的时候再上传到远程的镜像仓库就可以了。
b.文档很详细,并且命令行的提示也很到位,用起来比较得新应手,而且很多的设置与操作跟linux操
作很相近(不亏是linux之父创造的)。
c.git的分支模型,相当的轻量级,被称为“必杀技”。  
缺点:
a.每个开发人员都拥有所有的代码,不利于核心代码的保密(如果有重要代码需要保密,则不建议使用git)

111.png

工作区(Working Directory):
本身是一个目录
1.代码文件
2.代码库:控制代码版本的,他在工作区里创建一个隐藏目录.git

缓存机制
存放git版本仓库的目录就是工作区
版本库(Repository):
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

暂存区:
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

HEAD:
你的本地仓库由 git 维护的三棵“树”组成。
第一个是你的 工作目录,它持有实际文件;
第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动;
第三个HEAD,指向你最近一次提交后的结果。
HEAD的头就是当前指向的版本

添加修改到暂存区:
创建两个文件add到stage:

    #git add  文件名   
    或者
    #git add  *

从stage提交到当前master分支的HEAD:

#git commit -m “版本描述信息”    //提交暂存区里的修改到版本库的分支

git 部署:
环境:
centos7u3
vm20 192.168.245.139 充当中央服务器
vm21 192.168.245.249

安装:所有机器都安装

    # yum install git -y
    # git --version
    git version 1.8.3.1

准备:
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    # git config --global user.email "wing@up.com"
    # git config --global user.name "wing"

1.创建一个空目录:在vm20上创建

[root@vm20 /]# mkdir gittest
[root@vm20 /]# cd gittest/

2.通过git init命令把这个目录变成Git可以管理的仓库(初始化代码库):

方式1.创建本地库:相当于第一种情况,本地自己的机器别人不能上传到自己的机器
这样创建的库其他机器可以clone(克隆),但是没办法push(上传)
[root@vm20 gittest]# git init
初始化空的 Git 版本库于 /gittest/.git/
创建完成后查看库目录:
[root@vm20 gittest]# ls -a
. .. .git

方式2.创建裸库: 适用与作为远程中心仓库使用
创建裸库才可以从别处push代码过来,使用--bare参数

[root@vm20 gittest2]# git init --bare     

初始化空的 Git 版本库于 /gittest2/
默认会把当前所在目录做成库目录,可以在命令后面跟目录指定子目录为版本库

git init --bare 库名字

裸库创建完成后查看库目录:

[root@vm20 gittest2]# ls
branches  config  description  HEAD  hooks  info  objects  refs

注:不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的

3.在gittest目录下创建一个测试文件readme.txt

    [root@vm20 gittest]# cat readme.txt 
    Git is a version control system.
    Git is free software.

4.把文件添加到暂存区:使用 "git add" 建立跟踪

    [root@vm20 gittest]# git add readme.txt
使用#git status可以查看状态
使用#git rm --cached readme.txt可以删除文件跟踪,但是不可以回退文件内容的修改 

5.提交文件到仓库分支: 默认的分支是master

    [root@vm20 gittest]# git commit -m "test"
    [master(根提交) addd750] test
     1 file changed, 2 insertions(+)
     create mode 100644 readme.txt   
    -m  本次提交的说明

6.查看git状态:

[root@vm20 gittest]# git status
# 位于分支 master
无文件要提交,干净的工作区

场景1: 源文件添加了一行thursday,还没有add到stage(前提:之前提交过此文件)撤销对文件的修改。

[root@vm20 gittest]# git checkout -- a.txt

场景2:源文件添加了一行thursday,并且add到了stage(前提:之前提交过此文件,添加到了暂存区)

[root@vm20 gittest]# git reset HEAD a.txt
[root@vm20 gittest]# git checkout -- a.txt

查看现在的版本:

[root@ansible gittest]# git log

回到上一个版本:

[root@vm20 gittest]# git reset --hard HEAD^^ ^一个上箭头回退一个版本号

回到指定的版本(根据版本号):

[root@vm20 gittest]#git reset --hard 6fe5b9a2   

[root@vm20 gittest]# git reflog  查看所有的id号

从工作区删除a.txt,并且从版本库一起删除

[root@vm20 gittest]# rm -rf a.txt
[root@vm20 gittest]# git status

删除了文件readme.txt之后又后悔了,恢复回来

[root@vm20 gittest]# ls
readme.txt
[root@vm20 gittest]# rm -rf readme.txt 
[root@vm20 gittest]# git checkout -- readme.txt
[root@vm20 gittest]# ls
readme.txt

GitHub 提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
GitHub允许添加多个Key用于可以在多台电脑上往GitHub推送。

部署远程仓库:

第一步,安装git:

#yum install git

第二步,创建一个git用户,用来运行git服务:

#adduser git
#git  config --global user.email "zhuangyaovip@163.com"
#git  config --global user.name "blackmed" 

第三步,创建证书登录:

mkdir /home/git/.ssh 
vim  /home/git/.ssh/authorized_keys 

将其他的机器的公钥(id_rsa.pub)里的文件导入到/home/git/.ssh/authorized_keys 这个文件里
第四步,初始化Git仓库:
选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

chown -R git.git sample.git

第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

# git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就简单了。
在远程克隆过来的目录里创建一个文件,并提交到版本库里

git remote  add test 
[root@tomcat gittest4]# git push -u origin master
tesla@192.168.245.3's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To tesla@192.168.245.3:/gittest3/teslaProject.git
 * [new branch]      master -> master

分支 master 设置为跟踪来自 origin 的远程分支 master。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容