如何正确管理父目录忽略的子目录中的git repo作为自己的项目?

时间:2014-03-25 21:35:47

标签: git vagrant git-submodules

我希望将Vagrant用于laravel的开发项目。为了促进这项工作,我正在使用这个github项目Laravel4-Vagrant

vagrant配置作为git存储库进行管理。 Vagrant设置的一部分有一个每个定义的www目录,一旦设置了服务器就会映射到/var/www,这样您就可以直接使用来自主机虚拟机的guest虚拟机内的文件。但是,在this www目录中有一个.gitignore文件。这很有意义,因为你想管理你的流浪汉设置并从头开始使用你的应用程序开发等。

但是,您开始进行应用程序开发并将项目放在此www目录中。在git中管理这个项目会很好,然后你可以将你的应用程序部署到另一个Web服务器或新的vagrant安装。由于.gitignore文件,无法在此目录中的文件上使用git,因为父级要忽略它。

我不确定git-submodules是否是正确的解决方案或其他特殊配置。


更一般地说:

如何为项目创建git repo,忽略子目录,但该子目录中的文件(被父项忽略)是在他们自己的git repo中管理的?

理想情况下,我应该可以将父母和孩子分开包装。

非常感谢一些通用的解释和一些特定的帮助来设置上面列出的项目作为示例。


编辑:

对结构等没有实际要求,只要这两个项目可以在单独的回购中维护,并且可以一起部署或自己部署(例如,我可以使用我自己设置的自定义流浪者来设置另一个dev / prod环境或我可以将laravel项目部署到其他地方的现有部署。我还会考虑其他易于协同工作的标准源版本控制系统。另外,如果最初的laravel repo是通过git安装的,它会有所不同吗?使用上面引用的模板github项目,它不会克隆初始安装的git repo,而是使用laravel安装程序。

2 个答案:

答案 0 :(得分:5)

从项目的根目录,使用干净的索引:

  1. git rm www/.gitignore
  2. 将/ www添加到项目根目录的.gitignore中。当你在它的时候,也可以摆脱这些线:

    /www/bootstrap/compiled.php
    /www/vendor
    
  3. git add .gitignore

  4. git commit
  5. ......那应该这样做。您现在可以在www内运行所需的任何git命令,而不会干扰外部仓库。两个回购都可以单独克隆,但流浪汉配置不应该工作,除非内部仓库克隆在正确的位置。

答案 1 :(得分:3)

Git子模块从您的存储库的角度来看是一个"链接"到另一个存储库。用例将包括在项目之外开发的依赖项。我个人不会用它来将你的项目与你的流浪汉设置分开。

我有两种方法通常用流浪汉设置项目。它们可以作为您决定您将要做什么的指南。

将流浪汉设置放入项目

当使用与一个项目绑定的虚拟机时,我将Vagrantfile和cookbooks与所有src文件一起放入一个git存储库。

存储库文件夹结构可能如下所示:

myProject/src/
myProject/vm/

vm中,可以找到Vagrantfile.vagrant文件夹(由git忽略)和配置文件。在src内。我把所有通常都存在于存储库根目录中的内容放入其中。

如果vm与项目紧密耦合,则此设置非常方便。如果有人选择不使用vm,则不需要使用vm,但它就在那里。通过拆分目录,可以按目录过滤git日志,然后清除"清除"如果需要,记录项目和vm的更改。

缺点是文件在HD上需要更多的空间,但因为它们只是文本而且通常没那么多,所以这并不算真。

您当然可以将Vagrantfile与正常的项目设置一起放入您的存储库根目录,并为您的配置文件提供一个文件夹。

拥有虚拟机存储库和项目存储库

对于此设置,单个VM拥有它自己的存储库。 Vagrantfile指向主机系统上用于同步文件夹的位置。

VM --> vm/project-a --> dev-machine/project-a
   --> vm/project-b --> dev-machine/project-b
   --> vm/project-c --> dev-machine/project-c

如果用户尚未克隆这些项目,则主机系统文件夹可能不在那里。也可能发生用户未更新项目存储库的情况。然后他们会得到错误,因为项目的更改会破坏VM。

我们在一家公司中使用了这种设置,我们有许多不同的项目都运行在一堆相同的服务器上。因此,我们只需要一个VM来运行所有这些项目。

在很短的时间之后,如果发生错误,每个人都习惯了更新VM。我们还检查了Vagrantfile.dist到repo中。开发人员必须复制它并从中创建自己的本地Vagrantfile。他们会将同步文件夹更改为指向其主机上的实际项目路径。此外,他们还需要删除他们没有合作的项目。

如果我们为每个项目创建一个VM,情况会更糟。或者,将VM作为单个项目运送,并让每个人检查并开发该项目。

相关问题