• Git——基本操作


    Shell

    基本概念

    • shell俗称壳,为使用者提供使用界面,例如DOS下command以及后来的cmd.exe
    • shell分类
      1. 图形界面shell,提供友好的可视化界面,例如windows操作界面,Linux系统上的GNOME
      2. 命令行shell,通过键盘输入的方式调用应用程序,例如windows下的cmd.exe、windows powershell,Linux系统的Bourne Shell(sh)、Bourne Again shell ( bash)等
    • shell通过指令操作Kernel,Kernel又去操作计算机硬件

    Git

    • 在windows下使用bash可以安装Git,此软件集成了大多数bash命令
    • 右键Git上边框空白处,会有Options选项可以进行基本设置
      1. Text设置:根据设置的字体大小,Git操作界面会随之变大变小
      2. Window设置:可以单独界面大小
    • 桌面右键会出现Git Bash Here,此功能可以快速访问被右键的文件夹,如果没有也可以通过主动添加的方式 http://blog.csdn.net/novav/article/details/53820443

    Bash常见命令

    • 命令 [-options]  [参数],这是命令的基本形式
    • pwd (Print Working Directory) 查看当前目录
    • cd (Change Directory) 切换目录,如 $ cd e:
      1. $ cd e: 代表切换到e盘符下
      2. $ cd works 代表切换到e盘符下的works文件夹
      3. $ cd c:/user 代表切换到c盘符下的user文件夹
      4. $ cd .. 代表切换到上一级目录,一个点代表当前目录,两个点代表上一级目录
    • ls (List) 查看当前目录下内容,如 $ ls -a
      1. $ ls images,这表示查看当前工作目录下的images文件夹的内容,需要注意这并没有切换目录
      2. 查看目录下内容有时候会多出两个隐藏的文件夹 $RECYCLE.BIN/ 和 System Volume Information/ 这个我们不需要去管它
      3. $ ls -a 代表查看当前工作目录的所有内容,其中包括隐藏目录,还有./ 和 ../ ,这都不用管它
      4. $ ls -l  代表以列表形式查看当前工作目录的内容,详细列表包括权限、文件大小、创建时间、文件名称,文件总数
      5. $ ls -a -l 代表以上综合,还可以这样写$ ls -al
      6. $ ls -al images 代表查看images下的所有内容,而且是列表形式展现,注意images参数在最后
    • mkdir (Make Directory) 创建目录,如$ mkdir blog,也可以创建多个文件夹,中间用空格隔开,例如$ mkdir css js images
    • touch 创建文件,如$ touch index.html,也可以在目录下指定文件夹创建文件,例如$ mkdir js/app.js
    • cat 查看文件全部内容,如 $ cat index.html  
      1. more可以查看全部信息,但是windows下不支持
      2. less可以查看部分信息,例如$ less index.html,但是敲击键盘回车键或者空格可以往下继续查看剩余信息,键盘Q可以退出查看 
    • rm (remove) 删除文件,如$ rm index.html
    • rmdir (Remove Directory) 删除文件夹,只能删除空文件夹,不常用,例如 $ rmdir css
    • rm -r 可以删除文件夹下的所有文件,包括此文件夹,例如$ rm -r js,会删除js文件夹,即使文件夹内有内容,-r是递归的意思
    • mv (move) 移动文件或重命名,如 mv index.html ./demo/index.html

      1. $ mv index.html images/index.html 第一个参数是被剪切的文件,第二个参数是移动到哪里,中间用空格隔开
      2. $ mv index.html images/mo.html,在剪切到指定目录下的同时,也可以对原文件重命名
      3. $ mv index.html mo.html,剪切到当前,这完全就是重命名的操作
    • cp (copy) 复制文件,基本操作同上的mv,在复制过程中也对文件重命名
    • head 查看文件前几行,如$ head -n 5 index.html,也可以简写 $ head -5 index.html

    • tail 查看文件后几行 –n,如 $ tail -n 5 index.html、$ tail -5 index.html
    • tab 自动补全,连按两次会将所有匹配内容显示出来

    • history 查看操作历史 $ history

    •  >和>>都是重定向的符号,可讲输出结果保存到指定目录下的文件中
      1. 定向的过程其实就输出的过程,好比我们$  ls 查看当前任务目录下的内容,它的结果会打印在当前界面
      2. $ ls > ../index.html,index.html中的内容将被输出的结果完全替换
      3. $ echo  i love you>>../index.html,会将输出的结果追加到index.html中 
    • weget是下载的意思,但是windows不支持
    • tar是解压的意思,但是此指令无法解压zip和rar,有专门执行解压zip的指令unzip
    • curl网络请求,可以指定get请求还是post请求,以及参数,可以通过发送请求,将接收的数据重定向到指定文件中,例如$ curl http://www.baidu.com >> index.html
    • whoami查看当前用户 $ whoami
    • | 管道符可以将多个命令连接使用,上一次(命令)的执行结果当成下一次(命令)的参数。

    • grep 匹配内容,一般结合管道符使用,$ grep i index.html 在文件index.html中匹配有i的字符串,$ ls | grep i 在ls输出的结果中匹配有i的字符串

    Vi编辑器

    基本概念

    • 如同windows下的记事本,vi编辑器是linux下的标配,通过它我们对文件进行编辑
    • vi编辑器提供了三种模式,命令模式、插入模式、底行模式,每种模式下的操作的作用都不一样
      1. 命令模式主要是中转的作用
      2. 在命令行模式下输入i和a之后就会进入插入模式,此时可以对文件进行编辑
      3. 如果此时想去底行模式,那么就需要先esc进入命令行模式,再shift+:进入底行模式

    基本使用

    • 命令模式 
      1. i进入编辑模式,当前光标处插入
      2. a进入编辑模式,当前光标后插入 
      3.  A进入编辑模式,光标移动到行尾
      4. o进入编辑模式,当前行下面插入新行
      5. O进入编辑模式,当前行上面插入新行
      6. ZZ保存并退出
      7. u撤销操作,可多次使用
      8. dd删除当前行
      9. yy复制当前行
      10. p粘贴复制内容
      11. ctrl+f向前翻页
      12. ctrl+b向后翻页
    • 底行模式
      1. w保存,w index.html 是将文件另存为,此时当前文件并没有保存
      2. q退出
      3. wq保存并退出
      4. e!撤销更改并返回到上次保存的状态
      5. q!不保存强制退出
      6. set nu设置行号
      7. 编辑模式
    • 编辑模式下与windows编辑器相似

    SSH

    基本概念

    • SHH是一种网络传输协议,用于计算机之间的加密登录
    • SHH属于非对称性加密,需要两个密钥来进行加密和解密,分别是公钥和私钥

    工作原理

    • 在第一次登录时,服务器会将公钥发送过来,我们通过这个公钥将自己的数据进行加密
    • 服务器接收数据后,通过自己的私钥对数据进行解密

    基本操作

    • $ ssh student@192.168.0.1,git内提供了ssh命令,student是用户,ip地址是服务器的地址
    • 若是连接成功,会在用户目录下会多新建一个ssh文件夹,里面存储的就是服务器发来的公钥
    • 当我们根据提示要求输入密码的时候,就会根据公钥进行加密传输
    • 成功登录之后,我们可以进行操作,$ scp index.html student@192.168.0.1:/home/work,将本地的index.html文件复制到了服务器下的work目录

    版本控制器

    基本概念

    • 版本控制(Version  Control Systems)是记录若干文件变化,以便查阅特定版本修订的情况,这个系统可以自动帮我们备份文件的每一次更改,并且可以方便的恢复到任意版本的备份状态

    版本分类

    • 本地版本控制系统,功能单一,现在很少使用,无法完成多人协同开发
    • 集中式版本控制系统,通过单一的集中管理的服务器达到多人协同开发,其代表就是SVN
    • 分布式版本控制系统,不需要中央服务器,每个协同开发者都有一个完整的版本库,这样即使协同开发者的服务器出现故障,也可以通过使用其他的协同开发人员的本地仓库恢复

    git工作原理

    基本概念

    • gi管理分为三种状态:已提交(committed)、已修改(modified),已暂存(staged),由此引入三个工作区域的概念:git仓库、工作目录、暂存区域
    • git仓库是用来保存项目的元数据和对象数据库的地方,从其他计算机克隆仓库的时候,就是从这里拷贝的数据
    • 工作目录是我们能看的见,是我们使用和修改的地方
    • 暂存区域是一个保存了我们将要提交的文件列表数据,一般在git仓库的目录下

    工作流程

    • 在工作目录中修改文件
    • 将文件放入暂缓区域
    • 讲暂缓区域文件提交到git仓库

    基本使用

    • 配置用户信息
      1. 配置用户信息的原因是记录开发者信息,以便在版本控制中记录开发者的操作行为
      2. $ git config --global user.name wqx 记录用户名
      3. $ git config --global user.email wqx0714@163.com 记录用户邮箱
      4. $ git config --list 查看配置信息中是否存储了用户的信息,也可以通过桌面查看用户的文件夹,里面会有.gitconfig的配置文件
      5. --global是配置当前用户所有仓库
      6. --system配置当前计算机上的所有用户的仓库
      7. 配置操作只需要一次,可以重复使用
    • 初始化仓库
      1. $ git init,在进入项目的根目录,例如work,执行$ git init,就会创建一个.git隐藏目录,可以通过$ ls -a 查看,这个.git目录就是仓库,会存储我们提交的各个历史版本的数据
    • 查看状态
      1. $ git status 会显示工作区域下文件的状态
      2. 在首次没有执行add命令,工作区域的文件会出现红色Untracked files(下图1),这些都是没有被跟踪的目录,此时这种状态下,你修改的文件是不会被跟踪的,所以我们需要先将工作区执行add操作
      3. $ git add -A 执行之后,执行status命令,上面红色文件就被显示绿色(下图2),表示已经在暂存区域可以被提交,此时再去修改文件就会显示此文件被修改
      4. 当我们再次在工作区域的根目录下创建一个文件夹时候,执行status命令,又会显示一个没有跟踪被红色标注的红色文件(下图3),注意文件夹若是空的git会直接忽略

    • 添加文件到缓存区
      1. $ git add -A  或者 $ git add * 都是文件提交到暂缓区的命令,也可以$ git add index.html 提交指定路径下的文件
      2. $ git checkout index.html 可以将缓存区的文件还原到工作区,达到撤销更改的目的
    • 提交文件
      1. $ git commit -m '备注信息' 可以将暂缓区的文件全部提交到仓库存储
      2. $ git log 可以查看之前提交仓库的信息,如下图
      3. $ git reset --hard 提交ID 可以回到之前保存的状态,再次$ git log会发现最后一次的状态变成了我们回退的状态
      4. 当我们第二天再去对工作区进行修改时,不需要进行add命令,因为之前已经提交了一个版本的数据
    • 忽略文件
      1. 一些文件可以不被跟踪,当然也可以不提交
      2. 在工作区根目录下创建.gitignore文件,在里面输入不需要跟踪的文件,注意格式是用回车换行隔开

     

    git分支

    基本概念

    • 在实际开发中,在我们专注于某一个功能比如支付功能进行开发时,可能还需要应急的去改动原来版本中的bug,或者应急的在原来版本添加一个小功能例如评论功能,现在我们已经在写支付功能当然是没写完,此时如果去应急修改完提交上去,也会把半半拉拉的支付功能的代码提交上去,这样显然是不合适,所以这里引出了git创建分支的概念,它能够解决一人多任务的问题
    • 在实际开发中,其实所有的提交都是在分支基础上提交的

    基本使用

    • 在初始化仓库git init之后,至少提交commit一次,系统才会默认创建一个master的分支
    • git branch money,创建一个money分支,分支在原有版本的节点上创建的,称为子分支
    • git checkout money,切换分支,此时工作区就是在money这个分支上,工作区所有的修改会提交到money上
    • git branch 查看分支,带*号,表示此时工作目录处于对应分支上
    • git merge master 合并分支,在处于money分支的时候,执行此命令是将master的数据融合到money上
    • 需要注意的是money分值与master分支是继承关系,money分支上具有master分支上的所有存盘点
    • git branch -d money 删除money分支,-D是强制删除

    git共享仓库

    基本概念

    • 上面是本地的git操作,可以达到一人多任务的要求,但是多人协同该怎么办呢。比如自己和同事同时开发,但是同时写的是评论功能,自己写的是支付功能,当自己想要拿到同事的登录的时候应该怎么办呢?此时就引出了git共享仓库的概念,借助一个共享(远程)仓库,大家把自己开发的功能的代码放进去,别人需要的时候就可以去这个仓库拿。

    基本使用

    • 共享仓库的创建,可以使用ssh,具体操作如上介绍,在公司服务器上创建一个.git结尾的文件夹,比如是work.git,之后执行git init --bare命令,这就创建了一个裸仓库
    • 假设自己电脑上有一个项目,我们init,add,commit之后,git push student@192.168.0.1:/home/work.git master 就将我们分支master发送到了共享仓库中,共享仓库中$ ls 是查看不到上传的文件的,只能让同事去取
    • 同事那边目前是还没有数据的,但是需要init,保证是一个空仓库,但是不需要add,commit操作,之后执行git pull student1@192.168.0.1:/home/work.git master,此时我们就拿到了student1上传的数据
    • 同事拿到了数据,发现只是初始化了项目,还没有功能,此时同事需要开发一个登录功能,于是git branch login 创建login分支(分支策略),之后切换到login分支,对工作区进行修改,最后add,commit,最后完成登录功能
    • git push student1@192.168.0.1:/home/work.git login 同事最后将开发好的登录功能上传到共享仓库,此时共享仓库又多了一个login的存盘点,必须是上传login分支,因为你只在login分支上进行了工作区的修改
    • git pull student1@192.168.0.1:/home/work.git login 自己从共享仓库中拿到了同事上传的login分支,login分支的数据替换了自己的master分支的数据
    • 长串的远程地址,可以用别名代替,git remote add ball student1@192.168.0.1:/home/student/work.git,下次再向共享仓库提交或者下载数据就用ball这个别名代替就行了

    克隆

    • 接着上面的说,如果还有个同事也要参与这个项目,那么可以克隆clone方式
    • 执行git clone sudent1@192.168.0.1:/home/work.git 这里不需要init操作,结尾也不需要指定分支,此时这个同事就会拿到整个远程仓库的数据,而且工作区的目录就是work,所以clone操作就等于mkdir+cd目录下+git init+pull操作
    • 工作区根目录名称想要修改的话,只需要结尾后空格写上自己的命名就行了 git clone sudent1@192.168.0.1:/home/work.git selfname 
    • 克隆后的数据,有个优势就是再次向共享仓库提交分支数据的时候,无需定义远程别名,系统默认设置origin就是远程地址,git push origin ..

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    POJ 3687 Labeling Balls <<拓扑排序
    FATFS 初学之 f_mount
    STM8 低功耗时钟管理
    还记得 C中带参宏的 "#"号吗?
    8.9并发编程(一)
    8.8网络编程(三)
    8.7网络编程(二)
    8.6网络编程(一)
    7.30反射、元类及项目生命周期
    7.29多态
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/8589955.html
Copyright © 2020-2023  润新知