git 如何拥有一个标准的“基础”回购协议(而不是共享库回购协议)和衍生的项目回购协议?

vdzxcuhz  于 2023-02-02  发布在  Git
关注(0)|答案(3)|浏览(116)

我有一个主存储库(repo 1),还有一个存储库(repo 2)需要放入第一个存储库中,但我不知道如何将它们放在同一个文件夹中。我的想法是,每个项目都有一个标准的代码库,但每个项目都是自己的git存储库。

/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,然后创建一个新的分支,这是你的项目,然后保持合并的分支与代码库repo每次改变?

r9f1avp5

r9f1avp51#

编辑:为了有两个. git目录,当你初始化它们的时候,会有一些额外的工作。当你初始化的时候,做:

git --git-dir=.git1 --work-tree=. init
git --git-dir=.git2 --work-tree=. init

现在你在同一个目录下有两个git目录,这不是很好。此时,请确保. git1和. git2都在. gitignores中,因为默认情况下它们不会被忽略。另外,你运行的每个git命令都必须有--git-dir参数来指定你正在与哪个仓库交互,你可以为它设置别名。
因为它们在同一个基目录下,子模块不能工作,你可以把."gitignore"文件放在两个."git/info/exclude"目录下,把它们放在. git/info/exclude可以确保另一个repo不会得到排除项。
如果两个存储库的差别比文件夹更细,那么可能需要一些维护,但是如果您在每个. gitignore中指定只属于OTHER存储库的文件,那么它应该可以工作。
参见:gitignore

fnvucqvd

fnvucqvd2#

使用git submodule
更新:
需要成为所有仓库一部分的标准代码库必须是一个独立的git仓库。

git submodule add <repo_nick_name> <repo_path>

将把那个存储库添加到这个存储库中。在克隆和推送时,只有.gitmodules文件和存储库中的散列将被推送/克隆。

git submodule init

以及

git submodule update

分别初始化和更新远程子模块REPOS。
有关详细信息,请查看git community book documentation on git submodules和/或scot chacon的截屏视频。

eagi6jfj

eagi6jfj3#

等等,也许这比我想象的要容易。你能克隆一个标准的代码库repo,然后创建一个新的分支,这是你的项目,然后保持合并的分支与代码库repo每次改变?
你可以这样做。我也有一个项目,我是这样做的。大部分代码是相同的所有子项目。我创建了一个新的分支,为每个项目,以保持文件只属于该项目分开。我定期合并master分支到其他分支。
你也可以创建主仓库的克隆,然后你只需要把origin/master分支的修改合并到每个项目的master分支中。

相关问题