前言

不知道这是第几次学习Git了,每次都是学完过一段就忘了,这次决定自己写出点东西,深入的再把Git再过一遍。写一下自己的东西,真真正正的把Git转化为自己的东西。这次选用的资料是猴子都能懂的Git入门。之所以选用该资料是因为语言比较通俗易懂,而我也正好想把知识总结的通俗易懂一些,算是两重学习。那么话不多说,现在开始吧~~~(写到后面发现这书已经足够通俗,很难再。。。啊,失败。)

Git的基础

首先

git是版本控制工具,用来解决大家对同一文件操作时的协作问题。
Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
而且,编辑旧文件后,试图覆盖较新的文件的时候(即上传文件到服务器时),系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。

管理历史数据的数据库

数据库 (Repository) 是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下。

远程数据库和本地数据库。

Git的数据库分为远程数据库和本地数据库的两种。

创建数据库

创建本地数据库的方法有两种:一种是创建全新的数据库,另一种是复制远程数据库。

修改记录的提交

若要把文件或目录的添加和变更保存到数据库,就需要进行提交。
执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。
Tips:不同类别的修改 (如:Bug修复和功能添加) 要尽量分开提交,以方便以后从历史记录里查找特定的修改内容。
执行提交时,系统会要求输入提交信息。请务必输入提交信息,因为在空白的状态下执行提交会失败的。
Tips:查看其他人提交的修改内容或自己的历史记录的时候,提交信息是需要用到的重要资料。所以请用心填写修改内容的提交信息,以方便别人理解。
以下是Git的标准注解:

第1行:提交修改内容的摘要
第2行:空行
第3行以后:修改的理由

请以这种格式填写提交信息。

工作树和索引

在Git管理下,大家实际操作的目录被称为工作树。

在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。

Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。

凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。

教程1 Git基础

Git安装

初期设定

安装Git之后,请输入您的用户名和电子邮件地址。该设置操作在安装Git后进行一次就够了。这些信息将作为提交者信息显示在更新历史中。

Git的设定被存放在用户本地目录的.gitconfig档案里。可以直接编辑配置文件。

$ git config –global user.name “<用户名>”
$ git config –global user.email “<电子邮件>”

$ git config –global color.ui auto //git彩色显示

可以为Git命令设定别名。例如:把「checkout」缩略为「co」,然后就使用「co」来执行命令。

$ git config –global alias.co checkout

如果在Windows使用命令行 (Git Bash), 含非ASCII字符的文件名会显示为 “\346\226\260\350\246…”。若设定如下,就可以让含非ASCII字符的文件名正确显示了。

$ git config –global core.quotepath off

若在Windows使用命令行,您只能输入ASCII字符。所以,如果您的提交信息包含非ASCII字符,请不要使用-m选项,而要用外部编辑器输入。

外部编辑器必须能与字符编码UTF-8和换行码LF兼容。

git config –global core.editor “\”[使用编辑区的路径]\””

新建数据库

在目录下使用init命令将该目录移动到本地的Git数据库。

$ git init

提交文件

对于一个文件,使用status命令确认工作树和索引的状态。

$ git status

将文件加入到索引,要使用add命令。在< file>指定加入索引的文件。用空格分割可以指定多个文件。

$ git add < file>..
$ git add . //将所有的文件加入索引

已加入到索引,我们就可以提交文件了。

$ git commit -m “”

使用log命令,我们可以在数据库的提交记录看到新的提交。

$ git log

commit ac56e474afbbe1eab9ebce5b3ab48ac4c73ad60e
Author: eguchi eguchi@nulab.co.jp
Date: Thu Jul 12 18:00:21 2012 +0900
first commit

安装git的同时会安装名为gitk的工具。使用这个工具,可以在GUI下确认提交记录。

$ gitk

共享数据库

push到远端数据库

注意:对于别人的项目你只能 pull 不能 push,只有你自己(或有权限)的项目才能 push。或者说只有你把 ssk key 添加到账号里才能无密码 push。如果你想参与别人的开源项目,先建立自己的 github 账号,然后 fork 那个项目到自己的账号里,然后在自己的项目里修改,然后发出 pull request,然后看对方愿不愿意接受你的提交。

作者:Intopass
链接:https://www.zhihu.com/question/29894004/answer/45956664
来源:知乎

推送

为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。
所以远程数据库的修改记录就会和本地数据库的修改记录保持同步。

克隆远程数据库

克隆

执行克隆后,远程数据库的全部内容都会被下载。之后您在另一台机器的本地数据库上进行操作。
克隆后的本地数据库的变更履历也会被复制,所以可以像原始的数据库一样进行查看记录或其他操作。

从远程服务器Pull

若是共享的远程数据库由多人同时作业,那么作业完毕后所有人都要把修改推送到远程数据库。然后,自己的本地数据库也需要更新其他人推送的变更内容。

Pull

进行拉取(Pull) 操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。

clone与pull的区别

clone是本地没有repository时,将远程repository整个下载过来。

pull是本地有repository时,将远程repository里新的commit数据(如有的话)下载过来,并且与本地代码merge。

对远程服务器进行操作

向远程数据库推送本地数据库的修改记录

远程数据库命名为“origin”。

请使用remote指令添加远程数据库。在< name>处输入远程数据库名称,在< url>处指定远程数据库的URL。

$ git remote add < name> < url>

TIPS:执行推送或者拉取的时候,如果省略了远程数据库的名称,则默认使用名为”origin“的远程数据库。因此一般都会把远程数据库命名为origin。

使用push命令向数据库推送更改内容。< repository>处输入目标地址,< refspec>处指定推送的分支。

$ git push < repository> < refspec>…

当执行命令时,如果您指定了-u选项,那么下一次推送时就可以省略分支名称了。但是,首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。

$ git push -u origin master

使用clone指令可以复制数据库,在< repository>指定远程数据库的URL,
在< directory>指定新目录的名称。

$ git clone < repository> < directory>
$ git clone https://nulab.backlog.jp/git/BLG/tutorial.git tutorial2

当在克隆的数据库目录执行推送时,您可以省略数据库和分支名称。

$ git push

使用pull指令进行拉取操作。省略数据库名称的话,会在名为origin的数据库进行pull。

$ git pull < repository> < refspec>…
$ git pull origin master

合并修改记录

合并

在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝。
这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更(图中的提交C)就会丢失。

合并的时候,Git会自动合并已有的变更点!不过,也存在不能自动合并的情况。此时需要手动合并。

解决冲突

如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。
Git会在发生冲突的地方修改文件的内容

<<<<<<<<<<<
这就是发生
》 =======
冲突的地方
>>>>>>>>>>>

==分割线上方是本地数据库的内容,
下方是远程数据库的编辑内容。
需要手动的修改。

整合修改记录操作

为了把变更内容推送到远程数据库,我们必须手动解决冲突。

$ git pull origin master

导入两方的修改,并删除多余的标示行以解决冲突

Github多人协作的三种方式

  1. Fork 方式
    pull request是一个request,它的目的是让别人pull你的东西。
  2. 组织
    组织的所有者可以针对不同的代码仓库建立不同访问权限的团队。
  3. 合作者
    代码仓库的所有者可以为单个仓库增加具备只读或者读写权限的协作者。