Git入门

来源:互联网 发布:wps mac 免费完整版 编辑:程序博客网 时间:2024/06/05 19:11

基本概念

        版本控制:记录一个或多个文件的内容变化,以便将来查看特定的版本内容或者恢复到特定的版本。类似于结绳记事。

历程

        复制:不断的复制整个项目,并记录这些文件的内容变化等。其好处是简单,但容易出错,且不容易恢复、占用空间大。

        保存补丁:在本地硬盘上保存补丁集(文件修改前后的变化 ),通过这些补丁,可以计算出各个版本的内容。占用空间小,但无法多人协作。因为合并的时候麻烦。

        集中化版本控制:用于单独服务器记录所有的文件修改版本,所有的开发者连接该服务器,从中导出文件、修改、提交等,常用的如SVN。缺点是如果服务器挂掉,则整个项目的变量历史都随之消失,除非做好备份。

        分布式版本控制:客户端并不是只提取最新版本的文件快照——集中式版本控制是这么做的,而是将文件的所有历史变更都保存到本地,这样一来,即使服务器或某些客户端崩溃,一样可以通过别的客户端进行恢复。常用的如git。

基础

        参考:Android高级应用课程及中文文档

        对文件进行修改后,svn是通过文件记录修改信息(包含内容与位置等,类似于当前文件与初始文件的差值),并不是将旧有的文件另存一份。而git是通过快照(对磁盘信息进行保存)进行保存的。由于拍照比操作文件更底层,所以git的速度要比svn快。图像可参看文档中的1-4与1-5。

        git的提交会首先commit到本地,然后push到服务器。当然,在没网的时候,可以只commit,然后再push。

文件状态

        

        其中working directory指的是工作文件夹,staging area指的是临时存储空间,git directory指的是本地的版本仓库,并不是远程服务器中的。

        

        untracked:未跟踪,指未受到版本控件的影响。类比于svn中新添加了一个文件,没有add之前。类似于svn中的蓝色问号。

        unmodified:未更改,已经添加到版本控制,但尚未进行修改。类似于svn中的绿色对号。

        modified:修改过,并尚未提交。类似于svn中的红色感叹号。

        staged:已经放入到临时仓库中。类似于svn中的蓝色加号,已经add,但尚未执行commit。当执行完commit后,又会回到unmodified状态。

存储位置

        blessed(remote) repository:远程仓库。类似于svn的服务端,代码最终汇总的地方。

        local repository:本地仓库。由于git是分布式的版本控制,因此,每一台电脑中都有一个本地仓库。

        working area:工作区。本地进行操作的地方。

        stage area:临时存储区。从working area提交到local repository之间,会有一个临时存储区。例如,在add之后commit之前,便会保存在该区中。

分支

       通过branch命令操作分支。

查看

        git branch [--list]:查看当前所有的分支。其中绿色的表示当前所处的分支。[]中表示可带可不带。

建立

        git branch <branchName>:建立分支。最后一个指的是新分支名称。

切换

        git checkout <branchName>:切换到指定分支名的分支。

比较

        git diff <branchName1> <branchName2>:比较分支1与分支2的差异。diff命令也可以用来比较不同存储位置中文件的差异。

合并

        git merge "log" <version> <branchName>:将指定的分支合并到当前分支的version版本中。第二个参数指merge时的日志信息,第三个参数指要合并到的版本,最后一个参数指要与当前分支进行合并的分支名。

冲突

        merge时如果有冲突,需要手动进行修改,然后执行add,再执行commit进行提交。再commit时直接写成git commit -m 'log'即可,不用加上文件名。

常用命令

        参考:Git命令参数及用法详解

        config:配置git。git config --list用于列出所有的配置信息。如下图:


        help git:打开git的配置文件。

        init:将当前的文件夹初始化为本地版本仓库。它会在当前的文件夹下建立一个.git文件夹,内部结构如下:


其中objects文件夹就是本地版本仓库

        add:对指定的文件执行add命令。与svn中的add类似。执行完add后,.git文件夹下会index文件,该文件是用来指定stage area的

        commit:提交,类似于svn中的commit。一定要通过添加-m(message的缩写)进行提交log的添加。如git commit hello.txt -m "i am log"指的是commit文件hello.txt,并且commit的时的log是"i am log"。此时可以发现在.git/objects文件夹下又多了些文件夹,新commit的文件经过加密后就存储在这些文件夹中。

        log:查看commit时添加的log

        diff --staged:比较work area与staged area中的区别。单独使用diff时,默认的等同diff --staged

        diff --cached:比较staged与local repo(本地仓库)的区别

        clone将远程仓库中的文件克隆到本地。类似于svn中的check out。clone下来后,也会建立一个.git文件夹,这也是本地的版本仓库,但与init生成的区别在于:该版本仓库中会有与远程仓库的联系,而init的没有。clone和checkout的最主要区别是git会clone项目历史中的所有数据(包括每一个文件的每一个版本),服务器上有的数据都会被复制到本地。如果服务器上的版本信息丢失,完全可以用clone出来的进行还原,当然只是还原到clone时的状态。如果希望clone时指定新建的项目名称,可以在命令行后加"[空格]新名称"

        pull:将远程仓库中的版本下载到本地,并且和本地仓库的进行合并。clone在尚未有本地仓库时使用,而pull在有本地仓库后需要进行合并时使用

        fetch:与pull类似,但从远程版本库中下载下来后并不会与本地版本库进行合并,而是新建一个分支。

        push:将本地版本库中的代码提交到远程版本库中。如"git push origin master"最后一个指的是当前的分支,第三个指远程的版本号。

        remote:查看与本地仓库关联的远程仓库的信息。后跟-v可查看远程仓库的地址。如果本地仓库与远程仓库没有关联,那么什么信息也不会显示。

        status:查看文件的状态。

        rm:从当前工作空间和索引(staged area)中删除文件。如果移除一个文件(假设为file),可以直接用git rm <file>,如果要移除一个文件夹(包含里面的内容),格式为:git rm-r <file>,其中r是recursively(递归)的简写。如果文件名与命令行一样可以用"--"进行分隔。每一次进行rm时,会有一行文件提示,可以配置-q(或者 --quiet)取消该行文字。如下:

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…

        reset:将当前的工作目录完全回滚到指定的版本号。如通过rm命令将工作空间和索引中的文件删除后,可以先通过"git reset HEAD <fileName>"将索引中的文件回复成本地仓库中的

        checkout:用于切换branch和检出索引中的文件。如"git checkout -- <file>"可以将索引中的文件检出到工作空间。rm一个文件后,如果想要恢复,首先需要reset到索引,再checkout到工作空间。

        branch:对分支进行操作。后不跟别的命令时,与"branch --list"一样,列出所有的分支。

        whatchanged:列出所有的修改。按q退出。

        tag:将当前本地版本库中所有文件进行标识。如git tag -a "tag1" -m "msg1"指的是为当前所有文件打上标识为"tag1"的印记。

忽略文件

        建立一个名为".gitignore"的文件(文件名就是.gitignore),然后将要忽略的文件添加到该文件中。在建立文件时,需要通过命令echo执行,window下不支持这样的文件名。

        .gitignore对其所在的目录及所在目录的子目录均有效。

        如果想忽略某个文件夹下的某个文件。用"/.gitignore所在文件夹/…/要忽略的文件夹".

        参考:Git之忽略文件

常用linux命令

        echo:生成新文件,并向其中写入相应的内容。如echo "aa" >> ha.txt,即生成ha.txt文件,并且内容为aa。>>是追加,而>是覆盖

        cat:查看指定文件中的内容

        vim:打开相应的文件并进行编辑。刚打开vim时,处于保护状态,按i(或者insert)进入编译状态。退出时先按esc进入保护模式,然后输出:wq+回车,即可将修改的文件保存然后退出vim。

通配符

        *:任意。如git add *.c表示add任何以.c结尾的文件。

提交

        1,本地建一文件,进入,执行git init。

        2,执行git remote add origin ***.git,为本地仓库关联远程仓库。其中origin为远程仓库的别名。

        3,执行add ,commit与push即可。如下:


0 0