我有一个新项目将使用Codeigniter作为框架,Flexiauth用于用户登录的东西,然后我自己的应用程序的自定义代码。 codeigniter和flexiauth都使用Git,我希望能够从这些代码中获取最新信息。
我是否将每个添加为单独的远程存储库并且只是拉动?不会造成冲突吗?
有没有更好的方法来处理多个git存储库作为更大项目的组件?
答案 0 :(得分:2)
是的,有。 Git支持submodules。
我建议将the relevant section of the Pro Git book online作为解决此问题的良好起点,但基本思路是使用以下语法添加子模块:
git submodule add git://github.com/chneukirchen/rack.git rack
其中rack
是您要设置为子模块的文件夹。克隆repo时,需要在克隆后运行以下命令以获取子模块:
git submodule init
git submodule update
这样,您可以将第三方库完全保留在您的仓库中,并仅将其记录为子模块。
或者,这是Composer要解决的问题。 Laravel 4框架实际上是以这样的方式构建的,即所有组件都与Composer一起安装,您只需运行composer update
即可全部更新它们。你可以想象使用Composer和CodeIgniter(Phil Sturgeon在http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter写了一篇关于这样做的博客文章),但是Flexiauth没有出现在https://packagist.org/的存储库中,所以我会选择使用Git子模块。
答案 1 :(得分:1)
我不是git专家,它可能不正确,但我要做的是在external_library
,third_party
或您导入到的某个文件夹中为库启动git repo你的项目。然后,当需要更新时,请进入文件夹>项目文件夹并执行git pull origin master
或任何您命名的内容。
我认为在git中使用git是典型的,例如:
myproject
.git <- root repo for whole project
application
system
third_pary
cool_library
.git <- repo for cool_library
cool_folder
some_lib.php
other_cool_library
.git <- repo for other_cool_library
neat_libs
neato.php
在myproject
的根目录中,git命令只会影响myproject
的repo。所以
$cd myproject
myproject$ git commit -a -m"neat"
会将更改提交到您的myproject
回购协议;提交的所有文件夹中的所有更改(但是,如果您对/myproject/third_party/cool_library/cool_folder/some_lib.php
进行了更改,则应在进入/myproject/third_party/cool_library/
之前进入git commit
并执行/myproject/
。
至于拉动:
$cd myproject
myproject$ git pull origin master
将进入myproject
; .git
文件夹中的其他third_party
将不受影响(当然,除非其他人将更改推送到myproject
回购更改为third_party
。
所以,tl; dr,拉入你的项目根目录不会导致子文件夹repos从它们的起源拉出来。当您需要更新时,请切换到库的目录并执行拉动。
换句话说,鉴于上述文件结构,如果刚出现cool_library
的更新,我就会这样做:
$cd myproject
myproject$ git commit -a -m"committing before updating cool_library"
myproject$ cd third_party/cool_library
cool_library$ git pull origin master
cool_library$ cd ../../
myproject$ git commit -a -m"commiting after updating cool_library"