Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381020
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1620
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-10 16:55
个人简介

当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。

文章分类

全部博文(138)

文章存档

2016年(2)

2015年(2)

2014年(15)

2013年(119)

我的朋友

分类: LINUX

2015-02-13 16:22:19

 

搭建自己的git仓库的时候,不小心在希望搭建的目录的父目录(~git init了,导致git管理的范围扩大了,所有home目录下的文件都被git看到了,这样不好不好。

本来想看看能不能修改git工作目录的方式来改一下git能看到的文件的范围,发现git是在工作目录下面创建了一个.git目录,这下面存放了所有的git管理的文件,感觉应该很难去通过配置文件,去修改git的工作目录。去晚上找了找方法。

比较靠谱的一个网站:stackoverflow 威武

 

其实大家的需求通常是开始的时候把很多不相关的东西放到了一个repository,后期想把其中的一个目录独立出来,作为一个独立的repository。这个需求比较普遍,他只使用后面介绍的第一部分就好了。

下面看详细过程,原来的repository是这样的

/home/peterqi/Git/

|-- corba2bulk

|-- corba2soap

|-- include

|-- makefdt

`-- rerun

 

/home/peterqi/ 是原来repository的根目录

 

我要把/home/peterqi/Git/这一层目录拿掉,让git的根目录是/home/peterqi/Git/

也就是/home/peterqi/ 下面的除了Git目录的其他所有内容都不让git看到,有点啰嗦了。

 

第一步 把子目录独立成独立的repository

/home/peterqi/Git/目录下的所有文件夹,独立出来成为独立的repository,这需要两个操作:

Step1 在原先的repository中为每一个文件夹创建单独的分支

git subtree split -P Git/corba2soap -b corba2soapBranch

git subtree split -P Git/corba2bulk -b corba2bulkBranch

 

git subtree 用于在当前的repository中,为一个文件夹创建一个单独的分支,命令结束后,当前的repository中会有三个分支:

master

corba2soapBranch

corba2bulkBranch

git subtree 在默认的git中是没有的,需要安装,详见Appendix

Step2 为每一个step1中创建的子分支创建单独的repository

         mkdir corba2bulk

         cd corba2bulk 

         git init

         git fetch /home/peterqi corba2bulk

git checkout -b master FETCH_HEAD

         这样这个新建的repository 就有了原来的repository的分支corba2soapBranch

的内容

 

         rerun corba2soap执行上面的操作

第二步 把几个独立repository 合并成一个repository

新建一个空的repository

mk /home/peterqi/tools.git

cd /home/peterqi/tools.git

git init

git-stitch-repo /local/peterqi/git/rerun:rerun  /local/peterqi/git/corba2soap:corba2soap  /local/peterqi/git/corba2bulk:corba2bulk |git fast-import

前面三个参数是第一步创建的三个独立的repository,这样会在新的repository中创建三个分支!!

master-rerun

master-corba2soap

master-corba2bulk

 

git-stitch-repo 是一个用perl写的第三方的tool,安装方法见Appendix

 

从网站上看,还需要一个merge的操作才能把三个repository的内容整合成一个分支,但是发现:

         三个分支中,master-rerun 分支只有rerun的内容,master-corba2soap分支中有reruncorba2soap的内容,master-corba2bulk分支中有三个分支的内容,所以我感觉开始提到的网站上内容有点旧,目前最新的git-stitch-repo 这个tool 自动merge了分支。

 

现在的任务就是 把master-corba2bulk 的名字改为master

git branch -m master-corba2bulk master

然后删掉其他两个分支

git branch -d master-rerun

git branch -d master-corba2soap

ok

 

Appendix

如何安装subtree

本身subtree不在git中,使用的时候会提示这不是一个命令。

他在git的源码中,但是需要单独安装。

因为我使用的git32位的,这次我索性自己从新编译了一个64位的git

然后在git-master/contrib/subtree 这个目录下找到subtree,编译安装即可

git-stitch-repo 安装

git-stitch-repo 这个东西是第三方的东西,是个perl脚本,所以他不在git的源码中,要单独下载安装。

网上搜了一下,下载到源码:

这个东西,必须用root用户来安装(这个肯定能改,没研究)

由于lincaseroot用户目前访问不了个人用户,所以需要把安装包拷贝到local目录下,然后用root安装

 

安装方式是三步:

 

perl Makefile.PL

make

make install

然后执行git-stitch-repo 的时候提示

Can't locate Git/Repository.pm in @INC

 

然后就发现,perl脚本也是需要解决依赖的,安装好

Git::Repository

然后发现还是依赖System::Command

都下载,安装好,就能运行git-stitch-repo

下载链接如下

 

阅读(1940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~