2009-11-11 71 views
4

我有一个3个项目,我想分叉。它们都是相互关联的 - 改变一个可能需要改变另一个。因为它们都是相关的,所以我想为叉子创建一个存储库,同时保持从每个原始的下拉更新的能力。如何使用git将多个项目分叉到一个存储库中?

我该如何设置我的git存储库?

这些都是初步的想法,所以如果这是疯狂的/愚蠢的我不会感到惊讶。是吗?

+0

你能否详细说明为什么你想为你的3个不同的但相关的项目单个存储库? – 2009-11-11 22:30:17

+0

我的意思是:你想达到什么目的?请记住,git与SVN或CVS完全不同,例如... – 2009-11-11 22:31:44

+0

而不是单独构建每个(并按正确的顺序),我想让它们成为同一构建过程的一部分。由于它们都必须在一个范围内,因此一个存储库对我来说是有意义的。任何其他想法?此外,我打算在这种情况下拥有自己的项目(依赖于这些项目)。 – 2009-11-11 22:49:01

回答

3

你总是可以使用“git remote add <name> <url>”来添加更多的源作为源。

+0

如何获取/合并某个目录中的文件的源代码。 (这很难解释)。更明确的说:如果我有文件夹“proj1”和“proj2”,分别为每个远程文件夹,我如何告诉远程proj2上的获取其源代码为/ prog2? – 2009-11-12 02:50:30

+2

'subtree' merge ...或** submodules ** – 2009-11-12 09:32:15

2

有一种可能性,我从来没有尝试过“真实”,但这可能会奏效。

比方说,你有三个项目创造性地命名为Proj1Proj2与(猜)Proj3。我们还要说全部或部分依赖于外部库,例如名为Lib1.dll和另一个名为SuperLib.dll

首先,文件夹结构,我会做一些事情,如:

MyCode\ 
    build_all.bat 
    Docs\ 
     [...] 
    Libs\ 
     Lib1.dll 
     SuperLib.dll 
    Proj1\ 
     [...] 
    Proj2\ 
     [...] 
    Proj3\ 
     [...] 

,那么你会在每个ProjX文件夹中创建一个存储库:

cd \MyCode\Proj1 
git init 
cd \MyCode\Proj2 
git init 
cd \MyCode\Proj3 
git init 

然后,你将创建一个库为整个事情:

cd \MyCode 
git init 

这个资料库的内容,对于git的,将是Libs文件夹及其内容,build_all.bat构建脚本和3个子项目。

所以,一旦你改变你的源代码,比如说Proj1\Main.cs,整件事情不会看到修改。你将不得不对Proj1,然后你会去整个事情然后git commit它(现在git将能够看到,Proj1已被修改)。

使用这种方法,整个事情的历史只会声明何时ProjX被修改,但它不会直接跟踪单个文件。如预期的那样,ProjX上的存储库将像往常一样跟踪每个文件。

如果你试试一个“真正的项目”,让我知道结果!

祝你好运!

+0

嗯,git命令将如何知道“整个事物”和每个子回购之间的区别?我怀疑它可能会有点困惑。你之前试过回购仓库吗? – 2009-11-12 02:46:27

+0

它不会感到困惑:在寻找repo时,git会查看当前目录;如果里面没有“.git”目录,它将上升一级,再次查找存储库(“.git”目录),直到找到第一个存储库。所以,你是安全的。 – 2009-11-12 09:05:15

+0

酷!这确实是一个选择。 – 2009-11-12 14:42:18

6

您可能会想要获得git-submodule的功能。从here报价:

Git的子模块支持允许 存储库包含作为 子目录,一个 外部项目的结算。子模块维护自己的身份 ;子模块 支持只是存储的子模块 仓库的位置和提交ID,所以 谁克隆 含项目(“上层项目”)其他开发商 可以轻松克隆所有子模块在 同一版本。部分结账 的超级项目是可能的:你可以告诉Git克隆没有,一些或 所有的子模块。

+0

看起来像创建一个子模块将把每个项目看作是独立的。不幸的是,我希望所有这些合并。在子模块的手册页上(感谢您在这里指出),它建议使用远程和“子树合并”策略。我要深入了解并报告。 – 2009-11-12 02:57:14

+0

这是git-submodule文档的更新链接: http://git-scm.com/book/en/Git-Tools-Submodules – 2012-05-09 10:34:34

1

我想我应该使用subtree merge strategy。我将不得不实际尝试一下,看看它是否正常。如果事实证明这是一个好方法,我会将这个答案标记为已接受。

与此同时,我仍然乐于提供建议。

相关问题