如何使用 GIT 处理项目的不同部分?

How to handle different parts of a project using GIT?

我是一名电子产品设计师,我的项目由多个部分组成,例如:

我有一个主项目文件夹,每个部分都在一个单独的子文件夹中。

我现在正在使用 GIT,并且我为项目的各个方面创建了一个新的存储库。为了我自己,我使用 GitExtensions/SourceTree 来避免键入 GIT,并为我的更改历史记录提供一个可视化 GUI。 对于每个项目,我都有 2 到 7 个不同的回购协议,用于与之相关的各个方面。它认为这不是要走的路,我想将所有内容统一在一个 "container" 中,同时为每个方面保留单独的历史记录。

Here推荐使用单个repo,不同的部分保存在不同的文件夹中。但我认为这将成为一条历史线。

Here 建议创建一个 repo,每个部分都有孤立的分支。但是我必须确定我每次提交时是否在正确的分支上。 他还建议使用不同的 repos 并推送到同一个远程,但这需要为每个 repo 打开不同的 GIT GUI 实例。

我对GIT很陌生,所以我的结论可能不正确。

我想为项目提供一个开放的 GUI,所有部分都有 "parallel" 历史,如果我对硬件进行更改,当我提交时,它将在硬件中完成历史行,或者如果我进行了 SW 更改,那么这可以提交到 SW 历史行。所有这一切都没有检查分支的麻烦,也没有 GUI 的多个实例。

这种可能吗?

谢谢!

PD:也许有更好的方式来组织项目。我也想听听其他解决方案。

只需将所有文件提交到一个存储库(一个全新的存储库或将所有文件添加到现有存储库之一)。

您可以轻松查看单个子目录的历史记录:

git log THE_DIR

或者显示更改,而不仅仅是提交消息:

git log -p THE_DIR

您可以使用孤立的分支和子模块来组装一些东西。这有点复杂,因此您可能想要真正检查您的假设,即是否对每个部分都有单独的历史记录。但是如果你想设置它,你可以这样做:

git init
git checkout --orphan master-a
# ... commands to set up the content for project part A in your working tree
git add .
git commit -m "init part A"
git checkout --orphan master-b
# ... commands to set up the content for project part B in your working tree
git add .
git commit -m "init part B"
git checkout --orphan master
rm -rf *
git submodule add -b master-a --name part-a -- ./ a-directory
git submodule add -b master-b --name part-b -- ./ b-directory

不过,我不能说任何给定的 UI 工具与子模块的交互有多无缝。但这确实为您提供了每个部分的独立历史,同时将所有内容存储在一个存储库中,但让默认分支为整个项目构建工作树。