我有一个与我合作的主回购(回购1)。我有另一个需要适应第一个的回购(回购2),我不知道如何将它们放在同一个文件夹中。我的想法是,我在每个项目中都有一个标准的代码库 - 但每个项目都是它自己的git repo。
/project
/.git(repo 2)
/.git(repo 1)
/repo_2_sub
/repo_2_sub_sub
/repo_1_sub_sub
/repo_1_sub
/repo_1_sub_sub
/repo_2_sub_sub
没有文件重叠 - 但有些文件夹结构会重叠。因此,有时一个仓库中的某些文件夹将位于另一个仓库中。
我如何工作,以便这两个存储库构建完整的代码库?
更新
两个git repos都存在于同一个根项目文件夹级别。它们不能是子模块,因为它们如上所示来回穿过彼此。它们不是单独的文件夹。
更新2
等等,也许这比我想象的要容易。你可以克隆一个标准的代码库repo,然后创建一个新的分支,它是你的项目,然后每次更改时都继续将该分支与codebase repo合并?
答案 0 :(得分:2)
使用git submodule
更新
需要成为所有repos的一部分的标准代码库必须是一个单独的不同git存储库。
git submodule add <repo_nick_name> <repo_path>
会将该回购添加到此回购中。在克隆和推送时,只会推送/克隆.gitmodules
文件和repo中的哈希值。
git submodule init
和
git submodule update
分别初始化和更新远程子模块库。
有关详细信息,请查看git community book documentation on git submodules和/或scot chacon的截屏视频。
答案 1 :(得分:2)
编辑:为了拥有两个.git目录,当你启动它们时,会有一些额外的工作。当你初始化时,执行:
git --git-dir=.git1 --work-tree=. init
git --git-dir=.git2 --work-tree=. init
现在你在同一个目录中有两个git dirs。不是很漂亮此时,请确保两个.gitignores中都有.git1和.git2,因为默认情况下不会忽略它们。此外,您运行的每个git命令还必须具有--git-dir参数,以指定您正在与哪个存储库进行交互。您可以为此设置别名。
由于它们位于相同的基本目录中且子模块不起作用,因此可以将“.gitignore”文件放在“.git / info / exclude”目录中。将它们放在.git / info / exclude中可以确保其他仓库不会获取排除。
如果两个存储库的粒度比文件夹更精细,则可能需要一些维护,但如果您在每个.gitignore中指定仅属于OTHER存储库的文件,它应该可以工作。
请参阅:gitignore
答案 2 :(得分:1)
等等,也许这比我容易 思想。你能克隆标准吗? codebase repo然后创建一个新的 分支是你的项目然后 只是继续合并那个分支 codebase repo每次更改?
你可以这样做。我还有一个项目,我这样做。对于所有子项目,大多数代码都是相同的。我为每个项目创建一个新分支,以保持仅属于该项目的文件分开。我经常将master
分支合并到其他分支。
您还可以创建主存储库的克隆。然后,您只需将origin/master
分支中的更改合并到每个项目中的master
分支中。