背景:
之前翻译的DICOM3.0标准是在本地创建的git仓库,并非在github上创建,此时别人是无法访问的,当初的目的是想待标准翻译初步完成后再提交到github上。
然而由于本地的翻译工作采用MarkDownPad进行编辑,文档中的图片需要有一个公网URL才能在文档中显示(注:马克飞象工具是可以直接将剪切板中的图像插入到MarkDown文档致中的,目前马克飞象已经出了Windows和IOS的客户端,下载),因此就在Github上创建了DICOM-Chinese的仓库,并在其中创建了Figure子文件夹用于存放文档中出现的所有图片。
合并git库:
既然如此为了省去两个git仓库之间编辑的繁琐,今日希望将本地.git仓库“Part 8:Network Communication Support for Message Exchange”合并到“DICOM-Chinese”中,并且希望保留“Part 8:Network Communication Support for Message Exchange”之前的所有提交记录。——就是此次博文要讲的主要内容,详情如下:
具体操作的指令如下:
为了下文描述方便,假设本地翻译文档.git仓库路径为:c:\Part8-NCSME,Github迁到本地的.git仓库路径为:c:\DICOM-Chinese
#``` bash
#跳转到DICOM-Chinse目录,即.git所在目录
cd c:\DICOM-Chinese
#添加Part8-NCSME到DICOM-Chinese
git remote add other ../Part8-NCSME
#从Part8-NCSME仓库抓取数据到DICOM-Chinse本地库
git fetch other
#从Part8-NCSME仓库抓取master分支到本地DICOM-Chinese,命名为part8
git checkout -b part8 other/master
#切换回DICOM-Chinese的master分支
git checkout master
#合并part8分支到DICOM-Chinese本地master
git merge part8
#```
知识点补充:
git中的working tree与index
git index有时候也称之为staging area或cache;git working tree也为称为working directory
从下图可以看出working tree就是working directory,即文件系统中的.git的父目录,该目录中是我们具体操作的所有文件,类似于SVN中的本地工作副本。示例如下图所示:
git不同于svn采用中央仓库管理模式,而是采用分布式管理,即每一个本地副本都是一个git全仓库。因此在本地的git版本库有三个状态:
1. workspace 或称为working tree 亦可称作working directory
2. index或称为staging area
3. local repository 或称为git directory
workspace就是本地文件系统中存储的具体操作的文件以及文件夹;index就是修改缓冲区;local repository就是版本库,与之前svn服务端的版本库一个含义,就是版本管理系统用户进行修改记录的数据库。
git中的checkout
由于git采用分布式管理,本地同时包含上述workspace、index、local repository三个部分。因此git中的checkout指令比svn中的checkout功能复杂。svn的checkout就是从服务器端下载仓库副本到本地指定目录,由于git本地目录包含仓库文件,以及本地缓冲,因此checkout提供分别从不同地方重新检出代码的功能,如下图所示:
checkout 不指定版本或仓库(即分支)的情况下默认从index本地缓冲区检出代码;如果指定版本或仓库(即分支)时,git会从local respository检出代码。本地具体测试情况如下:
参考资料:
- 合并两个git仓库
- git的checkout
作者:zssure
时间:2015-08-29
版权声明:本文为zssure原创文章,转载请注明出处,未经允许不得转载。