对应文档:Git的基础
目录
Git的基础
管理历史记录的数据库
远程数据库和本地数据库
- 远程数据库: 配有专用的服务器,为了多人共享而建立的数据库。
- 本地数据库: 为了方便用户个人使用,在自己的机器上配置的数据库。
创建数据库
修改记录的提交
若要把文件或目录的添加和变更保存到数据库,就需要进行提交。
执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。
如下图,提交是以时间顺序排列状态被保存到数据库中的。凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。
- 不同类别的修改 (如:Bug修复和功能添加) 要尽量分开提交,以方便以后从历史记录里查找特定的修改内容。
- 查看其他人提交的修改内容或自己的历史记录的时候,提交信息是需要用到的重要资料。所以请用心填写修改内容的提交信息,以方便别人理解。
以下是Git的标准注解:第1行:提交修改内容的摘要 第2行:空行 第3行以后:修改的理由
请以这种格式填写提交信息。
工作树和索引
在Git管理下,大家实际操作的目录被称为工作树。
在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。
Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。
所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。
教程1 Git的基础
安装Git
windows
先介绍开放源代码的Git客户端“TortoiseGit”,然后再介绍可以把菜单等汉化的语言包。
http://code.google.com/p/tortoisegit/
具体还是看最上面的文档吧,这里就不再赘述了
初期设定
安装Git之后,请输入您的用户名和电子邮件地址。该设置操作在安装Git后进行一次就够了。这些信息将作为提交者信息显示在更新历史中。
Windows
从右击菜单中选择TorotiseGit > 设置
将显示设置的画面。请在Git的画面中输入您名字和电子邮件地址。
新建数据库
接下来要在本地新建数据库,创建一个名称为「tutorial」的空目录,并把它放在Git管理之下。
下面将以这个目录进行教程讲解
Windows
首先在任意一个地方创建tutorial目录。若要把tutorial目录放在Git的管理之下,请右击后从菜单中选择「Git 在这里创建版本库」。
接着会显示以下画面。不要勾选‘制作纯版本库’,请直接点击’确定‘。
若创建数据库成功,将显示以下画面。请点击‘OK’以关闭窗口。
tutorial目录的图示显示如下。如果图示没有变化,请从右击菜单选择「刷新到最新的状态」
提交文件
在tutorial目录新建一个文件,然后将文件添加到数据库。
首先在tutorial目录里新建一个名为「sample.txt」的文本文件,请在文件中输入以下的内容:
Windows
打开tutorial目录,右击任意空白地方,然后从右击菜单选择‘Git提交’。
显示以下画面后,请点选‘变更列表’里的sample.txt,然后在日志信息方框中输入提交信息,再点击‘确定’键。
将显示以下进度条画面。如果显示成功,请点击‘关闭’键结束画面。
从右击菜单选择TortoiseGit > 记录。您会看到刚才的提交已添加在历史记录里。我们成功提交文件啦!
共享数据库
push到远程数据库
前面我们为大家介绍了本地数据库的基本使用方法。下面,我们接着为大家讲解如何在远程数据库上共享本地数据库的修改记录。
推送
为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。
为此,需要在Git执行推送(Push)操作。执行Push之后,本地的修改记录会被上传到远程数据库。所以远程数据库的修改记录就会和本地数据库的修改记录保持同步。
克隆远程数据库
如果远程数据库中有他人的修改记录,那么把它完整地复制下来您就可以接着进行工作了。
克隆
进行克隆(Clone)操作就可以复制远程数据库。
执行克隆后,远程数据库的全部内容都会被下载。之后您在另一台机器的本地数据库上进行操作。
克隆后的本地数据库的变更履历也会被复制,所以可以像原始的数据库一样进行查看记录或其他操作。
鼠标右键
从远程数据库pull
若是共享的远程数据库由多人同时作业,那么作业完毕后所有人都要把修改推送到远程数据库。然后,自己的本地数据库也需要更新其他人推送的变更内容。
pull
进行拉取(Pull) 操作就可以把远程数据库的内容更新到本地数据库。
进行拉取(Pull) 操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。
鼠标右键:
教程2 共享数据库
在GitHub建立远程数据库
注意:需要把本地的ssh密钥添加到GitHub上,请参考我的另外一篇git文章:前端开发知识点--Git
push到远程数据库
我们试试推送在「 Git的基础」教程中创建的本地数据库吧。
Windows
请右击“tutorial”目录,然后选择“推送”。
在以下画面点击‘管理’。
将出现以下画面,在"远端"输入"origin",在"URL"输入上一页中生成的远程数据库的URL,然后点击"添加/保存"。这样,"origin"将被添加到远程列表,然后点击"OK"。
执行推送或者拉取的时候,如果省略了远程数据库的名称,则默认使用名为”origin“的远程数据库。因此一般都会把远程数据库命名为origin。
在“推送”画面的“远程”项目中,选择刚才追加的“origin”,点击“OK”按钮。
当被要求输入用户名,请使用您的GitHub用户名。
当被要求输入密码,请使用您的GitHub密码。
若下一个画面显示“成功”字样,就意味着您推送成功了。
请打开GitHub的Git页面。在‘最近更新’处您会看到刚刚推送到远程数据库的项目。
克隆远程数据库
快试试克隆远程数据库吧,这样您在别的地方也可以工作了。
请双击桌面上的任意地方,然后从右击菜单中选择“Git克隆”。
点击“Clone Repository" 按钮,再输入要克隆的远程数据库的URL和要保存的本地数据库的目录,然后点击“确定”。
这样就把上一页面中创建的数据库,以“tutorial2”的名称进行了克隆。
克隆将在以下画面开始进行。完成克隆后请点击“关闭”以退出画面。
已创建“tutorial2”目录。
从克隆的数据库进行push
试试从克隆的本地数据库进行推送吧。
Windows
首先,在之前克隆的数据库目录里的index.js 添加以下黑体字,并提交。
连猴子都懂的Git命令add 把变更录入到索引中
我们可以看到本地数据库分支的历史记录已更新,并位于远程数据库分支的前面。
接着,让我们推送新提交到远程数据库。请右击目录"tutorial2"并选择“推送”。
在以下画面点击“确定”。
推送将在以下画面开始进行。完成推送后请点击“关闭”以退出画面。
从右击菜单选择 TortoiseGit > 表示log。现在"master" 和 "origin/master"在同一水平上,意味着远程数据库已完成更新,并且跟本地数据库同步。
复习一下关于提交的位置吧。
- origin/master
表示远程数据库“origin”的分支“master”的位置。 - origin/HEAD
表示远程数据库“origin”当前提交的位置。
通常,克隆本地数据库时指向与“origin/master”相同的位置。 - master
表示本地数据库分支“master”的位置。
请打开GitHub的Git页面,我们看到push的内容已被添加到“最近更新”处。
从远程数据库pull
我们把在上一页面中从“tutorial2”推送到远程数据库的内容拉取到数据库目录“tutorial”吧。
右击tutorial目录,然后从右击菜单中选择’拉取‘,即可执行pull操作。
在以下画面点击“确定”。
pull操作将在以下画面开始进行。完成pull后请点击“关闭”以退出画面。
从右击菜单选择 TortoiseGit > 日志。现在"master" 和 "origin/master"在同一水平上,意味着本地数据库已完成更新。
整合修改记录
合并修改记录
合并
在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝。
这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更(图中的提交C)就会丢失。
解决冲突
在上一个页面我们提及到,执行合并即可自动合并Git修改的部分。但是,也存在无法自动合并的情况。
如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。
Git会在发生冲突的地方修改文件的内容,如下图。所以我们需要手动修正冲突
如下图所示,修正所有冲突的地方之后,执行提交。
教程3 整合修改记录
push冲突的状态
现在,我们将要学习怎样解决冲突。
首先,我们用“tutorial”和“tutorial2”制造一个冲突状态。
用tutorial进行的操作
首先,打开tutorial目录的index.js文档,添加以下黑体字之后进行提交并推送。
连猴子都懂的Git命令
add 把变更录入到索引中
commit 记录索引的状态
用tutorial2进行的操作
接下来,打开tutorial2目录的index.js文档,添加以下黑体字之后进行提交。
连猴子都懂的Git命令
add 把变更录入到索引中
pull 取得远端数据库的内容
现在从tutorial2 推送内容到远程数据库。
看到吧,发生了错误,推送被拒绝(rejected)了。
解决冲突
为了把变更内容推送到远程数据库,我们必须手动解决冲突。首先请运行pull,以从远程数据库取得最新的变更记录吧。
用tutorial2进行的操作
在以下画面点击‘确定’。
我们看到画面上的警告信息表示自动合并失败。请点击‘关闭’以退出窗口。
若您确认变更,请点击‘Yes’。
TortoiseGit告诉我们:因"sample.txt"出现了合并冲突,所以自动合并失败。请点击‘确定’以关闭画面。
当打开index.js,您会看到Git已添加标示以显示冲突部分。
连猴子都懂的Git命令
add 把变更录入到索引中
<<<<<<< HEAD
commit 记录索引的状态
=======
pull 取得远端数据库的内容
>>>>>>> 17c860612953c0f9d88f313c8dfbf7d858e02e91
我们将保留两方的修改,并删除多余的标示行以解决冲突。
连猴子都懂的Git命令
add 把变更录入到索引中
commit 记录索引的状态
pull 取得远端数据库的内容
既然解决了冲突,并且文件的内容已修改,现在我们需要提交。请右击并从菜单中选择‘提交’。
这样,我们已成功地从远程数据库导入最新的修改内容。
这表明两个修改记录通过新的合并提交已经成功整合了。
这时候可以把修改推送到远程数据库,应该不会发生合并冲突了。