• git 基础总结


     

    一、关于版本控制

      Git官网版本控制介绍 https://git-scm.com/book/zh/v1/起步-关于版本控制

      个人理解:

      集中式的版本控制系统:

      首先有一个中央服务器,保存所有文件及修订版本,开发者们都通过客户端连到这台服务器,checkout取出最新的文件或者commit提交更新,假如你进公司的时候,项目已经完成大部分,你checkout获取代码只是最新版本的代码程序;

      优点:

      易于管理,集中式服务器更能保证安全性;符合我们正常的逻辑思维;每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

      缺点:

      服务器出现问题的时候,开发者都无法提交更新,无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录。

        服务器压力太大,数据库容量暴增;

            

      分布式的版本控制系统

        客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。可以指定和若干不同的远端代码仓库进行交互。

        优点:任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复;适合分布式开发,强调个体;速度快、灵活,通过哈希值判断文件数据是否更改,效率更高;离线工作;

        缺点:代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息;

      SVN属于集中式的版本控制,Git属于分布式的版本控制;

      SVN与Git对比:

        Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。

        svn是通过对比文件来判断文件的修改更新等,效率比较低;

      git是使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串,通过哈希值判断文件数据是否更改,效率更高;

    二、安装并配置Git  (这里指记录Mac版)  

      1、安装Git官网:https://git-scm.com/book/zh/v1/起步-安装-Git 

      2、配置用户信息:https://git-scm.com/book/zh/v1/起步-初次运行-Git-前的配置

    第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

      $ git config --global user.name "xxx"

      $ git config --global user.email xxx@xxx.com

    如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

      $ git config  user.name "xxx"

      $ git config  user.email xxx@xxx.com

      3、查看配置信息:git config --list

      4、学习 config 命令可以怎么用 $ git help config

    三、Git基础

      1、初始化项目

    如果需要自己创建项目的话,打开终端,cd 到你想要文件夹地址,使用$ git init 创建新项目,这时候文件夹內会创建一个.git文件夹,提示创建了一个空的仓库,如果没有.git文件夹可能是文件夹为隐藏状态,使用ls -ah查看即可,如下图:

    在文件夹內放入一个README.md文件(可以手动床架,也可以使用终端创建),输入命令

      $ git status,检查当前文件状态,如下图所示:

     

      可以看到新建的README文件出现在“Untracked files”下面,未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件(新创建的文件);

    使用命令$ git add xxx(文件名或者.)开始跟踪一个或多个新文件,再输入git status查看文件的状态,会看到 README 文件已被跟踪,并处于暂存状态,如下图所示:

     

      然后需要提交README文件,输入命令$ git commit -m "添加README.md文件",如下图所示:

     

      现在修改README文件,例如添加一句“修改测试”,保存之后再终端输入$ git status 查看状态,已修改区状态,如下图:

      再执行git add . 添加到暂存区,再执行$ git commit -m "xxx",提交修改即可。

    最基本的提交已经完成,可以使用$ git log 查看提交信息,到这里本地的git仓库就完成了,也可以把本地的仓库推送到服务器上,首先服务器上要创建好git项目,例如创建一个Demo项目,输入命令:

    $ git remote add origin 你的远程库地址(这个URL就是我们在服务器中的地址,我们在web端手动创建的库,例如:git remote add   git@192.168.x.xxx:xxx/Demo.git) // 把本地库与远程库关联

      $ git push -u origin master // 第一次推送时

      $ git push origin master // 第一次推送后,直接使用该命令即可推送修改

      结果如下图所示:

     

     

      2、从现有仓库克隆

      在服务器上创建项目,执行:

      $ cd 存放项目的文件夹路径

      $ git clone url (这个URL就是我们在服务器中的地址,例如:git clone url git@192.168.x.xxx:xxx/Demo.git)

      克隆完成就可以在文件夹中添加项目等文件,提交push。

      3、创建分支及合并

      一般我们都是从master分支上克隆项目,但是提交的时候还是提交到自己创建的分支上,在合并到master,这样可以防止因自己错误导致项目无法运行。

      $ cd 项目所在文件夹

      $ git checkout -b 分支名(例如:git checkout -b dev,相当于$ git branch dev  $ git checkout dev)

      服务器上项目需要创建同名的分支,这样就可以看到dev分支的提交记录等,如下图:

        

      查看分支:

      $ git branch (*代表当前分支,再提交的时候就会提交到dev的分支上面)

      分支合并:

      $ git checkout master (切换到master)  

      $ git merge dev (合并分支dev)

      4、忽略某些文件

      我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式

      创建:$ vi .gitignore

      点击i开始输入,例如输入*.[oa] 第二行输入*~,输入完成后点击esc键,再shift+:输入wq退出。

    第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。

      更多的介绍:https://git-scm.com/book/zh/v1/Git-基础-记录每次更新到仓库#忽略某些文件

         5、push后修改提交的信息,git commit

         Git commit信息push后,如何修改,git commit --amend可以修改最后一次commit信息,但对于历史提交信息,需要使用rebase命令。

    1、例如修改的commit是倒数第三条,使用下述命令:git rebase -i HEAD~3

    2、把pick改为edit,如下图:
     3、然后 按esc键  :wq (英文输入法),退出后有提示,如下图:
     
    4、执行 git commit --amend,进入注释编辑界面,如下图,输入i编辑修改commit信息,之后再esc退出保存 :wq。
    5、执行 git rebase --continue
    6、执行 git push -f 推送到服务端。

        参考:https://www.cnblogs.com/shenh062326/p/git.html

    参考: Git官方文档:https://git-scm.com/book/zh/v1/起步

        https://blog.csdn.net/yuwq123/article/details/52748009

  • 相关阅读:
    13. Spring—AOP—JDK 的动态代理
    12. Spring — AOP 面向切面编程
    28-1 父组件传递数据给子组件 — props基本用法—驼峰命名说明
    【洛谷 1596】湖计数
    【洛谷 1280】尼克的任务
    【洛谷 3884】二叉树问题
    【洛谷 3384】模板树链剖分
    【洛谷 2089】烤鸡
    【洛谷 1706】全排列问题
    【洛谷 2692】覆盖
  • 原文地址:https://www.cnblogs.com/lulushen/p/8650750.html
Copyright © 2020-2023  润新知