当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。
分类: 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看到,有点啰嗦了。
把/home/peterqi/Git/目录下的所有文件夹,独立出来成为独立的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
mkdir corba2bulk
cd corba2bulk
git init
git fetch /home/peterqi corba2bulk
git checkout -b master FETCH_HEAD
这样这个新建的repository 就有了原来的repository的分支corba2soapBranch
的内容
对rerun 和corba2soap执行上面的操作
新建一个空的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分支中有rerun和corba2soap的内容,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了
本身subtree不在git中,使用的时候会提示这不是一个命令。
他在git的源码中,但是需要单独安装。
因为我使用的git是32位的,这次我索性自己从新编译了一个64位的git。
然后在git-master/contrib/subtree 这个目录下找到subtree,编译安装即可
git-stitch-repo 这个东西是第三方的东西,是个perl脚本,所以他不在git的源码中,要单独下载安装。
网上搜了一下,下载到源码:
这个东西,必须用root用户来安装(这个肯定能改,没研究)
由于lincase上root用户目前访问不了个人用户,所以需要把安装包拷贝到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 了
下载链接如下