• Git


    一.Git是什么?

    Git是目前世界上最先进的分布式版本控制系统(没有之一)。

    1.1CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?

    先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

    分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

    在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

    二.安装git

    在Windows上安装Git

    在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。

    安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

    安装完成后,还需要最后一步设置,在命令行输入:

    $ git config --global user.name "Your Name"

    $ git config --global user.email "email@example.com"
    因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
    注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    三.创建版本库

    3.1创建一个目录。

    $ mkdir learngit

    $ cd learngit

    $ pwd

    /Users/michael/learngit

    3.2 通过git init 将目录变为git可控制的版本库。

    3.3添加文件到Git仓库,分两步:

    • 第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件; git add . 提交所有文件

    • 第二步,使用命令git commit,完成。

    git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    3.4git 添加时忽略一些配置文件

    你不想添加的文件可以在项目文件下创建.gitignore文件,然后在里面添加你不需要add的文件名。
    git add . 添加不在.gitignore文件里面的所有修改文件

    忽略Python编译产生的.pyc.pyodist等文件或目录:

    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    
    开放模式负责设置过滤哪些文件和文件夹

    例如: /target/ 表示项目根目录下的target文件夹里面所有的内容都会被过滤,不被GIT 跟踪

    .classpath 表示项目根目录下的.classpath文件会被过滤,不被GIT跟踪

    四.时光机穿梭。

    4.1git status命令可以让我们时刻掌握仓库当前的状态

    4.2git diff [files]顾名思义就是查看difference,可以查看修改的具体内容

    4.3git log  显示从最近到最远的提交日志

    commit 后面一长串是版本号commit_id

    上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    git reset --hard HEAD^

    git reset --hard commit_id

    4.4 如果你返回到过去的版本库,又后悔了,那么你必须要找到 你想要回退的版本的commit id。Git提供了一个命令git reflog用来记录你的每一次命令。

    五.远程仓库

    从github下载命令 git clone + url

    5.1关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

    5.2关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

    5.3此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

    5.4获取服务器最新的修改git pull origin master

    //------------如果报下面这个- start---------------//

    //Please enter a commit message to explain why this merge is necessary,
    especially if it merges an updated upstream into a topic branch.
     Lines starting with '#' will be ignored, and an empty message aborts
     the commit.

    //处理方案:按 ESC(多按几次),再终端敲“:q”就好了,拉当前最近代码 pull ,再push,

    SSH警告

    当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

    The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
    RSA key fingerprint is xx.xx.xx.xx.xx.
    Are you sure you want to continue connecting (yes/no)?
    

    这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

    Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

    Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
    

    这个警告只会出现一次,后面的操作就不会有任何警告了。

    如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致

    5.4要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

    5.5Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

    六.分支管理

    6.1首先,我们创建dev分支,然后切换到dev分支:

    $ git checkout -b dev
    Switched to a new branch 'dev'
    

    git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

    $ git branch dev

    $ git checkout dev

    Switched to branch 'dev'

    6.2然后,用git branch命令查看当前分支:

    $ git branch
    * dev
      master
    

    git branch命令会列出所有分支,当前分支前面会标一个*号。

    6.3dev分支的工作完成,我们就可以切换回master分支:

    $ git checkout master

    Switched to branch 'master'

    6.4切换回master分支后,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变。

    现在,我们把dev分支的工作成果合并到master分支上:

    $ git merge dev
    Updating d17efd8..fec145a
    Fast-forward
     readme.txt |    1 +
     1 file changed, 1 insertion(+)
    

    git merge命令用于合并指定分支到当前分支。合并后,就可以看到,和dev分支的最新提交是完全一样的。

    注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

    当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

    6.5

    合并完成后,就可以放心地删除dev分支了:

    $ git branch -d dev
    Deleted branch dev (was fec145a).
    

    删除后,查看branch,就只剩下master分支了:

    $ git branch

    * master

    6.6合并到master分支有冲突。

    git会告诉我们什么文件有冲突,git status也会告诉我们。

    手动修改冲突文件,再提交,就可以解决。

  • 相关阅读:
    putty远程登录,no supported authentication methods available解决方法(腾讯云)
    spring boot 集成 springbootstarterquartz 集群版配置
    排序算法
    密码发生器
    分解质因数
    python基础面试题
    计算输入密码的时间
    论文解读(GCC)《Efficient Graph Convolution for Joint Node RepresentationLearning and Clustering》 Learner
    期望、方差、协方差 Learner
    论文解读(LGAE)《Simple and Effective Graph Autoencoders with OneHop Linear Models》 Learner
  • 原文地址:https://www.cnblogs.com/xwzp/p/8931611.html
Copyright © 2020-2023  润新知