我有以下dir结构
root root/framework (Yii) root/protected/messages
所有这个文件夹必须是单独的git回购
我想要做的是
root
和root/framework
必须是单独的回购。 但
root/framework
必须拉,因为我没有推这个存储库的访问。 我是说我拉我父母回购时,但我不推,当我推父回购。
另一个问题是,Yii(root / framework)的远程目录结构看起来像http://screencast.com/t/mU1TgXuZDv我只需要框架文件夹的内容。 我怎样才能把这个文件夹的内容到root/framework
?
为了使root/protected/messages
分开git回购,所以,当我推拉root
git回购,也为此做一个。 换句话说,推拉与父母一到两个单独的遥控器。
为了解决第二个问题,我在root/protected/messages
里初始化了新的repo,但是现在他们单独推拉。 我的意思是,我希望他们一次推动和改变2个遥控器的变化。 无法弄清楚如何做到这一点。
我也不知道第一个问题。
有什么build议么?
为了在父git库中创建一个单独的独立git仓库,你需要研究Git子模块( http://git-scm.com/book/en/Git-Tools-Submodules )。 这些基本上允许你创建一个完全独立的git仓库,它本身就是一个git仓库。
创建子模块的命令是git submodule add git://path/to/gitname.git folder-containing-the-inner-git
。 当然你需要在执行这个命令之前先cd到父文件夹中,在你的情况下这将是root
。 git://path/to/gitname.git
将成为Yii
的git url,而folder-containing-the-inner-git
将成为root/framework
。
为了拉动整个git回购的Yii
的特定文件夹,你可能想要尝试在这个问题上对stackoverflow建议git checkout
如何拉特定的目录与git 。 我从来没有尝试过这个。
另外,从Git 1.7
你也可以做一个sparse checkout
( https://www.kernel.org/pub/software/scm/git/docs/v1.7.0/git-read-tree.html#_sparse_checkout )。 尽管您仍然需要获取整个回购。
一旦你在root
使用git子模块创建一个独立的git repo,你将不得不在root/protected/messages
单独推拉git。 然而,你可以通过为root
内部的repo创建一个git钩子( http://git-scm.com/book/en/Customizing-Git-Git-Hooks )来自动执行这个过程。 一个钩子是一个脚本,可以执行特定的git事件/操作,如提交,合并等。这些事件的完整列表,你可以参考这个网页… http://www.manpagez.com/man/ 5 / githooks /
似乎没有一个git push
或pull
事件。 然而,有一个git merge
事件… post-merge
:
这个钩子是由git merge调用的,当在本地仓库上完成git pull时会发生这种情况。 钩子接受一个参数,一个状态标志指定是否合并完成是一个壁球合并。 这个钩子不能影响git合并的结果,如果合并由于冲突而失败,则不执行。
该钩子可以与相应的预提交钩子一起使用,以保存和恢复任何形式的与工作树相关的元数据(例如:权限/所有权,ACLS等)。 有关如何执行此操作的示例,请参阅contrib / hooks / setgitperms.perl。
所以你可以写一个简单的bash脚本,如:
cd root/protected/messages
git pull origin master
所以,每次从root
的外部回购仓库中,这个脚本都会被解雇,你也可以把内部回购仓库的内容也拉出来。 然而,这将发生在每一次合并,而不仅仅是一个拉的合并,所以你可能要小心。
希望这可以帮助。
你可以尝试更直接的方式:
root/framework
添加到.gitignore
中; root/framework
并在那里初始化新的git仓库; 你将有matroshka风格回购。 但坦率地说,它们比git-submodules
解决方案更难支持,因为root
repo完全不知道其他的回购,而且都push
esh,需要在每个repo中分别进行。