gpt4 book ai didi

git - 一个文件夹中的多个 GIT 项目

转载 作者:太空狗 更新时间:2023-10-29 14:29:55 31 4
gpt4 key购买 nike

我有一个 cpp 文件夹,其中包含所有这样排序的库和程序

cpp/libraries
cpp/programs

cpp/programs/proj1
cpp/programs/proj2
cpp/testing/

直到现在,使用一个大的 cpp git 还是很不错的,里面什么都有。但是,因为我现在一次做多个项目,所以将两个项目的所有提交混在一起变得相当不方便。我已经阅读了很多关于子模块的内容,包括为什么它们不是很好。我的具体情况是 100% 离线(只推送到 USB 内存棒以便随身携带)。

我理想的解决方案是子文件夹(用于项目)中的几个 git,它们是完全独立的,但保留“全部”git(用于测试和库等),其中包含整个 cpp 文件夹。就像使用 .gitignore 一样,只需将被忽略的子文件夹 project1 和 2 初始化为新的 git。它不是!我需要将库与项目放在同一个 git 中。但是如果我在当前文件中开始一个新文件,我总是得到“对未跟踪文件的修改”而不是工作目录清理...

子模块真的可以解决这个问题吗?还有其他一些简单的方法吗?正如我所说,这是一个特例,因为这些是我的私有(private)/本地 git,我只需要它尽可能简单(不需要严格一致或任何东西)。

我使用 git 作为 cli 工具,除非在 gui 东西 (mac) 中有巨大的好处,否则我真的不想改变它。

感谢您的建议。

最佳答案

Git 内置了两种解决方案:子模块子树。还有一些外部解决方案使用工具来实现类似的过程(例如 git-repo )。

子模块是使用子项目的完全独立的存储库实现的。这些存储库通常从远程克隆,然后将克隆存储在 super 项目的 .git 目录中,并将它们的工作树投影到 super 项目工作树的子目录中。子项目的历史与远程的“上游”或共享历史直接相关。也就是说,对于相同的提交,Git 提交哈希是相同的。

子树 以更“聪明”的方式实现(无论好坏)。子项目作为文件树导入到 super 项目中,但 Git 记住它这样做了,并且可以支持记住导入的远程 URL 等。因为子项目成为 super 项目的真实和直接的一部分,所以很容易做出改变。您不必单独提交或管理对子项目的更改。但在我看来,这既好又坏。通常,您明确希望有意将子项目(例如库)更改与 super 项目(例如使用库的应用程序)分开。与子模块相比,子树更容易忽略这种区别。同样对于子树,所有子项目提交都将与 super 项目提交混合在一起。您可以“压缩”子树提交,但这会使从远程子树推送和 pull 更改变得更加困难(并且耗时),因为每次在 super 项目中更新时,压缩的树都会从远程分支。

Git 的一个好处是,您可以像我一样,尝试在临时目录中创建项目的两个版本,每个版本都使用子树和子模块,然后看看哪个更适合您。

关于git - 一个文件夹中的多个 GIT 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783082/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com