运维人员告别git小白(一)

目录

1、安装篇

2、初始化,创建版本库

3、最最基本的命令

4、工作区与暂存区概念

5、git让你不再犯错

5.1、版本回退

5.2、管理修改

5.3、撤销修改

5.4、删除文件

6、远程仓库的使用

6.1、添加远程仓库到本地

6.2、从远程仓库克隆

未完、等续……

1、安装篇

1.1、windows下的安装

前往这里下载windows下的git版本

前往这里下载windows下的git版本http://msysgit.github.io/,安装非常简单,除了修改一下安装路径外,其他的全部默认安装即可。安装好后开始菜单中会有“Git Gui”和“Giit Bash”,还有在右键菜单中除了前边的两个选项外还多出了“Git Init Here”。“Git Gui”表示Git的图形窗口,“Giit Bash”表示Git的命令行窗口,“Git Init Here”表示把一个目录初始化成一个Git库。

安装好后,点击开始-->所有程序-->git-->Git Bash,如果能跳出下这的窗口,那就证明git安装成功了,如下图:

1.2、Linux下安装Git

以Centos来说明,先在命令行下执行一下“git”命令,你会看到此发行版本下一般都会默认安装好Git,下边的服务器我选择了几个开发库组手工安装也包含了Git这个工具。

如果Linux下没有安装Git工具,那就使用yum命令安装即可,当然也要使用源码的方式来安装

[[email protected] ~]# yum -y install git

因Git是一个分布式的版本控制系统,所以安装好Git后,用户还得自报家门,如下:

[[email protected] ~]$ git config --global user.name "zhaochj"
[[email protected] ~]$ git config --global user.email "[email protected]"
# 这个“--global”这个选项表示此计算机上的所有仓库都是使用这个配置了。

2、初始化,创建版本库

[[email protected] ~]$ mkdir mygitrepo
[[email protected] ~]$ cd mygitrepo/
[[email protected] mygitrepo]$ pwd
/home/zhaochj/mygitrepo
[[email protected] mygitrepo]$ git init  #初始化
Initialized empty Git repository in /home/zhaochj/mygitrepo/.git/
[[email protected] mygitrepo]$ ls .git/
branches  config  description  HEAD  hooks  info  objects  refs

版本库创建好后,当前目录会多出一个隐藏的git目录,此目录就是用来追踪管理版本库,一定不要去修改此目录下的文件。

在这个仓库中增加一个文件进来试试:

[[email protected] mygitrepo]$ cp /etc/fstab ./
[[email protected] mygitrepo]$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	fstab   
nothing added to commit but untracked files present (use "git add" to track)
# git status的输出信息告诉我们在master分支上fstab这个文件没有被git追踪到。
[[email protected] mygitrepo]$ git add fstab  #把文件添加到仓库
[[email protected] mygitrepo]$ ls .git/
branches  config  description  HEAD  hooks  index  info  objects  refs

把一个文件添加到仓库后,git这个隐藏目录下会多出一个“index”文件,这个文件就是后边所讲的暂存区的概念。

3、最最基本的命令

先来了解几个git中最最基本的操作命令:

[[email protected] mygitrepo]$ git status #显示git追踪文件的状态信息
[[email protected] mygitrepo]$ git add 文件名称   #把文件添加到仓库,这里其实就是把文件从工作区扔到了暂存区
[[email protected] mygitrepo]$ git commit --message="提交的说明信息"   #把文件提交到了版本库,其实就是把文件从暂存区提交到了当前分支,“--message=”可简写成“-m”
[[email protected] mygitrepo]$ git log --pretty=oneline  #显示用户的提交日志
[[email protected] mygitrepo]$ git reflog  #显示用户所用的操作日志
[[email protected] mygitrepo]$ git diff HEAD -- 文件名  #比较工作区文件与版本库中最新版本的区别

4、工作区与暂存区概念

工作区:就是用户所在的目录,我这里就是“/home/zhaochj/mygitrepo”,用户在工作区是对文件进行修改操作。

暂存区:在工作区中有一个隐藏的git目录,这个目录不算是工作区,这是git的版本库,其中有一个index的文件,被称为暂存区;还一个master分支和一个HEAD指针文件。

往版本库目录上添加文件就是把文件增加到了工作区,比如上边的“cp /etc/fstab ./”,再用“git add fstab”命令则把fstab文件从工作区添加到了存储区中,如果再用“git commit -m “提交信息"”那刚是把fstab文件从暂存区提交到了当前的分支中。

一定要建立起工作区和暂存区的的概念,只有理解了这两个区域的含义才能明白git中许多命令操作操作背后git都做了什么动作,用户在使用利用git这个工具时多数也就是在这两个区域中移动。当“[[email protected] mygitrepo]$ git add fstab“时,git是这样的:

当“[[email protected] mygitrepo]$ git commit --message "cp /etc/fstab"”时,git是这样的:

5、git让你不再犯错

5.1、版本回退

目前工作区是有了fstab文件,并已提交到了版本库中。现在我往fstab文件的最后新增加了一行“/dev/sdb1               /mnt/test               ext4    defaults        0 0”

[[email protected] mygitrepo]$ vim fstab
#
# /etc/fstab
# Created by anaconda on Thu Feb 26 18:48:59 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=0ab66e1a-f92d-4803-ab61-3d08f9664818 /                       ext4    defaults        1 1
UUID=5ccd037f-5010-459c-8d39-cca30bf21a54 /boot                   ext4    defaults        1 2
UUID=a1457d82-f8c7-497a-a34a-7b7e983c112f /opt                    ext4    defaults        1 2
UUID=ca82d253-8968-4122-b85d-4d0db84d1bab swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1               /mnt/test               ext4    defaults        0 0
[[email protected] mygitrepo]$ git add fstab  #提交到暂存区
[[email protected] mygitrepo]$ git commit --message "add /dev/sdb1"  #提交到版本库
[master a7f78cc] add /dev/sdb1
 1 files changed, 1 insertions(+), 0 deletions(-)

再增加一行后提交:

[[email protected] mygitrepo]$ echo "/dev/sdb2         /mnt/test1    ext4   default    0 0" >> fstab
[[email protected] mygitrepo]$ git add fstab
[[email protected] mygitrepo]$ git commit --message=‘add /dev/sdb2‘
[master d3564b9] add /dev/sdb2
 1 files changed, 1 insertions(+), 0 deletions(-)

这样我们就有了三个版本了,用“git log --pretty=one”可查看提交日志信息:

[[email protected] mygitrepo]$ git log --pretty=one
d3564b9b671ef86ab257755d77fe363e597dad36 add /dev/sdb2
a7f78ccb62f310fbf6739c0e5231e1df16049689 add /dev/sdb1
7fa34d934689a27465719d021f42533ed23aa677 cp /etc/fstab

在版本回退之前我们要知道当前版本,在git中用HEAD来表示当前版本,当前版本的上一个版本用“HEAD^”表示,如果是想回退到前n个版本处呢,那就用“HEAD~n”。现在开始版本回退操作,当前版本是“add /dev/sdb2”,现在我要回退到它的上一个版本“add /dev/sdb1”,如下操作:

[[email protected] mygitrepo]$ git reset --hard HEAD^
HEAD is now at a7f78cc add /dev/sdb1

这们版本就回退到了“add /dev/sdb1”处,如果你后悔这个操作,又想恢复到“add /dev/sdb2”这个版本,那通过版本ID的方式来切换,用“git reflog”这个命令可以查看到用户做的操作,如下:

[[email protected] mygitrepo]$ git reflog
a7f78cc [email protected]{0}: HEAD^: updating HEAD
d3564b9 [email protected]{1}: commit: add /dev/sdb2
a7f78cc [email protected]{2}: commit: add /dev/sdb1
7fa34d9 [email protected]{3}: commit (initial): cp /etc/fstab

这样可获取到各个版本的ID,如下操作可回退到“add /dev/sdb2”:

[[email protected] mygitrepo]$ git reset --hard d3564b9
HEAD is now at d3564b9 add /dev/sdb2
[[email protected] mygitrepo]$ git log --pretty=oneline
d3564b9b671ef86ab257755d77fe363e597dad36 add /dev/sdb2
a7f78ccb62f310fbf6739c0e5231e1df16049689 add /dev/sdb1
7fa34d934689a27465719d021f42533ed23aa677 cp /etc/fstab

5.2、管理修改

git对版本的跟踪是针对的修改,可不是针对的文件,我们重新建立一个测试文件来说明其中的道理。

[[email protected] mygitrepo]$ vim gitlearing
git tracks changes.
[[email protected] mygitrepo]$ git add gitlearing
[[email protected] mygitrepo]$ vim gitlearing  #再对文件进行修改
git trachks changes of files.
[[email protected] mygitrepo]$ git commit --message ‘git track changes‘  #提交到版本库
[[email protected] mygitrepo]$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   gitlearing
#
no changes added to commit (use "git add" and/or "git commit -a")

查看状态时可发现,在工作区有修改没有被提交。这是因为第二次修改文件时没有“git add gitlearing”操作,第二次的修改没有被加入到暂存区,所以在执行“git commit”时只是把第一次提交到暂存区的修改提交到了版本库,而第二次的修改只是保留在了工作区里,所以git的状态报告会如此。

那我们怎样来查看当前工作区里的文件与当前版本库中最新版本文件的区别呢?使用以下命令即可:

[[email protected] mygitrepo]$ git diff HEAD -- gitlearing
diff --git a/gitlearing b/gitlearing
index 8d73f8c..23f0ddb 100644
--- a/gitlearing
+++ b/gitlearing
@@ -1 +1 @@
-git tracks changes.               #表示当前工作区里没有此行
+git tracks changes of files.了  #表示当前工作里多了此行

所以,要想把修改更新到版本库时,那一定要先把修改提交到暂存区,再更新到版本库。如下操作即可:

[[email protected] mygitrepo]$ git add gitlearing
[[email protected] mygitrepo]$ git commit --message ‘git tracks changes‘
[master 17bd370] git tracks changes
 1 files changed, 1 insertions(+), 1 deletions(-)

5.3、撤销修改

分以下几种情况

第一:在工作区中发现输入错误,那就在工作区中进行修改即可,如果修改的东西太多,你都不确定哪些修改过,那就回到与版本库中的一样就行;

第二:工作区中进行了修改,又提交到了暂存区,再对工作区中的文件进行了修改,撤销修改就回到与暂存区中的状态。

例子:

[[email protected] mygitrepo]$ git status
# On branch master
nothing to commit (working directory clean)
[[email protected] mygitrepo]$ cat gitlearing
git tracks changes of files.
[[email protected] mygitrepo]$ echo "i do not like her." >> gitlearing
[[email protected] mygitrepo]$ git add gitlearing
[[email protected] mygitrepo]$ echo "i am so sorry." >> gitlearing
[[email protected] mygitrepo]$ git status
# On branch master
# Changes to be committed:    #表示有修改已提交到了暂存区了
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   gitlearing
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)  #有这个提示表示工作区有了修改没有提交到暂存区
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   gitlearing
#

如果这时我们想回退到起先的版本,应该这样来操作:

a)、先放弃已放到暂存区的修改

[[email protected] mygitrepo]$ git reset HEAD gitlearing 
[[email protected] mygitrepo]$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   gitlearing
#
no changes added to commit (use "git add" and/or "git commit -a")

b)、再撤销工作区的修改,即从版本库中获取到最新的版本来替换工作区的文件

[[email protected] mygitrepo]$ git checkout -- gitlearing
[[email protected] mygitrepo]$ cat gitlearing
git tracks changes of files.

5.4、删除文件

在使用git时有一个很重要的思想,对文件的任何操作都是修改,git都会为我们记录下来,那删除操作也不例外。还是以一个例子来说明,如下:

如果不想要gitlearing这个文件了,那直接删除

[[email protected] mygitrepo]$ git status
# On branch master
nothing to commit (working directory clean)
[[email protected] mygitrepo]$ cat gitlearing
git tracks changes of files.
[[email protected] mygitrepo]$ rm -rf gitlearing
[[email protected] mygitrepo]$ git status
# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	deleted:    gitlearing
#
no changes added to commit (use "git add" and/or "git commit -a")

这样删除了文件可没完,版本库可不知道这个文件你已经删除了,所以还得做下边的事情:

[[email protected] mygitrepo]$ git rm gitlearing
[[email protected] mygitrepo]$ git commit --message ‘remove gitlearing‘

在在版本库中删除文件可不是真正的删除文件,如果你手一抖,删错了文件呢?版本库中还有这相文件,可以恢复的。

[[email protected] mygitrepo]$ git reflog  #先查看一下提交版本历史
1664af4 [email protected]{0}: commit: remove gitlearing
17bd370 [email protected]{1}: commit: git tracks changes
03d5739 [email protected]{2}: commit: git track changes
d3564b9 [email protected]{3}: d3564b9: updating HEAD
a7f78cc [email protected]{4}: HEAD^: updating HEAD
d3564b9 [email protected]{5}: commit: add /dev/sdb2
a7f78cc [email protected]{6}: commit: add /dev/sdb1
7fa34d9 [email protected]{7}: commit (initial): cp /etc/fstab

[[email protected] mygitrepo]$ git reset --hard 17bd370  #恢复到之前更新到版本库的版本,如果指向”remove gitlearing“的ID,那文件是恢复不了的,因为这个ID记录的是已删除文件的状态,此时,那文件已经被删除了。
[[email protected] mygitrepo]$ cat gitlearing
git tracks changes of files.

6、远程仓库的使用

以github为例来说明怎么使用远程仓库,没有github的帐号,那就去注册一个吧”https://github.com/“。

本地与远程的github的连接采用ssh的方式,所要做如下的操作:

a)、生成私钥和公钥文件

[[email protected] ~]$ ssh-keygen -t rsa -C ‘[email protected]‘  #生成公钥和私钥
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhaochj/.ssh/id_rsa):
Created directory ‘/home/zhaochj/.ssh‘.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zhaochj/.ssh/id_rsa.
Your public key has been saved in /home/zhaochj/.ssh/id_rsa.pub.
The key fingerprint is:
c9:a2:f1:5a:46:2b:8f:74:5c:0d:d7:d0:45:63:8a:f3 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|          .. o=  |
|           +.o . |
|        . + o    |
|       . = o     |
|    . o S . E    |
|     * +         |
|    + B          |
|   . O           |
|    o .          |
+-----------------+

b)、在github网站设置,点击”设置“按键

打开”ssh keys“设置界面,点击”add ssh key“,填上一个"Tile",再把上边得到的".ssh/id_rsa.pub"的内容粘贴进来

最后点击”Add key“就完成了操作。

6.1、添加远程仓库到本地

目前我在本地有了一个名为”mygitrepo“的仓库,那可以在github也建立一个仓库,并把两者联系起来,让两者能同步,github上的仓库可以作为备份。首先在github上建立一个名为”learning“的仓库,如下图:

建好后,learning是一个空的仓库,如下图:

那怎么把本地仓库与github上的仓库进行关联,并把本地仓库推送到github呢,根据上图中的提示作如下操作:

[[email protected] mygitrepo]$ git remote add origin [email protected]:zhaochj/learning.git   #这里的”zhaochj“是自己的github登陆名哟
[[email protected] mygitrepo]$ git push -u origin master #把本地仓库推送到origin远程仓库的master分支,第一次推送要加上”-u“

推送完成后就如下图所示要看到版本库中的文件了:

通过第一次与远程仓库同步后,再对本地仓库中的文件进行修改后,并且已更新到本地版本库中的文件,用如下命令就可直接同步到远程的github上:

[[email protected] mygitrepo]$ git push origin master  #不用”-u“参数

6.2、从远程仓库克隆

如果发起一个新兴的项目,那可以先在github上建立一个仓库,开发人员把这个仓库克隆到本地就可以开工了。

先在github上新建一个仓库,如下:

建好后会在gitnewrepo仓库上生成一个readme.md文件,如下图:

接着把远程仓库克隆到本地:

[[email protected] ~]$ git clone [email protected]:zhaochj/gitnewrepo.git
Initialized empty Git repository in /home/zhaochj/gitnewrepo/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
[[email protected] ~]$ ls
gitnewrepo  mygitrepo
[[email protected] ~]$ cd gitnewrepo/
[[email protected] gitnewrepo]$ ls
README.md

未完,等续……

时间: 2024-10-15 01:25:38

运维人员告别git小白(一)的相关文章

【IT运维监控】集团宕机引发对运维人员的思考 

前不久某大型集团官网和APP突然无法正常使用引发热议,不少人幸灾乐祸,也引发出了各种的谣言和段子,根本难以体会集团内部所受的压力,特别是作为一个大集团内部的运维人员所承受的各种压力和不安. 后 来,原支付宝运维团队负责人针对此事发表了一篇文章,让不少的运维人员深有感触,作为肩负运维监控使命的运维监控工具--PIGOSS BSM 也同样感同身受.面对层出不穷的运维安全隐患,当下运维人员急需一套高效的7*24小时都能担负监控任务的工具,为自身的运维工作减负,告别之前加班熬夜 但没有工作成绩的"怪现像

运维人员必须熟悉的运维工具汇总

运维人员必须熟悉的运维工具汇总 操作系统 :Centos※,Ubuntu,Redhat※,suse,Freebsd网站服务 :nginx※,apache※,tomcat※,lighttpd,php※,resin※数据库     :MySQL※,Mysql-proxy,MariaDB,PostgreSQLDB中间件:MyCat,amoeba,MySQL-proxy代理相关:lvs,keepalived,haproxy,nginx,apache,heartbeat(此行都是※)网站缓存:squid※

运维人员应人手一个GitHub帐号

最近在学习一些新东西,在实验环境下自己写的一些程序或脚本,觉得以后还能用的上,就想保存下来: 如果保存在本地或者U盘之类的移动存储中,以后重装系统或者U盘丢失也就损失了,而且作为一个IT从业人员,这年头文件不存储在云端,都不好意思说自己是混IT圈的: 最终选择了GitHub这个代码托管的网站,以后如果写出点像样的开源软件,还可以得到众多开发者的跟进,想想就挺美的!!! 所以今天就花了点时间整理了一下官方的配置使用文档,以帮助有同样需求且看英文文档费劲的同行们! #################

02、alex 说过“普通运维人员就是秋后的蚂蚱”

我非常认同这篇文章 http://3060674.blog.51cto.com/3050674/1598255 刚工作的时候,搞开发很辛苦,没人带,所以果断选择了运维,从而快速升职.但是现在认识到,并且alex明确说过:普通的运维人员已是秋后的蚂蚱,蹦跶不了几天了,他们已经走在了被淘汰的路上,IT自动化必将砸掉大多数不思进取的运维人员的饭碗,寿终正寝只是时间问题, alex讲过农村电工被淘汰的事情,类似的案例还有很多,例如邮递员被快递公司取代.电报被固话取代,然后是移动通信.互联网.... 运维

01.运维人员需要学编程

老男孩写过<不懂编程的运维人员到底还能走多远?> http://oldboy.blog.51cto.com/2561410/1749513 从本人工作经验来看,认同他的观点:IT岗位需要的是综合能力强的人员,运维.开发.数据库.网络,技术岗位对上述知识体系都要会一些,才能很好的胜任对应岗位工作. 1.运维人员要会运维.开发.数据库.网络,但侧重点是运维, 2.开发人员要会运维.开发.数据库.网络,但侧重点是开发, 3.数据库人员要会运维,开发,数据库,网络,但侧重点是数据库, 4.网络人员要会

Linux运维人员需要掌握一门编程语言吗?

最近经常有同行的朋友或者Linux初学者问我:运维人员是否需要学一门语言,那么该学哪种语言呢? 对于这个问题,我分两个方面回答: 首选,在大数据.云计算发展迅猛的今天,系统运维人员如果不懂一点开发语言的话,确实会举步维艰,因为在运维工作中,业务系统的繁多,线上服务器规模很大时,只能通过写脚本的方式(自动化也是脚本一种哦)自动化完成,不然,如此重复和繁琐的工作,靠人力是无法负担的,所以,学习一门可以让运维工作批量完成的语言,就显得很重要了. 那么应该学习一门什么语言呢? 对于Linux系统运维人员

【运维者说】程序员玩跨界,错在运维人员

在很多交流场合,我们或多或少能听到有小伙伴抱怨运维岗位工作没有得到老板或者公司同事的认可,这怪谁呢?私以为只能怪运维岗位的各位同行,为什么这么讲呢?我这个攒了很久的大招,今天终于可以释放出来了. 恰逢看到田逸老师写的博客<程序员,请不要抢系统管理员的饭碗>以及文章下面各位同仁的评论内容,很多小伙伴基本上是从一个系统管理员的角度出发说出了安全问题的原因是程序员不应该这么做而这么做了,那程序员应该怎么做,他们知道吗?从这篇博客中描述的安全问题出发,田逸老师作为系统管理人员排查问题的思路非常清晰,对

【IT运维监控】讨论哪种运维监控工具才是IT运维人员的最爱?

选择运维工具的几大要素:一是看我哪些指标需要监控,二是看我监控到什么 三是看这种运维监控工具能监控到什么程度 有可能,这几个问题IT运维人员自己都没有弄的很明白,那么我们先看一下整个运维行业目前的现状: 目前来说,传统企业的IT运维大部分还是用户在使用过程中发现故障,然后通知运维人员,再邮运维人员确定是什么问题,采用哪种方式可以解决.大部分的运维人员目前还是充当的只是一个救火员的身份,没有起到真正的IT运维监控的作用.运维人员的大部分时间和经历都花在了处理简单而重复的问题上,导致同事及领导的不满

运维人员处理服务器故障的方法总结

运维人员处理服务器故障的方法总结 一.尽可能搞清楚问题的前因后果 二.查看有谁在线 who last 三.查看之前执行了什么命令  history 四.查看现在在运行的进程是什么 pstree -a ps aux 五.查看监听的网络服务 netstat -nxlp netstat -ntlp netstat -nulp 六.查看CPU 和内存 free -m uptime top htop 七.查看硬件 lspci dmidecode ethtool 八.查看IO 性能 iostat -kx 2